Quản lý nhiều người làm việc trong một dự án với GIT


32

Tôi rất mới với GIT / GitHub (mới như bắt đầu từ hôm qua). Tôi muốn biết cách tốt nhất để quản lý nhiều người làm việc trong cùng một dự án với Github là gì. Hiện tại tôi đang quản lý một dự án với bốn nhà phát triển.

  1. Làm cách nào để xử lý công việc và đảm bảo mọi thứ đều đồng bộ?

    (Lưu ý: Tất cả các nhà phát triển sẽ có một tài khoản chung.)

  2. Có phải mỗi nhà phát triển cần phải ở trên một chi nhánh khác nhau?

  3. Tôi có thể xử lý 2 người làm việc trên cùng một tệp không?

Xin vui lòng gửi một câu trả lời chi tiết, tôi không phải là một người đọc nhút nhát. Tôi cần phải hiểu rõ điều này.


7
Một tài khoản cho tất cả các nhà phát triển? Điều đó có thể làm việc nhưng nó rất có thể không phải là một ý tưởng tốt.
marstato


Có thể đáng để xem xét Phát triển dựa trên GitFlowTrunk . Cá nhân tôi đã có thành công lớn với phần sau
J Lewis

Câu trả lời:


29

Nếu tất cả các nhà phát triển có quyền truy cập vào repo, bạn không cần phải làm gì đặc biệt. Họ sẽ lấy các thay đổi từ repo, tự thay đổi, cam kết cục bộ và sau đó đẩy lùi vào repo công khai khi họ có việc gì đó.

Mặt khác, nếu bạn có một (hoặc một vài) nhà phát triển chịu trách nhiệm cam kết với repo và những người khác đang cung cấp các bản vá cho những điều này. Yêu cầu mỗi người nhân bản repo vào tài khoản của chính họ và yêu cầu họ gửi yêu cầu kéo khi họ có thay đổi họ muốn vào repo chính.

Bạn cũng có thể tạo các bản sao cụ thể để làm việc trên các tính năng cụ thể nếu bạn muốn. Sử dụng cùng một quy trình công việc với các yêu cầu kéo để có được các thay đổi trong repo chính khi tính năng được hoàn thành.

Nếu bởi "Tất cả các nhà phát triển sẽ có một tài khoản chung" thì bạn có nghĩa là tất cả các nhà phát triển sẽ chia sẻ một tài khoản GitHub và xuất hiện dưới dạng cùng một người chuyển phát trong repo, đó là một ý tưởng tồi. Tạo các tài khoản riêng biệt và thiết lập chúng làm cộng tác viên nếu bạn muốn tất cả chúng có quyền truy cập cam kết.

Đối với các câu hỏi cụ thể của bạn:

  1. Không, sử dụng các nhánh cho các tính năng, sửa lỗi, vv sẽ mất nhiều hơn một cam kết. Nhiều nhà phát triển có thể làm việc trên cùng một chi nhánh.

  2. Có, git xử lý xung đột thực sự tốt, vì vậy không có vấn đề gì khi mọi người làm việc trên cùng một tệp. Không có vấn đề gì ngoại trừ, giải quyết xung đột có thể không phải lúc nào cũng tầm thường nếu có những thay đổi cơ bản đối với một tệp đã được chỉnh sửa bởi nhiều thành viên. Điều này tuy nhiên không có gì không thể vượt qua bằng cách nói chuyện với nhau. Kiểm soát phiên bản không thay thế giao tiếp.

Chúc may mắn!


Một vài điểm bạn đã làm ở đó là những người mở mắt thực sự, khiến tôi phải suy nghĩ theo một hướng khác nhau, cảm ơn!
badZoke

Healer nếu nó có thể giúp bạn. Git và DVCS yêu cầu một số làm quen, nhưng chúng cực kỳ linh hoạt khi bạn đã quen với chúng.
harald

Cảm ơn vì điều đó. Tôi đã có một câu hỏi cụ thể. Nếu có nhiều nhà phát triển làm việc trên cùng một chi nhánh. Mỗi khi một trong số các nhà phát triển thực hiện thay đổi và đẩy sang nhánh hoạt động, phần còn lại của các nhà phát triển có cần phải thay đổi (để đảm bảo họ có mã mới nhất để hoạt động) không?
Eswar Rajesh Pinapala

Không, không phải mọi lúc, chỉ khi bạn muốn đồng bộ hóa. Xem xét bản sao chi nhánh địa phương của bạn là chi nhánh riêng của bạn và chi nhánh ngược dòng là chi nhánh bạn muốn hợp nhất. Sử dụng một cái gì đó như git fetch upstreamtheo sau git merge upstream/branchsẽ giúp bạn được đồng bộ hóa mà không cần viết lại lịch sử cam kết cục bộ của bạn. Nếu đó không phải là một vấn đề, chỉ đơn giản là git pull --rebasesẽ di chuyển các thay đổi chưa được xử lý cục bộ của bạn lên đỉnh của nhánh thượng nguồn.
harald

