Tại sao bạn không cam kết thay đổi hợp nhất ngay lập tức?


16

Văn phòng của tôi sử dụng Git và SourceTree để kiểm soát phiên bản của chúng tôi. Điều này xuất hiện bởi vì khi tôi tham gia thì không có kiểm soát phiên bản nào và SourceTree là hệ thống duy nhất tôi từng sử dụng. Tôi không phải là một chuyên gia, nhưng tôi là người có kinh nghiệm nhất trong số các đồng nghiệp của mình, vì vậy tôi là chuyên gia thực tế chịu trách nhiệm dạy mọi người sử dụng Git đúng cách và khắc phục mọi sai lầm họ đang mắc phải.

Tôi đang làm một tài liệu hướng dẫn đi qua Git và SourceTree và giải thích từng bước của quy trình. Trong quy trình Kéo, hộp thoại SourceTree cho phép bạn chọn tùy chọn "Cam kết thay đổi được hợp nhất ngay lập tức". Tôi hiểu những gì nó làm và tại sao nó hữu ích. Điều tôi không hiểu là tại sao mọi người không muốn sử dụng tính năng này.

Ai đó có thể giải thích lý do tại sao bạn không muốn tự động thực hiện các thay đổi đã hợp nhất của mình không? Tôi đang cố gắng để hiểu lý do để tôi có thể giải thích tính hữu dụng của tính năng tốt hơn và có ý tưởng về những cạm bẫy cần chú ý trong tương lai.

Chỉnh sửa: Tôi không tin rằng câu hỏi của tôi là một bản sao của câu hỏi được liên kết. Câu hỏi được liên kết rộng rãi là hỏi mức độ thường xuyên cam kết. Tôi đang hỏi về lý do tại sao một người sẽ chọn không sử dụng một tính năng cụ thể liên quan đến việc hợp nhất cam kết trong SourceTree.



1
Bạn có muốn lý do tốt? Bởi vì tôi có thể cung cấp nhiều lý do để trì hoãn việc kiểm tra mã mà tôi đã nghe người ta nói trong tự nhiên, nhưng một vài trong số đó là lý do chính đáng.
whatsisname

Lý do duy nhất tôi có thể nghĩ đến là khi hợp nhất thất bại do xung đột hợp nhất. Nhưng SourceTree sẽ không cam kết nếu điều đó xảy ra.
Robert Harvey

Trên một lưu ý phụ: Tại sao bạn viết hướng dẫn của riêng bạn? bitbucket đã có một hướng dẫn tuyệt vời rồi. confluence.atlassian.com/bitbucket/ từ
winkbrace

@winkbrace Chúng tôi không sử dụng Bitbucket; chúng tôi giữ mọi thứ trên mạng cục bộ. Tôi tham khảo hướng dẫn tuyệt vời của Atlassian , nhưng tôi muốn một cái gì đó súc tích hơn một chút tôi có thể trao cho những người hoàn toàn mới với Git và kiểm soát phiên bản. Đây thực sự là một phần giới thiệu và thủ tục "đây là cách thức và lý do tại sao bạn cam kết / đẩy / kéo / vv" để mọi người có thể bắt đầu chạy.
David K

Câu trả lời:


26

Tôi sẽ không muốn sử dụng tính năng này.

Thực tế là không có xung đột có nghĩa là khá nhiều thay đổi được hợp nhất trong chi nhánh của tôi gần như không nằm trong cùng một dòng mã như những thay đổi tôi đã thực hiện. Điều đó không có nghĩa là những thay đổi đó tương thích với những thay đổi của tôi. Điều đó không có nghĩa là mã sẽ biên dịch hoặc mã sẽ hoạt động hoặc các bài kiểm tra sẽ vượt qua.

