SỬ DỤNG TORTOISEGIT TRONG QUẢN LÝ DỰ ÁN

26/06/2020 438
CODEWELL

Để có thể quản lý những dự án có nhiều nhà phát triển song song, luôn cần có một công cụ phụ trợ đắc lực không thể thiếu, đó là  Git. Bài viết này sẽ giới thiệu về Git và GUI client tool của Git, mà cụ thể là TortoiseGit, đồng thời tác giả cũng sẽ chia sẻ một vài kinh nghiệm trong quá trình sử dụng công cụ này.

1. Đôi điều về Git và TortoiseGit

  • Bạn đã biết gì về Git?

Git (Distributed Version Control System) là một Hệ thống quản lý phiên bản phân tán, ra đời vào 2005, tuổi đời như vậy là khá trẻ so với các SCM tiền nhiệm khác.

Dù vậy, hiện nay, việc sử dụng Git để quản lý source code đã trở nên vô cùng phổ biến. Theo một khảo sát vào năm 2018 của Stack Overflow, có gần 90% developer đang dùng Git cho dự án của mình tại thời điểm đó.

Khảo sát về tỉ lệ sử dụng Git trong dự án ( 2018)

 

Một số đặc điểm nổi bật của Git:

  • Dễ hiểu, dễ thao tác
  • Gọn nhẹ nhưng rất mạnh mẽ
  • So với các công cụ SCM khác như Subversion, CVS, Perforce và ClearCase, Git có nhiều tính năng vượt trội như:
      • Quản lý branch dễ dàng tiện lợi
      • Có vùng stage tiện lợi có thể review lại mọi thứ trước khi commit
      • Đặc biệt là đặc tính phân tán của Git, chúng ta có thể áp dụng tùy ý bất kỳ quy trình công việc nào khi sử dụng vào dự án.

Bên cạnh đó, Git cũng có một số điểm yếu nhưng không đáng kể , trong đó điểm yếu được cho là lớn nhất đó là Git không phù hợp để quản lý các file binary lớn.

 

  • TortoiseGit là gì?

TortoiseGit là một Windows Shell Interface cho Git, được phát triển từ TortoiseSVN nổi tiếng. Điểm mạnh của TortoiseGit thì khá nhiều trong khi chỉ có một  điểm yếu duy nhất, đó là chỉ chạy trên Windows mà thôi 😀

Git CMS tuy nhẹ và mạnh mẽ nhưng lại được phân phối dưới dạng CLI nên nó vẫn là công cụ khó tiếp cận với những người không quen làm việc bằng cách gõ lệnh qua console. Đương nhiên, làm việc qua GUI luôn vui vẻ thân thiện hơn và đỡ phải nhớ nhiều command và params rắc rối hơn.

Danh sách các Git GUI tools: https://git-scm.com/downloads/guis/

Khi cài đặt xong TortoiseGit sẽ được tích hợp luôn vào menu ngữ cảnh với rất nhiều tính năng như hình dưới:

 

Bạn có thể tham khảo gallery ảnh tại đây để thấy được sự đồ sộ của TortoiseGit. 

2. Hai luồng công việc (workflow) kinh điển

 

 

Trong nhiều dự án, khách hàng hay sử dụng Git để quản lý toàn bộ source code và tài liệu. Thông thường,  có 2 workflow khác nhau được sử dụng cho repo source code và repo cho tài liệu.

 

Workflow cho source code

Workflow cho source code cần đảm bảo các yêu cầu sau:

  • Phía team có thể tùy ý làm việc theo workflow mình mong muốn mà không ảnh hưởng tới phía khách. Phía khách cũng chỉ biết đến branch bàn giao deliverables duy nhất của phía team.
  • Member phía team chỉ thấy đến branch bàn giao deliverables mà thôi, sẽ không có chuyện commit và push nhầm vào branch của khách.
  • Chỉ duy nhất BSE đứng giữa chịu trách nhiệm bàn giao deliverables là có thể thấy cả 2 bên. BSE cũng là người sẽ lấy những thay đổi cần thiết từ bên khách đưa ngược qua bên team trong trường hợp khách cùng phát triển song song với team.

 

Workflow cho docs

Repo tài liệu thường chứa nhiều file binary (không phải là plain text), đặc biệt là các file Excel nên có một số hạn chế như:

  • Việc compare diff của item giữa các version không dễ dàng như source code
  • Vì khó compare diff nên xử lý khi xảy ra  xung đột sẽ tốn thời gian và công sức
  • Workflow phức tạp (với nhiều branch và luồng merge) sẽ phát sinh nhiều  lịch sử sửa đổi trong khi bản thân Git vốn dĩ cũng chưa quá thích hợp cho việc quản lý file binary

Do đó thiết kế workflow cho repo tài liệu sẽ phải được đơn giản hóa như sau:

  • Bên khách và bên team đều chỉ làm trên 1 branch duy nhất của mình
  • Chỉ merge 1 chiều duy nhất từ branch của khách về branch của team bởi BSE. Việc bàn giao deliverables sẽ bằng cách sử dụng compare và đồng bộ item
  • Tất cả mem đều có quyền commit push vào branch của team.

 

3. Một số kinh nghiệm sử dụng TortoiseGit trong quản lý dự án

 

 

  • Đưa 2 repo khác lịch sử vào 1 luồng chung

Thông thường khi khách hàng đã có sẵn repo docs và bên team kéo về thì BSE chỉ việc tạo branch dùng nội bộ cho team là được. Khi đó revision graph sẽ có dạng như sau :

 

 

