Dòng chảy Git - Đã có Commit, tại sao vẫn phải Push?

Những người từng lập trình trong thập kỷ 2000-2010 ắt hẳn sẽ thắc mắc vì sao Git lại rối rắm như vậy? Vì sao không commit code thẳng lên remote repository mà phải qua trung gian local repository.

Commit là chuyển hàng ra bến cảng, cửa khẩu. Push là xuất khẩu hàng ra khỏi biên giới

Commit vs push

 

Nếu như chúng ta ví workspace như ngôi nhà của bạn, hoặc công xưởng, thì local repository chính là kho hàng đặt ở... biên giới.

Tại sao lại cần phải "add" mà không phải commit ngay?

Nếu xem "code changes" như "sản phẩm xuất xưởng". Sản phẩm phải được đưa đến một kho gọi là "Index". Tại đây các sản phẩm (các files) sẽ được đóng gói (commit) với một giấy thông hành (message).

Như vậy sản phẩm nếu mới chỉ "commit" thì vẫn chưa ra khỏi biên giới. Chừng nào còn trong biên giới thì sẽ chưa có xung đột (tương tự như tranh chấp thương mại).  Khi sản phẩm bắt đầu được xuất đi (push) thì khi đó sẽ có nguy cơ xung đột (tương tự như khi thông quan vào một quốc gia, các thủ tục tại quốc gia đó sẽ triển khai để kiểm tra chất lượng hàng hóa).

Tạo nhánh (branch)

Khi bắt đầu "xuất xưởng sản phẩm" (đẩy file vào index repository, hay stage), chúng ta đã phải tạo nhánh cho nó để kê khai các thay đổi (snapshot of changes). Nhánh cũng tương tự như Container chứa hàng ngàn thùng đã được đóng gói (commit). 

Một khái niệm tương tự Branch, đó là "Tag" (nhãn). Khác biệt duy nhất là: Tag chỉ là thông tin để phân loại "hàng hóa", giúp cho công tác quản lý được tốt hơn. Tag không dùng để thực hiện các hoạt động xuất/nhập cảnh (push, merge, rebase) như Branch, hay nói cách khác Tag không có giá trị "pháp lý".

 

Tags