Ajax

Git, Bài 2: Tạo repo, thao tác với các tập tin trong project và tiến hành commit

git_logoTrong bài trước, tôi đã hướng dẫn sơ lược về Git, đưa ra những ưu điểm mạnh mẽ của nó để thuyết phục các bạn, không chỉ là các thành viên trong nhóm thực hiện một project, mà còn là những người duy nhất chịu trách nhiệm về project đó, sử dụng Git. Trong bài này, tôi sẽ trình bày về các thao tác tạo repo, edit các files bên trong project (ở mức độ thư mục, tức là thêm – add – hoặc xóa – remove – các tập tin) cũng như tiến hành commit (nói nôm na dân dã, commit nghĩa là “chốt”). Các thao tác này được thực hiện trong Cửa sổ dòng lệnh, là cmd đối với Windows hay Terminal đối với Mac và Linux, và yêu cầu các bạn đã cài đặt Git rồi. Nếu chưa, bạn vui lòng tham khảo lại bài trước.

Riêng đối với Windows, với cmd vô cùng “xí trai mắt tóe”, vì vậy tôi giới thiệu ứng dụng dòng lệnh CMDER và các bạn nên dùng cái này. Thực tế tính năng nó cũng như cmd thôi, vì đơn giản chúng chỉ là ứng dụng để nhập dòng lệnh, nhưng được cái giao diện nó thanh thoát và có lợi cho mắt hơn là cmd, và điều hay ho là nó hỗ trợ Ctrl V để paste trên Windows 7 về trước. Bạn có thể “rinh” nó về tại địa chỉ http://cmder.net/. Kể từ lúc này, tôi quy ước tất cả các câu lệnh được thực hiện sẽ bắt đầu bằng dấu $.

1. Tạo repo:

Thao tác tạo repo đơn giản là việc bạn áp dụng Git vào project đã có. Đối với việc clone một project từ repo hub về thì tôi sẽ nói sau. Còn bây giờ, nhiệm vụ của các bạn là bật Cửa sổ dòng lệnh lên, cmd hay cmder với Windows hoặc “the great and powerful” Terminal với Mac và Linux, và trỏ vào thư mục project mà bạn muốn. Lưu ý là bạn sẽ phải trỏ vào thư mục gốc của project, tức là thư mục tầng đầu tiên chứa tất cả các tập tin của project chứ không phải là thư mục mẹ hay con của nó, bằng câu lệnh $ cd quen thuộc, mà ý nghĩa của nó chỉ đơn giản là “change directory”. Dưới đây là câu lệnh mang tính minh họa.

Bây giờ, để tích hợp Git vào project, bạn chỉ đơn giản chạy câu lệnh ngắn gọn súc tích sau:

Và bây giờ, sau khi Git đã init xong, nếu bạn kiểm tra thư mục trong Windows Explorer, Finder hay Nautilus thì bạn sẽ thấy xuất hiện một thư mục mới là .git. Điều này có nghĩa là bạn đã thành công trong việc tích hợp Git vào project. Nội dung của thư mục này thì bạn không cần quan tâm cho lắm và cứ để đó đi, đừng thay đổi gì tùy tiện. Và một git repo đã được tạo xong. Việc tiếp theo là bạn tiến hành viết code theo cách mà bình thường bạn vẫn làm, không có gì phải thay đổi.

Cũng xin nói luôn, là hiện tại Git sẽ “thả” bạn ở nhánh (branch) mặc định, cũng là nhánh chính, có tên là master. Về nhánh, tôi sẽ trình bày trong bài viết tiếp theo. Tạm thời, bạn sẽ tạm chấp nhận là đang đứng ở nhánh master này.

2. Thao tác với các tập tin:

Việc thao tác với các tập tin có mục đích là quản lí các tập tin trong project với Git, để nó chốt giai đoạn. Thao tác này bao gồm việc báo cho Git biết là bạn muốn nó thêm hay xóa hay quét lại tất cả các tập tin trong thư mục project. Để thêm một tập tin vào Git – đương nhiên bạn đã phải cd vào thư mục project – thì bạn chỉ cần gọi câu lệnh với cú pháp như sau:

Trong đó, path/to/file là đường dẫn bắt nguồn từ thư mục mẹ của project. Ví dụ, tôi muốn thêm một tập tin mới tạo có tên là abc_xyz nằm ngay ở thư mục mẹ đó, thì tôi cho thực hiện:

