Vào thời điểm tôi sẵn sàng hợp nhất chi nhánh của mình để phát triển (nhấn mạnh vào tôi)
Xử lý xung đột trong git merge
thường đơn giản hơn trong git rebase
. Trong hợp nhất Git, bạn có thể thấy toàn bộ danh sách các tệp đã được sửa đổi cùng một lúc. Cho dù có bao nhiêu cam kết đã được thực hiện bởi các đồng nghiệp khác, bạn sẽ phải hợp nhất một lần . Với quy trình làm việc rebase, cuối cùng bạn có thể gặp phải những xung đột tương tự và phải xem xét lại chúng một cách thủ công. Cuối cùng, bạn có thể sửa lỗi cam kết thứ 13 và cảm thấy như bạn không thể nhìn thấy ánh sáng từ đường hầm .
Theo kinh nghiệm của tôi, khi tôi cố gắng giải quyết một cách ngây thơ các cuộc xung đột lặp đi lặp lại, cuối cùng tôi đã mất các sửa đổi của ai đó hoặc với một ứng dụng thậm chí không được biên dịch. Thường thì tôi và đồng nghiệp đã làm rất nhiều việc nhưng bị choáng ngợp bởi sự phức tạp của việc lặp lại xung đột đến mức chúng tôi phải hủy bỏ và mất công việc trước đây sau một vài lần phản công.
Tôi sẽ gợi ý cho bạn một vài kỹ thuật nhưng chúng chỉ có thể giúp việc hợp nhất trở nên dễ dàng hơn là tự động hóa nhiệm vụ.
- Tập tin tài nguyên / ngôn ngữ . Nếu bạn có các thay đổi phụ gia đối với tệp tài nguyên, hãy đảm bảo bạn luôn di chuyển chúng đến cuối tệp để bạn có thể dễ dàng nhớ lại các thay đổi của mình đối với các thay đổi của người khác . Bạn có thể sao chép và dán các thay đổi của mình ở phía dưới hoặc chỉ cần xóa các dấu xung đột
- Làm. Không phải. CHẮC CHẮN RỒI. Định dạng RE . Cả bạn và nhà phát triển đồng nghiệp của bạn sẽ không thực hiện "định dạng lại mã lớn" trong công việc hàng ngày. Định dạng lại mã bổ sung quá nhiều số dương tính giả trong quản lý xung đột. Định dạng lại mã có thể được thực hiện
- Tăng dần, ví dụ như bởi mọi nhà phát triển trên mỗi cam kết, ngay khi họ sử dụng một công cụ tự động (ví dụ: Eclipse có một tùy chọn để định dạng lại lưu, vanilla Visual Studio không có). Tuyệt đối mọi nhà phát triển phải sử dụng các tiêu chuẩn định dạng mã giống nhau, được mã hóa thành một tệp định dạng được IDE của bạn ăn. Để cho bạn một ý tưởng, nếu đó là 4 khoảng trắng hoặc 2 tab thì điều đó không thành vấn đề, nhưng nó thực sự quan trọng nếu mọi người đều sử dụng như nhau.
- Ngay trước khi phát hành, bởi một trưởng nhóm. Nếu một cam kết "định dạng lại mã" xảy ra khi mọi người không làm việc trên các nhánh, tức là trước khi họ phân nhánh, mọi việc sẽ trở nên dễ dàng hơn
- Xem lại công việc phân chia giữa các đồng nghiệp. Đây là một phần mà hầu hết các kỹ thuật đến. Như được chỉ ra bởi các câu trả lời khác, đó là mùi thiết kế nếu nhiều nhà phát triển thực hiện các nhiệm vụ khác nhau phải chạm vào cùng một tài nguyên. Bạn có thể phải thảo luận với trưởng nhóm của mình về phần nào sẽ được sửa đổi bởi mỗi nhà phát triển đồng thời.
Tôi cũng đã thấy một số thói quen xấu trong quy trình làm việc của Git trong các nhóm của tôi. Mọi người thường quá quan tâm đến các chi nhánh của họ. Cá nhân tôi đã chứng kiến một nhà phát triển thêm 10 đến 20 cam kết được gắn nhãn "sửa chữa", mỗi cam kết một hoặc hai dòng. Chính sách của chúng tôi là các cam kết được dán nhãn bằng vé JIRA để cung cấp cho bạn một ý tưởng.
@JacobRobbins đề nghị thực hiện git rebase
một nhiệm vụ hàng ngày. Tôi muốn đẩy cách tiếp cận của mình về phía trước.
Đầu tiên, sử dụng rebase một lần chỉ để giảm số lượng cam kết xuống một số ít. Và rebase chỉ vào nhánh phát triển ban đầu , đó là cam kết mà bạn đã phân nhánh. Khi tôi nói một cách khéo léo, tôi có thể có nghĩa là 3 hoặc 4 (ví dụ: tất cả mặt trước, tất cả mặt sau, tất cả các bản vá cơ sở dữ liệu) hoặc bất kỳ con số hợp lý nào của con người. Sau khi bạn đã hợp nhất chúng, hãy sử dụng fetch
và thực hiện rebase của bạn trên nhánh ngược dòng. Điều này sẽ không cứu bạn khỏi xung đột trừ khi nhóm của bạn xem xét phương pháp của riêng họ, nhưng sẽ khiến cuộc sống của bạn bớt đau đớn hơn.
Nếu bạn có thêm câu hỏi về các nhiệm vụ cụ thể, vui lòng tìm kiếm và hỏi về Stackoverflow.
[Chỉnh sửa] về quy tắc trinh sát không định dạng lại và cậu bé. Tôi đã định dạng lại một chút định dạng RE để làm nổi bật rằng ý nghĩa của tôi là nhiệm vụ định dạng từ đầu toàn bộ tệp nguồn, bao gồm cả mã không được bạn chạm vào. Ngược lại, luôn định dạng mã của riêng bạn, đó là hướng đạo sinh hoàn hảo, một số nhà phát triển, bao gồm cả tôi, được sử dụng để định dạng lại toàn bộ tệp với các khả năng của IDE. Khi tệp bị người khác chạm vào, ngay cả khi các dòng bị ảnh hưởng không được thay đổi trong nội dung và ngữ nghĩa của chúng, Git sẽ xem đó là một xung đột. Chỉ có một trình soạn thảo nhận biết ngôn ngữ rất mạnh mới có thể gợi ý rằng xung đột chỉ liên quan đến định dạng và tự động hợp nhất đoạn được định dạng tốt nhất. Nhưng tôi không có bằng chứng về bất kỳ công cụ nào như vậy.
Rốt cuộc, quy tắc trinh sát của cậu bé không bắt buộc bạn phải dọn dẹp mớ hỗn độn của người khác. Chỉ là của bạn.