2011-11-01 37 views
7

Nhóm của chúng tôi sử dụng Github Pull Requests để quản lý quy trình làm việc của chúng tôi, giống như what is described here. Khi xem xét thủ công yêu cầu kéo được chấp nhận, đôi khi chúng tôi cần hoàn nguyên quá trình hợp nhất đó vì nó chưa sẵn sàng để triển khai cho các máy chủ sản xuất của chúng tôi.Hoàn nguyên cam kết hợp nhất git, sau đó hoàn nguyên hoàn nguyên

Tuy nhiên, nếu nhà phát triển cố gắng đưa ra Yêu cầu kéo lần nữa, nó không nhận ra những thay đổi này đã được hoàn nguyên và thấy rằng các cam kết đã có trong nhánh chính. Nó sẽ chỉ bao gồm các cam kết gần đây của họ kể từ khi hoàn nguyên, nhưng những gì chúng tôi thực sự muốn là giới thiệu lại TẤT CẢ các cam kết đã được hoàn nguyên, cộng với công việc mới của họ. Nói cách khác, chúng tôi thích cách để phát hành lại Yêu cầu kéo ban đầu.

Vì Github không hỗ trợ tính năng này (tức là, không hoàn nguyên hợp nhất, cũng như không hoàn tác/phát hành lại yêu cầu kéo ban đầu), tôi hiện đang hoàn nguyên quá trình hợp nhất được hoàn nguyên. Điều này cảm thấy sai.

Tôi có thể sử dụng những cách nào khác để đạt được cùng một mục tiêu trong git? (hoặc Github nếu có thể)

+1

Nếu bạn đã thử hợp nhất các cam kết từ yêu cầu kéo và quyết định sau khi thử nghiệm mà bạn không muốn thực hiện việc hợp nhất đó, tại sao bạn hoàn nguyên quá trình hợp nhất, thay vì chỉ đặt lại chính lại trước khi hợp nhất ? (Tôi cho rằng bạn không xuất bản nhánh chính của bạn sau khi hợp nhất yêu cầu kéo nhưng trước khi quyết định có nên giữ nó hay không.) –

+0

Sau khi yêu cầu kéo được chấp nhận, nó sẽ tự động được hợp nhất thành chủ, vì vậy bất kỳ ai trong nhóm của chúng tôi có thể kéo từ đó Bất cứ lúc nào. Bằng cách hoàn nguyên, tôi đã làm theo lời khuyên của bài đăng trên blog mà tôi đã tham chiếu trong câu hỏi của mình, vì nó cho phép chúng tôi chuyển sang các yêu cầu Pull khác và giảm thiểu tắc nghẽn trong quy trình làm việc của chúng tôi. Tôi lo ngại rằng việc đặt lại sẽ làm cho vấn đề tồi tệ hơn do thực tế là chủ nhân luôn sẵn sàng cho các cộng tác viên repo của chúng tôi. –

+0

Ah, vì vậy bạn chấp nhận yêu cầu kéo thực sự trên GitHub. (Tính năng yêu cầu GitHub thực sự thực hiện việc hợp nhất đã được thêm vào khá gần đây.) Thay vào đó, tôi sẽ tìm nạp các cam kết được đề xuất vào kho lưu trữ cục bộ của bạn, hợp nhất chúng và thử nghiệm ở đó. Nếu bạn hài lòng với điều đó, thì bạn có thể đánh dấu yêu cầu kéo như được chấp nhận trên GitHub. –

Trả lời

1

Tôi nghĩ rằng vấn đề của bạn ở đây phát sinh bởi vì khi bạn đang xử lý các yêu cầu kéo, bạn đang chọn tự động hợp nhất chúng trên GitHub. Trong ba cách được đề xuất để xử lý các yêu cầu kéo described in the documentation bạn đang sử dụng lệnh cuối cùng ("Tự động hợp nhất"), chỉ là recently implemented. Cá nhân, tôi nghĩ rằng điều này chỉ thích hợp cho các yêu cầu kéo nhỏ mà rõ ràng là chính xác. Đối với bất cứ điều gì phức tạp hơn, tôi muốn sử dụng phương pháp tiếp cận đầu tiên, tức là

  • thêm kho của người yêu cầu như một mới từ xa
  • lấy từ đó xa
  • cố gắng hợp nhất
  • kiểm tra cẩn thận
  • đẩy kết quả nếu bạn hài lòng

Điều đó có nghĩa là phiên bản được hợp nhất chỉ công khai khi bạn đã thử nghiệm và quyết định o đẩy. Nếu bạn không muốn, bạn chỉ có thể đặt lại nhánh chính của bạn về vị trí trước đó của nó.