@badZoke .... bạn đã làm gì để xử lý câu hỏi thứ 3 của mình (xử lý 2 người làm việc trên cùng một tệp) ...
Moumit

25

Chúng tôi làm việc với 2 nhà phát triển và chúng tôi sử dụng quy trình công việc này:

  • Trên Github, chúng tôi có một nhánh chính và một nhánh dev
  • Nhánh chính giống như sản xuất hoặc chứa mã sẵn sàng triển khai
  • Chi nhánh dev đi trước chủ và chứa tất cả mã mới hiện đang được làm việc trên
  • Tại địa phương, cả hai chúng tôi đều làm việc trên nhánh dev và đẩy sang github khi có gì đó sẵn sàng
  • Nhà phát triển khác tìm nạp bất kỳ thay đổi mới nào từ nhánh nhà phát triển trước khi đẩy mã mới của mình
  • Khi nhánh dev tốt, chúng ta hợp nhất với nhánh master
  • Tại địa phương chúng tôi có một số chi nhánh tính năng phát hành chi nhánh, vv

1
Đẹp và đơn giản, cảm ơn rất nhiều! Tôi sẽ bắt đầu với điều này, trước khi tôi chuyển sang những thứ phức tạp;)
badZoke

Điều gì sẽ xảy ra nếu, khi nhà phát triển khác tìm nạp các thay đổi mới, trước khi đẩy mã của anh ta, các thay đổi mới sẽ thay đổi mã mà anh ta đã thay đổi?
wayofthefuture

+1, đây thực sự là cách đơn giản nhất để bắt đầu và hoạt động hoàn toàn tốt. Những gì bạn đang sử dụng được gọi là gitflow đơn giản hóa: marcgg.com/assets/blog/git-flow-b Before.jpg
Jelle

5

Tôi chỉ thấy câu trả lời bằng văn bản ở đây, vì vậy tôi nghĩ rằng tôi sẽ đăng một bức ảnh về một gitflow đẹp để bắt đầu. Một bức tranh mô tả hơn một ngàn từ:

Gitflow đơn giản hóa

  • Luồng này cũng hoạt động tốt với Triển khai liên tục.
  • Chi nhánh chính của bạn chứa mã hiện đang chạy trên máy chủ sản xuất của bạn.
  • Chi nhánh phát triển của bạn chứa mã hiện đang chạy trên máy chủ dàn / thử nghiệm.

+1, luồng git hoặc một cái gì đó tương tự có lẽ là câu trả lời đúng cho câu hỏi này.
Có thể là

0

Tôi làm việc với 3 nhà phát triển khác và chúng tôi phải vật lộn với điều này khá nhiều. Các nhà phát triển đôi khi sẽ đưa các cam kết vào sản xuất mà thực sự chưa sẵn sàng cho thời gian chính vì họ sẽ đưa các cam kết khác vào thay đổi của mình và sau đó đẩy vào sản xuất. Chi nhánh phiên bản có vẻ hoạt động tốt cho chúng tôi. Vì vậy, nếu phiên bản 1.0 là phiên bản ổn định hiện tại, chúng tôi sẽ tạo một nhánh để phát triển v1.1. Các nhà phát triển sẽ thực hiện thay đổi trong chi nhánh này. Máy chủ thử nghiệm của chúng tôi kiểm tra chi nhánh này và kéo các thay đổi khi cần thiết. Khi tất cả các tính năng cho v1.1 đã sẵn sàng và thử nghiệm đã hoàn tất, chúng tôi sẽ hợp nhất v1.1 với chủ và đẩy. Với các nhánh, nhóm phát triển A có thể hoạt động trên v1.1 và nhóm phát triển B có thể hoạt động v1.2. Cả hai đội có thể làm việc mà không tác động lẫn nhau. Nếu đội A phát triển thứ gì đó mà B có thể sử dụng,

Chúng tôi cũng sử dụng một nhánh hotfix được sử dụng để thay đổi ngay lập tức.

Đây là một liên kết đến một hình ảnh của cái này trông như thế nào. http://nvie.com/img/git-model@2x.png


Điều đó đối với tôi không giống như bạn thực sự thực hiện luồng git như dự định - đó là phân tách từng tính năng độc lập hoặc sửa chữa trên nhánh riêng của nó, thay vì chỉ mỗi bản phát hành
Brad Thomas
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.