Nói cách khác, bằng cách sử dụng tùy chọn này, tôi có khả năng kết thúc bằng một cam kết mã giả có thể không ở trạng thái tốt và cần phải có cam kết mới để khắc phục. Khi tôi đang thực hiện công việc này, và vì tôi không bao giờ nên đẩy cam kết giả mạo này ngược dòng, thậm chí không phải do nhầm lẫn (Goodness cấm, sau đó ai đó có thể hợp nhất vào một số chi nhánh khác!) địa điểm.


Có lẽ, bạn đang tạo các nhánh tính năng và không hợp nhất mọi thay đổi nhỏ vào nhánh chính. Hợp nhất không có khả năng gây ra xung đột trên một nhánh tính năng trừ khi nhiều người đang làm việc trên cùng một lớp trên cùng một nhánh tính năng.
Robert Harvey

4
@RobertHarvey Có nhưng tôi có lẽ thường xuyên hợp nhất chi nhánh chính vào chi nhánh của mình. Có một giả định ẩn trong nhận xét của bạn rằng các tính năng khác nhau sẽ tự nhiên chạm vào các lớp / mô-đun khác nhau, nhưng không phải ai cũng may mắn. Bởi (mis) may mắn bạn có một lớp Chúa ở đâu đó mà mọi người làm bất cứ điều gì cần phải chạm vào, và bạn không thể làm gì nhiều về nó. Ngoài ra còn có các tính năng xuyên suốt (nâng cấp một số thư viện do một trong số 10 dòng mã cần thay đổi ...) Tôi biết đối số "cố gắng không đến đó", nhưng nếu bạn đã ở đó thì sao? Cẩn tắc vô ưu.

2

Sau khi hợp nhất, có thể có thay đổi đối với các tệp trong repo cục bộ. Những thay đổi này không được tự động cam kết với địa phương, trừ khi bạn đặt "Cam kết thay đổi được hợp nhất ngay lập tức".

Nếu bạn không đặt tùy chọn đó, các tệp sẽ xuất hiện trong SourceTree dưới dạng các thay đổi không được cam kết.

Đó là vì bản thân Git không cam kết trừ khi bạn nói rõ ràng với nó và SourceTree là GUI Git. Các "Cam kết thay đổi sáp nhập ngay lập tức" tùy chọn không phải là quá nhiều một lựa chọn, vì nó là một phím tắt lệnh.

Vì vậy, lý do không muốn sử dụng tính năng này là hiển nhiên: bạn muốn thực hiện cam kết bằng tay hoặc hoàn toàn không.

Giả sử bạn kéo chủ đến nhánh tính năng của mình. Một đồng nghiệp đang làm việc trên một nhánh tính năng khác. Đồng nghiệp này có một lịch sử phá vỡ mọi thứ. Hợp nhất chứa các thay đổi đối với mã chung được chia sẻ bởi đồng nghiệp này. Vì vậy, bạn - cùng với các thành viên còn lại trong nhóm - không cam kết các thay đổi được hợp nhất cho đến khi bạn chắc chắn rằng không có thay đổi nào được thực hiện bởi đồng nghiệp này sẽ ảnh hưởng đến công việc của bạn.

Chỉ vì không có lý do chính đáng - về lý thuyết - không sử dụng tính năng này, trong thực tế, có thể có bất kỳ lý do chính đáng nào. Đối với hướng dẫn của bạn, tôi chỉ nói rằng "99 lần trong số 100, đây là tùy chọn bạn muốn sử dụng". Tôi không nghĩ rằng bạn thực sự cần phải đi sâu vào chi tiết về việc không sử dụng nó, đặc biệt nếu những người khác mới kiểm soát phiên bản. Đó là tất cả phụ thuộc vào mức độ sâu sắc mà bạn dự định cho hướng dẫn.


2

Nếu bạn đang sử dụng móc cam kết bài đăng để tự động đẩy các cam kết của mình (như trong /programming//a/7925891/6781678 ), bạn có thể cần tùy chọn này để tránh đẩy một số cam kết có chất lượng đáng ngờ.

Tôi cũng sẽ không bao giờ sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.