2013-06-25 25 views
9

Tôi đã sử dụng Git chỉ cho các dự án duy nhất. Bây giờ tôi muốn tiếp tục làm việc trên một dự án với hai nhà phát triển khác.Việc tạo một chi nhánh cho mỗi nhà phát triển có ý nghĩa không?

Có thể gây ra sự cố nếu một nhà phát triển muốn thực hiện thay đổi nhưng một cam kết khác đã được tạo bởi một nhà phát triển khác? Vì vậy, nó sẽ có ý nghĩa để tạo ra một chi nhánh cho mỗi người chúng ta?

+3

Bạn có một nhánh cho mỗi bạn, trừ khi bạn đang làm việc trên cùng một máy. Khi bạn nhân bản repo của mình, bạn sẽ nhận được các bộ nhánh * riêng của mình, được đặt tên giống như các nhánh của mọi người, nhưng chúng vẫn là * nhánh của bạn *. – meagar

+1

@meagar Âm thanh thú vị, bạn có thể vui lòng giải thích về điều này không? – danijar

+1

Mỗi cá thể nhân bản của kho lưu trữ là một điều hoàn toàn khép kín. Bạn được tự do làm * bất cứ điều gì bạn muốn * với chi nhánh của bạn, bạn sẽ không bước vào ngón chân của người khác cho đến khi bạn cố gắng đẩy. Khi bạn đẩy và kéo, bạn đang thực hiện hợp nhất chi nhánh địa phương của bạn với chi nhánh từ xa (hoặc ngược lại) thiết lập làm chi nhánh "theo dõi". Điều này giống hệt với việc hợp nhất hai nhánh trên máy cục bộ của bạn; trên thực tế, 'git pull' thực sự chỉ là một lần tìm nạp, tiếp theo là sự hợp nhất. Để đơn giản, 'git push' hạn chế hợp nhất thành các phép trộn nhanh, vì bạn không thể giải quyết các xung đột từ xa một cách hiệu quả. – meagar

Trả lời

17

Git, giống như hầu hết các hệ thống kiểm soát phiên bản, rất phù hợp để sử dụng bởi nhiều nhà phát triển. Thật vậy, nó là một trong những điểm chính của một hệ thống kiểm soát phiên bản.

Không cần tạo chi nhánh cho mỗi người dùng. Tôi thậm chí sẽ đi xa như vậy để nói rằng nó sẽ phản tác dụng. Nếu bạn đang làm việc trên cùng một tính năng, có thể bạn sẽ muốn nhận các thay đổi của nhau, bằng cách kéo và hợp nhất. Tạo chi nhánh cho mỗi người dùng là thừa và sẽ làm phức tạp những thứ không cần thiết.

Tình huống cam kết bạn mô tả không có vấn đề. Nếu một người dùng khác đã tạo một cam kết mới trên cùng một nhánh với bạn, bạn sẽ bị dừng nếu bạn cố gắng push. Thay vào đó, trước tiên bạn sẽ phải cắt giảm pull của người dùng khác và hợp nhất (hoặc rebase) công việc của bạn với những thay đổi đó. Đây là hành vi tiêu chuẩn của git pull.

Thực hành thông thường là tạo các chi nhánh dựa chủ yếu vào các tính năng. Nếu bạn muốn được hướng dẫn về phân nhánh, this is a popular strategy.

+0

Nó phụ thuộc vào cách công việc của bạn được chia. Tại một nơi tôi làm việc, chúng tôi sẽ không bao giờ có hai người mã hóa trên cùng một tính năng cùng một lúc.Nếu bạn có nhiều dev làm việc trên cùng một tính năng, mặc dù, tôi hoàn toàn đồng ý với bạn. – Renan

+1

Bạn vẫn không nên tạo các nhánh riêng biệt * cho mỗi người *; nó phải là các tính năng thúc đẩy việc tạo ra các nhánh. Mỗi người nên có nhiều chi nhánh vì họ có các tính năng trong phát triển tích cực. – meagar

+0

Theo tôi, câu trả lời này là sai. Bạn không nên có hai dev trên cùng một nhánh. Điều gì sẽ xảy ra nếu ai đó đè bẹp một loạt các cam kết và đẩy mạnh? Nếu tính năng này đảm bảo cho hai nhà phát triển, bạn nên tìm ra chính xác phạm vi mà mỗi dev đang làm việc và có một nhánh cho từng tính năng. Sau đó, bạn có thể có một nhánh bổ sung ngoài master (hoặc một mốc quan trọng, v.v.) và bạn hợp nhất các nhánh tính năng này. Điều này sẽ cho phép giải quyết các xung đột hợp nhất và kiểm thử thích hợp các nhánh tích hợp trước khi sáp nhập để làm chủ và trải qua quá trình triển khai. –

4

Chúng tôi đã từng làm điều đó ở nơi tôi đã làm việc. Mỗi người trong chúng ta có ít nhất một chi nhánh cá nhân - tôi thực sự tạo ra một nhánh cho mọi công việc tôi phải làm.

Khi hoàn tất, chúng tôi sẽ thực hiện yêu cầu kéo đến nhánh chính. Nếu ai đó đã sáp nhập vào mã chi nhánh chính xung đột với các thay đổi của bạn, bạn phải thực hiện giải pháp xung đột giống như bất kỳ nền tảng kiểm soát nguồn khác (như Tortoise, Mercurial, v.v.), nhưng không có vấn đề gì nếu người biết của bạn biết những gì họ đang làm.

IMO đây là cách tốt nhất để tiến hành phát triển trong nhóm. Bạn luôn có thể kiểm tra trong môi trường cá nhân của riêng mình, nhanh chóng đổi mã từ mỗi nhánh nếu cần. Hệ thống yêu cầu kéo cũng làm cho việc đánh giá ngang hàng trở nên đơn giản hơn nhiều, vì mọi người đều có thể cộng tác và viết nhận xét trên các dòng liên quan trực tiếp trong các trang khác nhau của github.

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