Nhưng đôi khi phía team cũng đã có sẵn một repo cho cùng dự án trong khi bên khách cũng có repo riêng thì việc quản lý sẽ trở nên khó khăn (không thể compare 2 repo khác lịch sử được, việc switch qua lại cũng tốn thời gian). Do đó, giải pháp lúc này là tạo 1 revision chung của cả 2 repo và mọi việc sẽ dễ dàng hơn từ thời điểm đó.

Dưới đây là một ví dụ cho thấy 2 branch của 2 repo chạy song song trong suốt quá trình dự án.

 

Lưu ý: Lúc thực hiện merge thì sẽ có cảnh báo 2 repo không cùng history, lúc này mình chọn option force merge là được.

 

  • Lấy nội dung thay đổi giữa 2 revision

Thông thường BSE không cập nhật thay đổi từ phía khách hàng thường xuyên, đôi khi là một ngày hoặc vài ngày cho đến khi khách hàng báo có update gì đó. Những lúc như vậy, khách đã commit lên khá nhiều lần nên để truyền đạt lại team những thay đổi của khách thì cách tiện nhất là sử dụng tính năng compare 2 revision của TortoiseGit.

 

 

Như trong hình trên, đường graph màu đen là branch từ repo của khách, còn màu đỏ là branch của team trên repo Cowell. Có thể thấy rằng kể từ revision `bef5684` thì khách đã commit thêm 3 lần nữa. Ta có chọn 2 revision như trên và sử dụng tính năng compare revisions để xem sự thay đổi. 

 

 

Sau khi Double click vào từng item, diff view của item đó sẽ được hiển thị. Hoặc ta có thể copy toàn bộ list dưới dạng text để share cho team.

 

 

  • Kiểm tra thay đổi của tài liệu Excel

Một điểm lợi hại nữa của TortoiseGit là nó được thiết lập sẵn các script hỗ trợ so sánh các file phổ biến như Word, Excel, Power Point.. nên chúng ta có thể xem diff của các tài liệu này dễ dàng như diff của source code. 

 

 

Dưới đây là một cửa sổ diff của Excel với các cell có màu đỏ là cell bị thay đổi. Ta có thể nhanh chóng xác định được vị trí và nội dung thay đổi mà không cần trợ giúp từ  phía khách hàng.

 

Ngay cả khi phía khách hàng đã cẩn thận  đánh dấu màu những chỗ thay đổi thì ở lần sửa đổi tiếp theo khách hàng vẫn phải revert chỗ đó về lại màu bình thường. Do vậy, cách này hoàn toàn không hữu dụng khi compare file ở 2 revision cách xa nhau.

Tính năng này đặc biệt hữu ích vì BSE có thể giao thẳng file diff cho member đảm nhiệm tính năng đó tự confirm những vị trí có thay đổi, tiết kiệm thời gian check thay đổi và giải thích.

 

  • GSE có thể giao thẳng file diff cho member đảm nhiệm Git log

Với workflow của docs, sẽ không xảy ra việc merge nhánh của team vào nhánh của khách hàng hoặc đưa nhánh của team sang repo của khách hàng . Do đó BSE sẽ phải đưa files qua branch khách theo quy trình sau:

        Bước 1: Đứng ở branch của team, vào working dir copy những file cần bàn giao vào 1 thư mục tạm

        Bước 2: Switch sang branch khách, copy những file đó vào vị trí thích hợp

        Bước 3: Commit và push lên repo của khách

Một số vấn đề thường xảy ra tại bước 1 và 2 :

  • Số lượng file nhiều thì thao tác cũng khá tốn thời gian, đặc biệt nếu các file nằm ở nhiều thư mục khác nhau
  • Trong quá trình copy và kiểm tra thì file vô tình bị thay đổi ngoài ý muốn

Cách giải quyết :

Luôn đặt thư mục bên branch của team có đường dẫn tương tự thư mục bên branch của khách.

Sử dụng tính năng revert ngay trên cửa sổ compare của TortoiseGit để copy file. Với cách này,  tài liệu sẽ được copy nhanh và chính xác qua branch của khách hàng.

Minh họa như hình dưới:

 

Bước 1: Switch sang branch của khách (ở trên là master), sau đó compare working tree changes và branch của team (ở trên là cw_master)

 

 

 Bước 2: Tìm đến file cần chuyển sang khách, chọn Revert to revision xxx từ menu ngữ cảnh

 

 

Bước 3: Khi revert xong (ở trên là revert từ trạng thái delete, tức là sẽ tạo mới bên branch khách) sẽ có popup như trên

Bước 4: Đóng dialog, refresh History.  Khi check Working tree changes, ta sẽ thấy file phía team đã được copy sang. Lúc này, ta có thể commit và push lên repo của khách.

 

Kết lại

Việc sử dụng command line quả thực rất ngầu và tốc độ nhanh, nhưng nó không phù hợp cho mọi tình huống. Một công cụ GUI client tool tiện lợi như TortoiseGit sẽ giúp bạn thao tác dễ dàng hơn cũng như đơn giản hóa việc quản lý tài liệu và source code. Hy vọng những thông tin về Tortoise Git trong bài viết này sẽ giúp cải thiện dự án của bạn chạy mượt mà và tốc độ hơn.

 Nguyễn Quang Yên – CO-WELL Asia

Xem thêm các bài viết khác về công nghệ fanpage CO-WELL Asia.