Nhưng nếu tôi muốn thêm tập tin zyx_cba trong thư mục some_folder nằm trong thư mục mẹ đó, thì tôi phải đưa đúng đường dẫn (path) của nó vào câu lệnh, nếu không thì Git nó sẽ cho là zyx_cba nằm trong thư mục mẹ và đi tìm, và sẽ báo không thêm được nếu không có tập tin nào tên đó. Câu lệnh sẽ giống như bên dưới, và đối với Windows thì bạn cần thay đổi dấu “/” thành dấu “\”:

Git sẽ in kết quả của thao tác ra trong Cửa sổ dòng lệnh và để nắm hết được ý nghĩa của các output, bạn phải mài dũa kĩ năng tiếng Anh lại nếu bạn không thường đọc tiếng Anh. Ở đây tôi sẽ không đào sâu vào vấn đề này.

Để xóa một tập tin ra khỏi Git, thì bạn sẽ thực hiện thao tác tương tự, nhưng sẽ là lệnh rm có nghĩa là remove, thay cho add, với cú pháp hoàn toàn tương tự.

Tuy nhiên, trên thực tế thì không ai lại đi add từng file một vào Git, cũng như nếu họ muốn xóa file nào thì sẽ làm trên hệ thống tập tin hoặc gián tiếp là qua editor. Và tới khi nào họ thấy code thực sự ổn định thì sẽ cho Git quét lại nguyên cả project một lần. Và Git cung cấp cho chúng ta cách để thực hiện điều đó. Rất đơn giản, bạn chỉ cần truyền tham số là một dấu chấm “.” hoặc dấu sao “*” sau add là được. Với tham số này thì Git sẽ biết là nó sẽ quét lại nguyên cả thư mục project:

Như đã nói, nếu bạn không dùng dấu chấm thì có thể dùng dấu sao, cũng sẽ mang lại tác dụng y hệt:

3. Tiến hành commit:

Thao tác commit giống như thao tác bạn trao tận tay 16 tỉ rưỡi cho một cô người mẫu vậy. Nếu chỉ add thôi thì giống như bạn đem số tiền đó ra, khoe mẽ với cô ấy xong rồi lại cầm đầy đủ về nhà. Và đương nhiên, cô ấy sẽ chia tay với bạn, còn Git sẽ không chốt lại trạng thái của project. Để kiểm tra trạng thái – status – của Git, bạn sẽ gọi câu lệnh hoàn toàn giản dị như bên dưới:

Nó sẽ báo tình trạng của project ra cho bạn, trong đó bao gồm những tập tin nào đã được thêm – add – vào và những cái nào đã được xóa – rm – ra khỏi project, cũng như những tên nào đã sẵn sàng để commit và báo các khả năng có thể xảy ra nếu có một “con sâu” nào đó đang “làm rầu nồi canh” kèm hướng giải quyết. Trong trường hợp tất cả đang trong trạng thái thuận lợi, bạn chỉ cần tiến hành commit, với lệnh (cũng tên là) commit luôn:

Trong đó, tham số (param) -m có nghĩa là bạn sẽ ghi lại, chú thích lại thông tin của lần commit này, thường là những gì bạn đã làm trước lần commit này, chẳng hạn “Fixed NullPointerException in MainActivity.onCreate”, để những người theo dõi, cũng như chính bản thân bạn, biết được mình đã làm gì. Và nội dung của nó chính là phần “Message”, chẳng hạn, nếu tôi commit với nội dung trên, thì tôi sẽ chạy lệnh sau:

Như vậy là tôi đã commit xong với message mình muốn, để chốt lại một giai đoạn của project. Có thể bạn sẽ thắc mắc vì sao không gộp luôn commit vào add hay rm mà phải làm riêng. Mục đích là để bản thân bạn đảm bảo sự chắc chắn trong quá trình viết code. Bởi hiện tại bạn có thể vừa add một tập tin mới, sửa vài tập tin cũ và rm một tập tin bạn không dùng nữa. Tuy nhiên không có nghĩa là 10 phút sau bạn sẽ không add hay rm tiếp. Như vậy, việc add hay rm chỉ mang ý nghĩa “tạm chốt” mà thôi, còn việc “ra quyết định chốt cuối cùng” là commit.

Một lưu ý nữa là việc commit vẫn được yêu cầu khi bạn sửa đổi nội dung của các tập tin đã có. Vd bạn gõ thêm một kí tự nào vào một tập tin trong project thì vẫn phải thực hiện commit lại chứ không phải là “Tao có thêm xóa đâu mà cần commit”. Và nếu đó là thao tác sửa lỗi mà bạn quên commit thì lỗi sẽ vẫn còn đó cho tới khi bạn commit lần nữa.

Sang bài tiếp theo, tôi sẽ giới thiệu về nhánh – branch, và đó chính là cái quan trọng nhất tập hợp các “tinh túy” của Git. Hẹn gặp lại các bạn trong bài tới.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.