2011-09-15 34 views
10

Tôi đang lưu công việc của mình vào ban đêm với một cam kết duy nhất cho nhiều tệp. Tôi tự hỏi nếu nó sẽ là tốt hơn để cam kết cho mỗi tập tin, nhưng điều này có vẻ như nhiều công việc nhiều hơn nữa.Kiểu cam kết Git: Tất cả các tệp đã thay đổi cùng một lúc hoặc một tệp cùng một lúc?

Tôi không có vấn đề gì với mọi thứ bây giờ nhưng tôi định đặt mã của mình lên GitHub và tôi muốn nó dễ hiểu.

Tôi tự hỏi những người còn lại sử dụng git đang làm gì. Ngoài ra nếu bạn có thể đánh vần nó cho tôi. Tôi mới đến Git và tôi đã sử dụng TortoiseGit và gitk trong Windows.

Trả lời

18

Khi nào cam kết và những gì cần cam kết là nghệ thuật và không có quy tắc đen trắng. Điều đó đang được nói, có những thói quen dễ hiểu hơn những người khác.

Nói chung, tôi nghĩ bạn nên tối ưu hóa cam kết của mình để dễ hiểu - nếu bạn quay lại và đọc khác biệt cho cam kết, bạn có thể tìm ra những gì bạn đã đạt được trong các thay đổi không?

Nếu bạn muốn cụ thể hơn, đây là một danh sách dài những gì tôi nghĩ là làm và không nên làm:

  • Đừng cam kết sau mỗi lần thay đổi chút duy nhất - mỗi dòng thay đổi, mỗi tập tin đã thay đổi , v.v.
  • Không làm việc cả ngày và thực hiện một cam kết khổng lồ vào cuối ngày.
  • Thực hiện tách biệt các cam kết cho các tính năng khác nhau - ví dụ: phát triển tính năng foo so với sửa lỗi # 2.
  • Thực hiện cam kết riêng cho việc di chuyển/đổi tên tệp, vì Git dễ dàng theo dõi theo cách này.
  • Hãy suy nghĩ về việc tối ưu hóa khả năng hoàn nguyên: Nếu bạn không thích thay đổi bạn đã thực hiện, bạn có dễ dàng hoàn tác thay đổi ngay cả sau khi các thay đổi mới đã được xếp chồng lên trên không?
+2

+1 đặc biệt cho khái niệm kiểm soát phiên bản dưới dạng cơ chế ghi để bạn có thể hoàn tác các thay đổi riêng lẻ. – tripleee

+0

Cảm ơn.Sự thiên vị của tôi đối với việc tách các thay đổi hợp lý được lấy cảm hứng từ sự dễ sử dụng của 'git revert' và' git cherry-pick', và cũng bởi [Darcs] (http://en.wikipedia.org/wiki/DARCS) đang thay đổi định hướng chứ không phải là chụp nhanh theo định hướng. – Nayuki

10

"Dễ hiểu" có nghĩa là cũng:

  • cam kết đại diện không chỉ là "trạm kiểm soát" (như chính chúng nếu bạn cam kết sau mỗi lần sửa đổi tập tin), nhưng tình trạng chặt chẽ của mã
  • dễ git bisect (tức là từng cam kết sẽ đại diện cho một sự thay đổi trong một nhiệm vụ , mà biên dịch và thêm một cuộc cách mạng hay một tính năng mới, và không phải là một "trạm kiểm soát cam kết", mà sẽ làm cho git bisect không cách quá sớm)

Xem "understanding the Git workflow" để biết thêm: bạn cần phải phân biệt:

chi nhánh
  • tin (mà bạn không bao giờ đẩy), nơi bạn có thể cam kết về cơ bản bất cứ lúc nào, và
  • chi nhánh công cộng (mà bạn sẽ đẩy GitHub), cần dọn dẹp và có các cam kết có ý nghĩa.

Vì vậy, hãy chú ý đến số "fast-forward" merge that Git uses by default: đừng quên xóa lịch sử của các chi nhánh bạn sắp hợp nhất theo cách đó vào các nhánh công khai.

+1

+1 Điểm 'git bisect' đặc biệt quan trọng, tôi nghĩ - khi lịch sử của bạn được tạo thành từ những cam kết nhỏ nhất đại diện cho những thay đổi có ý nghĩa với nhau, bisection lỗi là một niềm vui ... –

+2

Bạn có thể giải thích những gì một trạm kiểm soát cam kết là – loop

+1

@test: trích dẫn từ bài viết "Hiểu luồng công việc Git", cam kết trạm kiểm soát đại diện cho "các cam kết thường xuyên sao lưu công việc của bạn nhưng bắt giữ mã ở trạng thái không ổn định". Vấn đề với một cam kết điểm kiểm tra không phải là nó bao gồm một tệp hoặc nhiều tệp, nhưng nó không đại diện cho một thay đổi có ý nghĩa và (tệ hơn) rằng nó có thể không biên dịch được. Và điều đó gây ra rắc rối cho 'git bisect'. – VonC

Các vấn đề liên quan