Một số lệnh Git hữu dụng
1. Tìm kiếm
$ git grep "từ cần tìm"Git sẽ tìm trong mọi tập tin có trong kho, rõ ràng là mạnh mẽ hơn lệnh grep. Bạn còn có thể chỉ định thư mục hay tập tin cần tìm. Đây có lẽ là một trong những lệnh hữu ích nhất ngoài các lệnh cơ bản như diff. Tôi sẽ giới thiệu lệnh này sau.
2. Lấy một tập tin từ một nhánh khác
Dùng tùy chọn -- để không tác động đến bảng mục lục.$ git checkout tên-nhánh -- tên/tập/tin
3. Xem nhật ký kèm theo thống kê để bạn có thể biết tập tin nào đã thay đổi
$ git log --stat # hay
$ git log --full-diff
4. Xem nhật ký cho từng tập tin riêng lẻ
$ git log -- tên/tập/tin
5. Xem nhật ký nhưng chỉ hiển thị dạng tóm lược, mỗi lần commit một dòng.
$ git log --oneline -n 45 # xem 45 lần commit
6. Hiển thị thống kê dạng tóm lược theo tác giả
$ git sortlog -n5 # không có dấu cách giữa -v và 5
$ git sortlog HEAD...e2dca # 3 dấu chấm
7. Sửa lịch sử trên máy chủ
Sau khi sửa lịch sử trên máy tính của mình, sau khi reset hay rebase chẳng hạn, nếu bạn push như bình thường sẽ gặp lỗi xung đột. Chỉ cần thêm tùy chọn --force, mọi chuyện sẽ được giải quyết.$ git push --force origin tên_nhánh
8. Xóa nhánh trên máy chủ
Nếu origin là tên của máy chủ, bạn có thể chạy lệnh:$ git remote -v # để xác nhậnthì bạn xóa nhánh bằng lệnh sau:
$ git push origin :tên_nhánh # hoặcTất nhiên là nếu muốn bạn có thể xóa cả nhánh ở máy tính của mình nữa:
$ git push --delete origin tên_nhánh
$ git branch -d tên_nhánh # dùng -D khi thấy -d thất bại
9. Liệt kê những lần commit theo thứ tự đảo ngược
$ git rev-list --all
10. Để xem trợ giúp bạn chạy lệnh
$ git help tên-lệnh # hay:Càng làm việc nhiều với Git, chúng ta sẽ càng khó có thể từ bỏ nó. Nói thế nhưng không có nghĩa là chúng ta chỉ cần học cách sử dụng Git là đủ. Bởi vì không phải tất cả các dự án đều dùng Git. Thậm chí có những dự án khá lớn như WinSCP vẫn dùng CVS. Ngoài lý do trên, còn có lý do khác là một số phần mềm quản lý mã nguồn phân tán khác cũng tốt chẳng kém Git như Bazaar, Mercurial v.v..
$ git tên-lệnh --help # ví dụ:
$ git tutorial --help
$ git help grep
# hay đọc manpage
$ man git-tên_lệnh
Git căn bản – Phần 1
Cài đặt Git
Đầu tiên, ta vào trang web chính thức của Git và download gói cài đặt phù hợp với hệ điều hành ta đang dùng. Việc cài đặt này hết sức đơn giản trong môi trường Windows và MacOS, tuy nhiên trong Linux thì hơi phức tạp một chút. Nếu cần thì bạn có thể tham khảo thêm thông tin về cài đặt trong môi trường Linux trong phần hỗ trợ của trang web.Sau khi cài đặt xong, ta chạy chương trình bằng biểu tượng Git Bash. Một cửa sổ dòng lệnh hiện ra, ta gõ:
Cấu hình Git
Trước khi có thể sử dụng Git, ta phải cấu hình nó bằng cách cung cấp những thông tin cơ bản. Mục đích của việc này là để khi lưu lại (commit) những thay đổi trong tập tin code, Git sẽ đính kèm thông tin về người đã thực hiện việc lưu trữ này. Trong đó, Git sẽ đòi hỏi tên (username) và email. Trong cửa sổ dòng lệnh, ta gõ 2 câu lệnh sau:Ngoài ra, ta cũng có thể thay đổi các thông tin cấu hình khác nhưng ở đây. Tên và email là 2 thông tin quan trọng nhất nên tôi chỉ thiết lập 2 thông tin này. Những thông tin cấu hình khác có thể bỏ qua cũng được.
Khởi tạo
Đầu tiên ta phải tạo một thư mục mới. Thư mục này đóng vai trò là nơi chứa dự án đang thực hiện. Ta có thể dễ dàng tạo thư mục mới trong cửa sổ dòng lệnh bằng:Theo dõi tập tin
Để kiểm tra tình trạng hiện tại của các tập tin trong thư mục, ta dùng lệnh sau:Trước khi tiếp tục, tôi muốn nói đôi điều về thuật ngữ. Trong tiếng Anh, Git dùng thuật ngữ Staging Area để nói đến cái mà tôi gọi là “danh sách theo dõi”. Thực ra đây là cách dịch đơn giản mà tôi sử dụng nhằm giúp bạn dễ hiểu tính năng của nó. Ngoài ra, từ Stage còn được dùng như một động từ để chỉ hành động “đưa một tập tin vào danh sách theo dõi”.
Để thêm một tập tin nào đó vào danh sách theo dõi, ta dùng lệnh sau:
Commit
Khái niệm commit có vẻ khó hiểu với những người mới bắt đầu sử dụng Git. Thực ra, đây chỉ là thuật ngữ chỉ việc lưu lại những thay đổi trong tập tin ta đưa vào danh sách theo dõi. Ta cũng có thể hiểu đơn giản commit chính là Save.Để commit những thay đổi trong tập tin, ta dùng lệnh sau:
Tuy nhiên, nếu mỗi lần ta commit mà lại phải ghi chú thế này thì quá bất tiện. Cho nên ta có thể dùng lệnh sau để vừa commit vừa ghi chú trên cùng một dòng lệnh:
Tuy nhiên, nếu ta chỉnh sửa nhiều tập tin và mỗi lần như thế ta phải dùng lệnh add thủ công thì quá mệt mỏi. Do đó, Git đã cung cấp cho chúng một cách để có thể commit toàn bộ tập tin đã nằm trong danh sách theo dõi trước đây bằng lệnh:
Ignore
Trong thư mục dự án, không phải tập tin nào ta cũng muốn Git lưu lại những thay đổi. Có những tập tin như tập tin tạm, được tạo ra bởi IDE hoặc hệ điều hành, ta hoàn toàn không muốn lưu tâm đến. Do vậy khi commit tập tin nào đó, ta phải thủ công gọi lệnh add cho riêng từng tập tin. Điều này có thể gây phiền phức vì nếu thư mục có nhiều tập tin thì ta phải gõ lệnh add thủ công cho từng tập tin đó. Để khắc phục nhược điểm này, ta có thể khai báo cho Git biết những tập tin nào ta cần làm ngơ (ignore) để Git biết đường mà không tự ý commit khi ta commit cả thư mục. Điều này được thực hiện thông qua tập tin có tên .gitignore.Đầu tiên, bạn hãy tạo một tập tin mới có tên .gitignore (chú ý dấu chấm trước tên tập tin) nằm trong thư mục dự án. Trong tập tin này, ta sẽ liệt kê danh sách các tập tin mà ta muốn Git làm ngơ. Bạn hãy nhớ rằng mỗi tên tập tin nằm trên một hàng, và bạn có thể dùng những ký hiệu để qui định các quy tắc đặc biệt mà bạn muốn Git lưu ý. Ví dụ bạn muốn Git bỏ qua các tập tin có đuôi .txt thì bạn hãy thêm vào trong danh sách đó dòng sau:
Vậy là từ giờ trở đi, khi bạn add toàn bộ thư mục hiện tại, Git sẽ làm ngơ với tất cả các tập tin text.
Lệnh diff
Để so sánh sự khác nhau giữa một tập tin trong thư mục hiện hành và tập tin đó trong danh sách theo dõi, ta dùng lệnh:Trong trường hợp ta muốn so sánh giữa phiên bản đang ở trong danh sách theo dõi (stage area) và phiên bản trong lần commit cuối cùng, ta sử dụng lệnh:
Tương tự, ta cũng có thể xem sự khác nhau giữa phiên bản tập tin trong thư mục hiện hành và phiên bản tập tin đó trong lần commit cuối cùng:
Ta cũng có thể không cần ghi tên tập tin trong các câu lệnh trên. Nếu như vậy thì Git sẽ hiện kết quả những thay đổi trong tất cả các tập tin trong thư mục.
Lệnh log
Để xem lịch sử các lần commit đã thực hiện, ta dùng lệnh:Tuy nhiên, nếu danh sách commit của ta quá dài thì nó sẽ trở nên khó xem. Ta có thể dùng lệnh sau để thu gọn danh sách lại, chỉ hiển thị dòng ghi chú của ta trong từng commit:
Git cũng cho phép ta kết hợp nhiều câu lệnh thành một, ví dụ:
Ngoài ra, nếu bạn tinh ý thì sẽ nhận thấy rằng khi cài đặt Git có kèm theo cho ta một giao diện đồ họa. Để chạy giao diện đồ họa này, ta dùng lệnh:
Nhánh (Branch)
Nhánh giúp ta có thể thoải mái thử nghiệm các ý tưởng mới với dự án mà ta đang thực hiện. Bạn có thể hiểu đơn giản nhánh giống như một bản sao của thư mục hiện hành, ta có thể thay đổi, tùy chỉnh theo ý ta. Sau đó, nếu ta ưng ý với kết quả mà ta đã làm, ta có thể hợp nhất (merge) nó với dự án chính của ta. Còn nếu không ưng ý, ta có thể bỏ cả nhánh đó và dự án chính của ta không hề bị ảnh hưởng.Nếu bây giờ chạy lệnh git status, ta sẽ thấy ở dòng trên cùng thông báo cho biết ta đang ở nhánh master (# On branch master). Đây là nhánh mà Git mặc định tạo cho ta.
Để xem danh sách các nhánh hiện hành, ta dùng lệnh:
Để quay về nhánh chính, ta dùng lệnh:
Hợp nhất nhánh (Merge)
Sau khi ta đã hài lòng với những thử nghiệm đã thực hiện trong một nhánh nào đó, giờ là lúc để ta hợp nhất nhánh đó với nhánh master. Để làm điều này, ta dùng câu lệnh:Sau khi ta đã hợp nhất với nhánh master rồi thì ta nên xóa nhánh kia đi. Để xóa nhánh, ta dùng lệnh:
Đẩy mã lên GitHub
GitHub hiểu một cách đơn giản là một kho chứa mã miễn phí trực tuyến. Ta có thể chia sẻ cả thư mục dự án cho mọi người cùng xem, tương tác, hoặc sao chép (clone) cả dự án đó về máy để sử dụng. Nếu dùng tài khoản miễn phí thì các dự án ta đăng tải sẽ được công khai cho bàn dân thiên hạ tùy ý sử dụng. Nếu muốn được riêng tư, ta phải thanh toán chi phí hàng tháng cho GitHub.Để đăng ký, ta vào trang GitHub để đăng ký một tài khoản. Sau khi đăng ký xong, ta sẽ được đưa vào trang quản lý. Ở trang này, ta bấm nút New Repository để tạo một kho chứa mã mới. Trong trang kế tiếp, ta nhập vào tên ở ô Repository name. Có thể thêm vài dòng mô tả cho kho mã này nếu ta thấy cần thiết. Cuối cùng, ta chọn chế độ Public (chế độ Private chỉ dành cho tài khoản trả phí) và bấm nút Create Repository.
Ở trang tiếp theo, GitHub sẽ hướng dẫn ta các câu lệnh cần thiết để thiết lập và đăng tải các tập tin mã của mình lên trên kho chứa (repo, viết tắt của repository) vừa tạo. Ta lưu ý ở đây, GitHub hướng dẫn cho ta thực hiện trong 2 trường hợp:
1. Nếu chưa có thư mục dự án thì ta làm theo các bước hướng dẫn để thiết lập Git trong thư mục này. Hầu hết các bước này tôi đã hướng dẫn trong bài viết trước.
2. Nếu đã có một thư mục dự án rồi thì ta chỉ cần thực hiện “push” các tập tin vào trong repo trên GitHub.
Trong cả 2 trường hợp, câu lệnh quan trọng nhất là git remote và git push. Hiện tại, ta cứ hiểu đơn giản là git remote giúp xác định đích đến của nơi chứa kho mã của ta, còn git push ra lệnh tiến hành “đẩy” những tập tin mã trong thư mục hiện hành lên kho mà ta đã xác định ở git remote.
Sau khi thực hiện lệnh push, Git yêu cầu ta nhập vào username và password để đăng nhập GitHub. Khi đăng nhập thành công, Git sẽ tiến hành đẩy nội dung trong thư mục dự án lên kho chứa. Bây giờ, ta có thể vào trong kho trên GitHub để xem các tập tin của mình. Những thông tin về dự án cũng được hiển thị đầy đủ tại đây như tổng số commit, ghi chú của lần commit cuối cùng và ai là người commit.
Điều cuối cùng mà ta cần lưu ý đó là giao diện của trang GitHub có thể thay đổi trong tương lai, cho nên những chỉ dẫn ở trên về các thao tác trên GitHub có thể không còn chính xác. Nếu điều đó xảy ra, ta có thể dễ dàng theo dõi các bước mà GitHub hướng dẫn. Tuy nhiên, cho dù có thay đổi thì những thao tác cơ bản hầu như vẫn như cũ nên ta cũng không quá lo lắng.
Dạo quanh GitHub
GitHub là một kho chứa mã khổng lồ và ta có thể tìm thấy hầu hết các dự án nguồn mở ở đây. Chỉ cần gõ tên của một dự án nổi tiếng nào đó mà ta biết, ví dụ như jQuery, thì sẽ thấy ngay một danh sách kết quả.Để truy cập vào kho chứa của dự án đó, ta bấm chuột vào dòng kết quả tương ứng. Lúc này, một danh sách liệt kê các tập tin trong dự án sẽ hiện ra. Ta cũng có thể xem nội dung tập tin bằng cách bấm vào nó. Phía trên, ta có thể thấy một vài thông tin về kho như số lần commit, tổng số nhánh và tổng số những người tham gia vào dự án này.
Phía bên phải là một loạt các thẻ. Hiện tại ta đang ở thẻ Code. Phía dưới ta sẽ thấy dòng HTTPS, đây chính là địa chỉ mà ta sẽ sử dụng để sao chép (clone) kho mã về máy. Dưới cùng là nút Download ZIP. Ta bấm nút này để tải về toàn bộ kho dưới dạng nén zip, phù hợp cho những ai không biết sử dụng trình quản lý mã nguồn Git (hi vọng đó không phải là bạn).
Thẻ Pull Requests là nơi mà ta có thể góp ý với chủ kho về những đề xuất thay đổi trong tập tin mã nguồn nào đó. Để sử dụng tính năng này, trước tiên ta Fork kho mã về tài khoản của ta. Sau đó, ta chỉnh sửa ở những nơi cần thay đổi trong mã. Tiếp đến ta gửi một Pull Request cho chủ kho, và họ sẽ nhận được một email thông báo. Nếu họ đồng ý những thay đổi ta đề xuất, họ có thể tích hợp những thay đổi này vào trong kho một cách chính thức.
Thẻ Pulse cung cấp cho ta thông tin tổng quát của kho chứa. Thẻ Graph sẽ hiển thị nhiều biểu đồ về hoạt động của dự án. Bạn có thể dễ dàng tự khám phá những thẻ này. Thẻ cuối cùng là Network. Thẻ này cho ta biết về thông tin các nhánh của kho dưới dạng biểu đồ. Với những dự án khủng như jQuery thì những sơ đồ như thế này có thể sẽ rất lớn, ta có thể kéo thả chuột trong sơ đồ này để xem những phần khác nhau.
Phía trên cùng ta sẽ thấy nút Fork. Tính năng này cho phép tạo một bản sao của kho và lưu nó vào trong tài khoản của ta. Sau khi bấm nút Fork, ta sẽ thấy bản sao của kho nằm trong danh sách My Repositories. Lúc này, ta có thể hiệu chỉnh tùy ý kho mã này mà không làm ảnh hưởng gì đến kho chính.
Trên đây tôi chỉ giới thiệu sơ lược những tính năng cơ bản của GitHub để bạn có thể bắt đầu sử dụng ngay lập tức. Tuy nhiên, GitHub còn rất nhiều tính năng thú vị hơn, đặc biệt là những tính năng giúp ta tương tác với những thành viên khác trong nhóm lập trình. Tôi sẽ để bạn tự khám phá những tính năng này.
Kho chứa từ xa (Remote Repository)
Như đã thấy trong bài viết trước về GitHub, đôi lúc ta phải làm việc với những kho chứa từ xa. Do đó, việc làm quen với các câu lệnh để thực hiện công việc này là rất cần thiết.Cũng trong bài trước, ta đã biết câu lệnh mà GitHub yêu cầu sử dụng để kết nối đến kho từ xa. Câu lệnh này có dạng như sau:
Tiếp theo, ta sẽ dùng câu lệnh remote:
Trong trường hợp ta muốn update kho trên máy của ta với những commit mới nhất trên kho từ xa, ta sẽ dùng lệnh:
Cuối cùng, tôi muốn giới thiệu câu lệnh clone. Đây là câu lệnh mà ta thường dùng đối với kho từ xa để sao chép toàn bộ kho này về máy:
Lời kết
Vậy là với những câu lệnh mà tôi đã trình bày trong series này, bạn đã có đủ kiến thức cơ bản cần thiết để làm việc với Git và GitHub. Có thể nếu chỉ đọc qua thôi, bạn sẽ cảm thấy khó hiểu. Nhưng không sao, khoảng chừng vài lần luyện tập là bạn sẽ quen ngay thôi.Khái niệm làm việc thông qua Git và GitHub vẫn còn khá xa lạ với hầu hết mọi người. Cho nên để sử dụng chúng thành thạo, ta nên dùng chúng hằng ngày trong việc viết mã. Tôi thậm chí sử dụng Git không chỉ quản lý mã mà còn dùng nó để quản lý các bài viết trên blog này đấy. Sau khi tôi đưa thêm nội dung mới vào trong bài viết thì tôi tạo ngay một commit. Và khi tôi viết xong bài nào là tôi push nó lên trên GitHub. GitHub giờ đây trở thành nơi sao lưu các bài viết của tôi. Như bạn thấy, Git có thể dùng để quản lý khá nhiều thứ khác chứ không chỉ riêng những đoạn mã. Hãy dùng sự sáng tạo của mình để sử dụng Git một cách hiệu quả.
0 comments:
Post a Comment