Đa số các project open source đều để ở GitHub và nhiều bạn thường ấn nút “Download” để tải code về. Làm như vậy sẽ bất tiện đối với các project lớn mỗi khi có update code thì bạn lại phải download lại toàn bộ. Bài này sẽ hướng dẫn các bạn sử dụng Sourcetree – 1 công cụ thao tác với Git để công việc dễ dàng hơn.
Sourcetree có giao diện GUI nên các thao tác pull, commit, push,… đều dễ dàng hơn việc nhớ các dòng lệnh dài dòng. Để đầu óc còn suy nghĩ việc khác và khỏi lộn xộn với hàng đống cú pháp bạn phải làm việc mỗi ngày.
Các bạn cũng có thể sử dụng GitHub Desktop với tính năng tương tự. Tuy nhiên Sourcetree được đánh giá cao hơn & thân thiện người dùng hơn (quan điểm cá nhân).
Ưu điểm của sourcetree
- Các chức năng Clone, Pull, Push,… thao tác bằng nút bấm
- Quản lý nhiều repo bằng tab
- Xem lịch sử commit một cách dễ dàng: sửa bao nhiêu file, file sửa dòng nào,…
- Dễ dàng chuyển qua lại các branch khác nhau
- Hiển thị thông báo rõ ràng
Hình trên là so sánh sự thay đổi của code trong lịch sử. Dòng màu đỏ là bị xóa, màu xanh là thêm vào, số dòng giữ nguyên nhưng code 2 dòng đó đã thay đổi.
Giải thích các thuật ngữ
– Repo: viết tắt của repository – “thùng chứa” code
– Origin: repository gốc, khi bạn clone code tức là bạn clone từ origin. Bài này lấy ví dụ minh họa từ GitHub thì origin được đặt ở GitHub.
– Working Directory: folder chứa code trong máy bạn.
– Pull: “kéo” code mới từ origin về máy, tương tự như update bên SVN
– Commit: cập nhật những sửa đổi của code vào repo trong máy của bạn
– Push: “đẩy” những sửa đổi mà bạn đã commit lên origin
– Hunk: đoạn code bị sửa đổi trong file, 1 file có thể có nhiều hunk
– Stage hunk: chọn hunk để commit
– Stage file: chọn file để commit, tương đương stage tất cả hunk trong file đó.
Cài đặt sourcetree
Các bạn tải về từ trang web: https://www.sourcetreeapp.com/.
Bắt đầu cài đặt, các bạn ấn Skip bỏ qua bước đăng ký tài khoản BitBucket
Tiếp theo là uncheck Mercurial, tool này ít người xài
Nhập 1 cái tên và email bạn thường sử dụng. Sau này khi commit thì author chính là tên bạn vừa chọn
Sourcetree hỏi có cần load SSH key không, ấn No để bỏ qua. Hiện tại GitHub đang có plan bắt buộc xác thực bằng SSH key, mình sẽ viết trong 1 bài khác vì sử dụng SSH key cũng nhiều bước.
Khi cài đặt chương trình sẽ yêu cầu bạn cài 1 số thứ như Git và .Net Framework (nếu chưa cài). Khi cài xong chương trình có giao diện như bên dưới
Các repo được hiển thị dưới dạng tab, các bạn có thể quản lý nhiều project khác nhau dễ dàng.
Các thao tác thường gặp
1. Clone source code
Các bạn vào trang web của repo, ấn nút Clone or download, 1 popup hiện ra bạn copy link .git của repo đó.
Mở Sourcetree lên, ấn vào nút Clone và điền các thông tin cần thiết: link tới repo, thư mục chứa code trong máy của bạn và tên của project sẽ hiển thị. Sau đó ấn nút clone và chờ đợi
Clone xong mặc định sẽ hiện history của repo
Switch qua lại giữa các branch
Switch qua branch khác còn được gọi là “Checkout branch”. Mục đích của mỗi branch là viết code cho 1 vài tính năng nào đó, sau khi hoàn thành thì merge vào branch chính là Master. Các project của mình đưa lên GitHub có những branch khác nhau nên cần switch qua branch phù hợp.
Lấy ví dụ về repo IPSSedu, đây là project hướng dẫn cách đọc biển số xe máy. Trong repo có nhiều branch khác nhau, mỗi branch là 1 tính năng khác nhau. Do đó cần phải switch qua branch có code phù hợp với nhu cầu.
Trong hình trên có “origin” là repo trên GitHub, trong đó đang có 5 branch. Ấn chuột phải vào branch muốn checkout rồi chọn “Checkout …” như trong hình. Sau khi checkout xong thì code của bạn sẽ tương ứng với code trong branch đó.
Khi code của bạn đang bị sửa khác với branch định checkout thì Sourcetree sẽ báo lỗi conflict. Lúc đó bạn phải revert/stash/commit… trước khi checkout qua branch khác.
Pull source code
Pull là thao tác “kéo” code từ origin về máy mỗi khi có thay đổi ở origin. Cũng như tương tự như update bên SVN: đó là cập nhật những thay đổi về Working Directory cho giống server. Thao tác này xảy ra khi các bạn cần cập nhật code mới nhất.
Chỉ cần ấn nút pull, sau khi pull xong code sẽ giống với server. Lưu ý là code dưới máy bạn bị sửa trùng với file bị sửa ở origin thì cần revert/stash/commit… code.
Checkout submodule
Submodule là 1 repo khác thường được sử dụng như 1 lib, ví dụ như OpenCV thường được dùng làm submodule. Mặc định thì khi clone code không clone kèm submodule, do đó cần phải checkout submodule để đầy đủ code.
Trong hình trên có 1 submodule là opencv320, khi bạn double click vào thì Sourcetree sẽ mở ra tab mới như 1 repo. Lúc đó bạn cũng cần clone, pull code về như 1 repo bình thường. Sau khi pull xong thì sẽ có đủ code để sử dụng.
Stash file
Ở phần trên khi pull, checkout code mà bị conflict thì bạn phải revert/stash/commit code. Nhưng khi đang làm dở dang thì bạn có thể stash – nghĩa là cất tạm đâu đó rồi sửa sau.
Mỗi khi stash là bạn sẽ “đem cất” toàn bộ những file code đang bị sửa để có thể pull/checkout code mới. Ấn vào nút Stash, ở cửa sổ hiện lên đặt tên cho stash đó sao cho dễ nhớ rồi OK. Khi đó thì toàn bộ code trong máy bạn sẽ clean để sẵn sàng pull/checkout code mới về.
Các stash nằm trong mục Stashes ở panel bên trái. Khi bạn đã pull/checkout code xong thì ấn chuột phải vào stash rồi chọn “Apply stash” để lấy code đã cất tạm ra. Lưu ý các file code sau khi apply stash sẽ bị mất đoạn vừa sửa trên origin. Lúc đó phải kiểm tra kỹ đoạn nào bị sửa mà revert lại cho đúng.