Git xác định các quy trình kiểm soát phiên bản để chia sẻ các dự án như thế nào. Nhiều trang web tồn tại cho phép bạn lưu trữ các dự án Git của mình. GitHub là lựa chọn phổ biến nhất, Bitbucket là một lựa chọn thay thế phổ biến khác, cả hai đều cho phép các tài khoản miễn phí có thể tạo kho lưu trữ công khai hoặc riêng tư không giới hạn. GitLab cung cấp một giải pháp thay thế tự lưu trữ cho phép phát triển riêng tư mà không cần dựa vào lưu trữ của bên thứ ba.
Quá trình để tải xuống kho lưu trữ Git lần đầu tiên được gọi là nhân bản. Nhân bản bao gồm tất cả thông tin về kho lưu trữ tại thời điểm đó, tuy nhiên, để giữ cho kho lưu trữ được cập nhật theo thời gian, bạn cần phải kéo các phiên bản mới xuống. Để làm như vậy, chỉ cần mở một cửa sổ đầu cuối trong thư mục có phiên bản cục bộ của kho lưu trữ và gõ lệnh “git pull”.
Thao tác của lệnh này đặc biệt đơn giản nếu bạn chỉ muốn tải xuống phiên bản cập nhật của kho lưu trữ; phiên bản cục bộ sẽ được cập nhật để phù hợp với phiên bản từ xa. Tuy nhiên, bạn có thể thấy rằng có thể có vấn đề nếu bạn thực hiện các sửa đổi đối với phiên bản cục bộ của mình.
Lệnh “git pull” thực sự chạy hai lệnh riêng biệt “git fetch” và “git merge FETCH HEAD”. Lệnh phụ “git fetch” đặc biệt kéo xuống phiên bản mới nhất từ kho lưu trữ trực tuyến và tạm thời lưu trữ nó. Sau đó, lệnh phụ “git merge FETCH HEAD” sẽ hợp nhất các thay đổi cục bộ của bạn với phiên bản đã tải xuống, ưu tiên các cam kết mới hơn.
Mẹo: “git commit” là một lần gửi thay đổi, có thể có nhiều commit cục bộ và từ xa thực hiện những việc giống nhau hoặc khác nhau. Các cam kết cục bộ không hiển thị đối với phiên bản từ xa cho đến khi các thay đổi được thực hiện. Mỗi cam kết nêu chi tiết chính xác những thay đổi đã được thực hiện và bao gồm dấu thời gian.
Xung đột giữa các phiên bản cục bộ và từ xa
Lý tưởng nhất là trong một kịch bản hợp nhất, sẽ không có xung đột và quá trình hợp nhất sẽ tự động hoàn thành. Việc hợp nhất có thể đặc biệt dễ dàng nếu một số thay đổi được thực hiện hoặc nếu các thay đổi cục bộ của bạn không ảnh hưởng đến bất kỳ thay đổi từ xa nào. Tuy nhiên, nếu có những thay đổi phức tạp xung đột đối với cùng một phần của mã, Git sẽ gây ra lỗi hợp nhất.
Tại thời điểm này, bạn có thể hủy hợp nhất bằng lệnh “git merge –abort” hoặc cố gắng giải quyết các xung đột theo cách thủ công. Các lệnh “git mergetool” và “git diff” cung cấp một ví dụ đồ họa về sự khác biệt sẽ giúp bạn dễ dàng xem những thay đổi nào cần được áp dụng theo cách thủ công để cho phép quá trình hợp nhất hoàn tất. Khi bạn đã giải quyết xong tất cả các xung đột, hãy gõ lệnh “git merge –continue” để hoàn tất việc hợp nhất.
Lệnh “git mergetool” sẽ mở một công cụ đồ họa như thế này để giúp bạn giải quyết xung đột theo cách thủ công.