Như một vấn đề quan tâm, nó có thể là đáng nói thêm về những gì sẽ xảy ra nếu bạn làm cuối cùng phải trở lại một kết hợp đáng tiếc, nhưng vẫn muốn có tùy chọn để tái hợp nhất một phiên bản mới hơn của nhánh đó. Mặc dù nó có thể cảm thấy sai, vì tôi hiểu nó cách dễ nhất để đối phó với tình hình đó thực sự là để hoàn nguyên sự trở lại. Bạn có thể tìm thêm thảo luận về vấn đề này trong this post from the Pro Git bloganother discussion of the same problem bởi Linux Torvalds cũng có thể hữu ích.

+0

Xin chào Mark - Tôi đã đọc 2 bài báo trước và đánh giá cao về việc bạn nhắc tôi về chúng. Tôi rất thích thực hiện đề xuất của bạn, ngoại trừ việc không có thành viên nào trong tổ chức của chúng tôi có ngã ba riêng của họ trên Github, họ chỉ đơn thuần sao chép từ repo của chúng tôi, vì ông chủ của chúng tôi muốn mọi dev đẩy công việc của họ để làm nổi bật chi nhánh, vì vậy chúng tôi có một bản sao công việc của họ. Tuy nhiên, tôi có thể thiết lập tất cả các "điều khiển từ xa" trên một máy chia sẻ duy nhất và cho phép chúng đẩy đến đó để chúng tôi có thể kiểm tra. Rào cản lớn sẽ tự động hóa quá trình triển khai/xem xét. Cảm ơn sự thấu hiểu! –

+0

@Chip Castle: Không sao cả. Trong thực tế, nó thậm chí còn dễ dàng hơn nếu chúng chỉ đẩy mạnh các chi nhánh - bạn không cần phải thêm từ xa, chỉ cần thực hiện 'git fetch origin' và thử hợp nhất từ ​​nhánh theo dõi từ xa đúng. –

+0

Hmmm ... quy trình hiện tại của chúng tôi yêu cầu một người QA tự đánh giá nó sau khi CI của chúng tôi qua. Tôi cần phải cấu hình Jenkins để "git pull --rebase origin master" để có bản sao mới nhất, sau đó kiểm tra nhánh tính năng và "git rebase -i" để đảm bảo mọi thứ được cập nhật trước khi chạy bộ kiểm thử. Nếu điều đó trôi qua, tôi có thể tự động triển khai cho máy chủ thử nghiệm nơi đánh giá QA của chúng tôi. Sau đó, nếu tất cả điều đó trôi qua, tôi có thể chấp nhận Yêu cầu kéo, vì đó là hành động duy nhất có thể hợp nhất thành chủ. Điều đó có thể giúp ích rất nhiều. Hãy cho tôi biết suy nghĩ của bạn về điều này. Cảm ơn! –

0

Tôi khuyên các bạn nên thực hiện một cách tiếp cận khác. Luồng công việc của bạn về việc hoàn nguyên và hoàn nguyên trở lại có vẻ rất khó hiểu với tôi. Vấn đề thực tế bạn đang cố gắng giải quyết có thể được giải quyết khác nhau.

Tôi đề nghị bạn thay đổi quy trình làm việc của mình để sử dụng hai nhánh. Một nhánh ổn định (master) và một chi nhánh phát triển (develop). Tất cả công việc đi vào chi nhánh develop hoặc vào các nhánh chủ đề riêng biệt. Yêu cầu kéo luôn được gửi đến chi nhánh develop, sau đó hợp nhất thành develop khi được chấp thuận.

master ban đầu được phân nhánh là develop.Ngay sau khi develop ở trạng thái ổn định, bạn hợp nhất nó vào master. master là bản phát hành ổn định hiện tại.

Điều này được dựa trên số nvie's "A successful Git branching model".

+0

Tôi đã đọc bài viết đó trước đây và đó là một phương pháp tuyệt vời để theo dõi chắc chắn, nhưng nó dường như không hoạt động tốt cho nhóm của chúng tôi. Chúng tôi đã sử dụng các nhánh tính năng và CI chạy sau khi một được sáp nhập vào master (thông qua Github Pull Request), do đó, có một nhánh phát triển, mà chúng tôi đã thử một lúc, chỉ đơn giản là làm việc nhiều hơn để quản lý. Thêm vào đó, ngay cả với bộ phần mềm thử nghiệm của chúng tôi, đã có những dịp khi chủ nhân trở nên không ổn định, vì vậy nó không thực sự giúp đội của chúng tôi nhiều như vậy. Tuy nhiên, tôi sẽ ghi nhớ điều này trong tương lai. Cảm ơn một lần nữa cho đề xuất của bạn. –

0

Nếu bạn nhận được một trung đoàn chi nhánh cho mỗi tính năng, bạn có thể xây dựng lại một ứng cử viên phát hành với các tính năng bạn thích. Bạn sẽ không cần phải "trở lại một hợp nhất":

tiếp tục đọc: https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR

Xin vui lòng xem các ý kiến ​​cũng cho cái nhìn sâu sắc thêm. Nó hoạt động thực sự tốt cho chúng tôi.

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