2010-06-05 16 views
6

Sử dụng Git hoặc Mercurial, làm thế nào bạn biết khi bạn làm một bản sao hoặc kéo, không ai kiểm tra tệp (đẩy nó)? Điều quan trọng là:Sử dụng Git hoặc Mercurial, làm thế nào bạn biết khi bạn làm một bản sao hoặc kéo, không ai kiểm tra tệp (đẩy nó)?

1) Bạn không bao giờ biết nó ở trạng thái không nhất quán, vì vậy bạn hãy thử 2 giờ để thử gỡ lỗi mã khi mã của bạn ở trạng thái không nhất quán.

2) Với tất cả mã khung (như Ruby on Rails) - có khả năng là hàng trăm tệp - nếu một số tệp không phù hợp với tệp kia, không thể rake db:migrate hoặc script/generate controller gây ra một số thiệt hại hoặc mâu thuẫn với mã căn cứ?

+3

Git và Mercurial không phải là VCS duy nhất mà bị mâu thuẫn. Tôi có thể kiểm tra mã bị hỏng vào kho lưu trữ Subversion của tôi và để lại cho bạn mã gỡ lỗi trong 2 giờ. Giao tiếp là chìa khóa! – basszero

+3

thông tin liên lạc * là * khóa. Đó cũng là lý do tại sao kiểm soát nguồn chỉ là một khía cạnh của phát triển phần mềm. –

Trả lời

16

Kéo và đẩy là nguyên tử trong Git và Mercurial. Nó có nghĩa là họ sẽ không bao giờ cho phép bạn nhận được một phần thay đổi được đẩy. Bạn sẽ luôn nhận được một thay đổi hoàn toàn.

Cập nhật: Tôi chỉ nghĩ rằng bạn có thể sợ "Nếu ai đó đang đẩy một loạt các thay đổi và tôi sẽ nhận được một số trong số đó". Sau đó, đó là tất cả về truyền thông và quy trình làm việc được chấp nhận trong dự án.

Nó thường được đồng ý rằng mọi cam kết vào thân cây (chính hoặc cách bạn gọi nó) nên để mã trong trạng thái nhất quán. Nếu ai đó biết anh ấy sẽ thực hiện các thay đổi sẽ tạo ra những mâu thuẫn tạm thời, anh ta nên làm điều đó trong một chi nhánh và nếu nó sẵn sàng hợp nhất nó vào thân cây. Sau đó, thân cây được đưa đến trạng thái của nhánh trong một lần commit để bạn sẽ luôn thấy nó phù hợp.

Cập nhật 2: Như tonfa đã nói trong nhận xét - trong Mercurial push là nguyên tử. Tôi đã làm một số thử nghiệm đơn giản trong git, và đẩy là nguyên tử ở đây quá. Vì vậy, bạn không cần phải lo sợ những mâu thuẫn như vậy nếu bạn biết rằng các nhà phát triển khác đẩy các thay đổi làm việc. (mặc dù các phát biểu trước đó về các nhánh vẫn còn hợp lệ).

+4

Tôi không biết git, nhưng trong hg nếu ai đó đẩy nhiều csets, chúng chỉ xuất hiện khi quá trình push kết thúc, nguyên tử (tôi đoán là git sẽ làm như vậy, thay đổi con trỏ đến đỉnh của nhánh chỉ ở cuối cùng), – tonfa

+0

Ah, vâng, bạn có lẽ đúng. – silk

1

Khi tôi làm một pull trong hg, nếu không có thay đổi, tôi nhận được một:

pulling from <REPOSITORY NAME> 
searching for changes 
no changes found 

Vì vậy, tôi biết có chưa được bất kỳ thay đổi kể từ lần cuối cùng tôi kéo. Ngoài ra, bạn luôn có thể duyệt lịch sử kho lưu trữ và xem những thay đổi đã được thực hiện.

2

Như những người khác đã nói, cam kết là nguyên tử, do đó bạn sẽ không gặp vấn đề với sự không nhất quán do cam kết một phần.

Câu trả lời này thêm vào cuộc hội thoại là bạn có tùy chọn thêm các móc trước cam kết buộc chạy sạch bộ kiểm tra trước khi cho phép.

http://git-scm.com/docs/githooks

https://www.mercurial-scm.org/wiki/Hook

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