Nếu bạn là một trong số hàng triệu người trong cộng đồng nhà phát triển, thì rất có thể bạn đã nghe về khái niệm kiểm soát phiên bản. Nó là một công cụ hoặc hệ thống mạnh mẽ giúp bạn xử lý công việc, cho phép bạn di chuyển xung quanh các tệp, tài liệu và bộ sưu tập thông tin khác liên quan đến dự án của bạn một cách nhanh chóng. Và có rất nhiều công cụ cho các loại công việc như vậy trên thị trường, cả độc quyền và nguồn mở. Git là một trong những hệ thống kiểm soát phiên bản phổ biến và được sử dụng rộng rãi nhất trên thế giới hiện nay và số lượng dự án đáng kinh ngạc dựa vào Git để kiểm soát phiên bản. Git là một hệ thống kiểm soát phiên bản phân tán mã nguồn mở và miễn phí được thiết kế để theo dõi các thay đổi trong mã nguồn trong quá trình phát triển phần mềm.
Dự án Git được biểu diễn bằng cấu trúc dữ liệu gọi là kho lưu trữ trong đó tất cả thông tin liên quan đến dự án được lưu trữ bao gồm toàn bộ lịch sử của dự án kể từ khi thành lập. Nó theo dõi tất cả các thay đổi được thực hiện cho các tệp theo thời gian, xây dựng dòng thời gian khi bạn tiến hành dự án. Lần lượt một kho lưu trữ bao gồm một tập hợp các ảnh chụp nhanh riêng lẻ của nội dung dự án - bộ sưu tập các tệp và kho lưu trữ - được gọi là các xác nhận. Khi bạn muốn chia sẻ sự phát triển của dự án của bạn với mọi người, bạn phải đẩy nó lên một điều khiển mà bạn có quyền truy cập bằng văn bản. Các nhánh cục bộ của bạn không được tự động đồng bộ hóa với các kho lưu trữ từ xa - bạn phải đẩy mạnh các nhánh bạn muốn chia sẻ.
Git coi dữ liệu của mình giống như một tập hợp các ảnh chụp nhanh, giống như một hệ thống tệp nhỏ hoặc các phiên bản của một dự án được gọi là cam kết. Mỗi khi bạn cam kết hoặc lưu trạng thái dự án của bạn bất cứ lúc nào, Git về cơ bản sẽ chụp nhanh ảnh của bạn vào lúc này và lưu trữ một tham chiếu đến ảnh chụp nhanh đó. Một đối tượng cam kết giữ siêu dữ liệu cho mỗi thay đổi được thực hiện đối với kho lưu trữ, bao gồm tác giả, người ủy quyền, ngày cam kết và thông điệp tường trình. Mỗi cam kết chỉ đến một đối tượng cây nắm bắt trạng thái của kho lưu trữ tại thời điểm đó cam kết được thực hiện, tất cả trong một ảnh chụp nhanh hoàn chỉnh. Khi bạn thực hiện thay đổi mã trên đường đi, bạn sẽ tạo ra một số cam kết - một cam kết riêng cho mỗi thay đổi bạn thực hiện. Git chỉ định cho mỗi cam kết một ID duy nhất theo dõi những thay đổi bạn thực hiện khi nào và khi nào.
Mỗi nhà phát triển có kho lưu trữ riêng để theo dõi các thay đổi của họ. Bạn thực hiện các thay đổi cục bộ và khi bạn sẵn sàng chia sẻ chúng với các nhà phát triển khác, bạn đẩy chúng trở lại kho lưu trữ mà bạn chia sẻ. Cam kết lưu các thay đổi bạn chỉ thực hiện vào kho lưu trữ cục bộ chứ không lưu vào kho lưu trữ từ xa. Các cam kết của bạn không được tự động đồng bộ hóa với kho lưu trữ từ xa - bạn phải đẩy mạnh các cam kết bạn muốn chia sẻ. Khi bạn sử dụng lệnh đẩy, bạn áp dụng các thay đổi của mình cho kho lưu trữ ngược dòng. Mỗi dự án nguồn mở có cách riêng để chấp nhận các thay đổi. Một số dự án sử dụng hệ thống kiểm soát phiên bản phân tán đầy đủ trong đó chỉ một người có thể đẩy các thay đổi vào kho lưu trữ chính, trong khi đó có một mô hình kho lưu trữ được chia sẻ, nơi tất cả các nhà phát triển có thể đẩy vào kho lưu trữ được chia sẻ.
- Đẩy đến sau khi cam kết. Git commit ghi lại và theo dõi các thay đổi đối với kho lưu trữ với mỗi điểm cam kết với một đối tượng cây nắm bắt trạng thái của kho lưu trữ tại thời điểm đó cam kết được thực hiện, tất cả trong một ảnh chụp nhanh hoàn chỉnh. Nhưng cam kết chỉ lưu các thay đổi vào kho lưu trữ cục bộ chứ không lưu vào kho lưu trữ từ xa. Git đẩy cập nhật các thay đổi đã cam kết của bạn và cho phép bạn gửi chúng đến kho lưu trữ từ xa nơi tất cả các nhà phát triển có thể truy cập chúng. Khi bạn sử dụng lệnh đẩy, nó chỉ đơn giản là cập nhật các thay đổi của bạn lên kho lưu trữ ngược dòng.
- Cam kết Git là ý nghĩa cục bộ, chúng chỉ được ghi lại trên máy mà trên đó các cam kết thực sự xảy ra. Lệnh Cam git camit được sử dụng để báo cho Git lưu các thay đổi của bạn vào kho lưu trữ cục bộ và bạn phải thông báo cụ thể cho Git biết những thay đổi nào bạn muốn đưa vào một cam kết trước khi sử dụng lệnh Cam kết cam kết. Bạn có thể sử dụng lệnh đẩy git đẩy của git để đẩy các xác nhận trên kho lưu trữ cục bộ sang một kho lưu trữ từ xa. Lệnh Push đẩy cập nhật các cam kết cục bộ mới trên một máy chủ từ xa. Việc đẩy có hai đối số: tên từ xa (nguồn gốc) và tên nhánh (chính).
Tóm lại, cam kết là đơn vị cơ bản của sự thay đổi trong Git. Không giống như các mô hình kiểm soát phiên bản tập trung khác, Git coi dữ liệu của mình giống như một tập hợp các ảnh chụp nhanh được gọi là cam kết. Chúng giống như một ảnh chụp nhanh toàn bộ nội dung kho lưu trữ, cùng với tất cả các thông tin liên quan đến dự án và mối quan hệ của trạng thái kho lưu trữ này với các trạng thái được ghi lại khác khi nội dung đã phát triển theo thời gian. Một đối tượng cam kết giữ siêu dữ liệu cho mỗi thay đổi được thực hiện đối với kho lưu trữ, bao gồm tác giả, người ủy quyền, ngày cam kết và thông điệp tường trình. Nhưng cam kết chỉ lưu các thay đổi vào kho lưu trữ cục bộ chứ không lưu vào kho lưu trữ từ xa. Git đẩy cập nhật các thay đổi đã cam kết của bạn và cho phép bạn gửi chúng đến kho lưu trữ từ xa nơi tất cả các nhà phát triển có thể truy cập chúng.