Trang web này để tham khảo về Git: một trang để tham khảo nhanh khi bạn học hoặc sử dụng Git, chỉ chứa những lệnh quan trọng và hay dùng nhất của Git. Các lệnh được nhóm lại thành từng mục theo tác vụ, và sẽ được trình bày với những tùy chọn phổ biến nhất để hoàn thành tác vụ đó.
Mỗi mục liên kết tới mục khác; mỗi trang cũng có tham khảo tới tài liệu chuyên sâu hơn (ví dụ liên kết tới trang tài liệu chính thức hoặc các phần trong tài liệu Sách Pro Git), để giúp các bạn muốn nắm chắc hơn về Git.
Trước tiên ta sẽ tìm hiểu về nguyên lý cơ bản của Git.
Điều đầu tiên hết sức quan trọng mà bạn phải biết, là Git rất khác biệt so với Subversion, Perforce hoặc bất kỳ cách quản lý mã nguồn nào bạn từng biết. Vì thế, để học Git được mau chóng, tốt nhất là bạn hãy quên mọi thứ bạn biết về Subversion, CVS, ... để bắt đầu suy nghĩ theo cách hoàn toàn khác với Git.
Hãy bắt dầu từ số không. Giả sử bạn đang thiết kế một hệ thống để quản lý mã nguồn mới. Câu hỏi đặt ra là: phương án đơn giản nhất trước khi phải cần các công cụ mạnh như Subversion, Perforce,.. là gì? Câu trả lời có thể là bạn chỉ việc chép thư mục qua một nơi mới, nhưng cách hay làm để sao lưu dữ liệu.
$ cp -R project project.bak
Theo cách này, bạn dễ dàng phục hồi lại các tập tin bị thay đổi không như ý, hoặc bạn có thể so sánh hai thư mục để có được tìm xem có có sự thay đổi nào đã thực hiện.
Nếu việc sao chép như trên diễn ra thường xuyên hơn, bạn có thể dùng thêm các tên thư mục chứa thông tin về ngày tháng:
$ cp -R project project.2010-06-01.bak
Điều này dẫn tới kết quả là bạn sẽ có rất nhiều bản sao khác nhau của dự án. Những bản sao này có thể dùng để chia sẻ với người khác, bằng cách nén một trong các bản sao và đặt chúng lên một máy phục vụ web: các lập trình viên khác có thể tải về bản sao, xem xét và thực hiện các miếng vá thích hợp:
$ wget http://example.com/project.2010-06-01.zip $ unzip project.2010-06-01.zip $ cp -R project.2010-06-01 project-my-copy $ cd project-my-copy $ (change something) $ diff project-my-copy project.2010-06-01 > change.patch $ (email change.patch)
Khi nhận được miếng vá, lập trình viên chính của dự án sẽ xem xét và thực hiện vá vào một bản sao nào đó của dự án. Thực tế, quá trình tạo bản sao, chia sẻ và vá như trên là nguyên lý làm việc của nhiều hệ thống quản lý mã nguồn, đặc biệt là của những dự án mã nguồn mở.
Bây giờ, cũng theo nguyên lý khá hiệu quả đó, ta sẽ xây dựng một công cụ nhanh hơn và đơn giản hơn: thay vì quản lý phiên bản của từng tập tin trong dự án (như cách làm của Subversion), ta xây dựng công cụ để tạo và quản lý các bản sao của toàn bộ dự án, mà ta không phải tạo ra các bản sao mới của toàn bộ các tập tin (như cách sao chép đã mô tả ở trên.)
Ý tưởng vừa nói mô tả bản chất hoạt động của Git. Bạn sẽ nhờ Git
để tạo bản sao của toàn bộ dự án, bằng lệnh git commit
(xác nhận), nhưng Git đủ thông minh để tạo ra một danh sách chỉ gồm
các tập tin có thay đổi vào lúc xác nhận và thực hiện tạo bản sao
chỉ với danh sách đó. Hầu hết các lệnh còn lại của Git sẽ làm việc
với các danh sách mà lệnh git commit
tạo ra (so sánh,
liệt kê), thay vì với toàn bộ các tập tin có trong thư mục.
Đơn giản hơn, bạn có thể nghĩ Git như một công cụ để so sánh và trộn các bản sao của một dự án. Đừng nghĩ Git như công cụ để quản lý phiên bản của từng tập tin như Subversion.