2012-03-14 26 views
5

Sandofsky advocates rất nghiêm ngặt về lịch sử repo 'chính' của bạn, giữ cho nó sạch sẽ mà không làm lộn xộn với nhánh cây và cam kết trạm kiểm soát.Quy trình làm việc Git nhiều nhà phát triển, duy trì lịch sử rõ ràng

Bạn không bao giờ nên hợp nhất chi nhánh tư nhân trực tiếp vào chi nhánh công cộng với việc hợp nhất vani. Đầu tiên, hãy dọn dẹp nhánh của bạn bằng các công cụ như thiết lập lại, rebase, hợp nhất squash và cam kết sửa đổi.

Xử lý lịch sử công khai là không thay đổi, nguyên tử và dễ theo dõi. Điều trị lịch sử cá nhân như dùng một lần và dễ uốn.

Điều này hấp dẫn tôi và tôi đã lên kế hoạch triển khai quy trình làm việc, nơi các đồng nghiệp của tôi có kho lưu trữ từ xa riêng và thực hiện yêu cầu kéo khi họ hoàn thành công việc trên nhánh và làm sạch cam kết lịch sử. Sau đó tôi ('người quản lý tích hợp') kết hợp những cam kết sạch đó vào nhánh phát triển chung.

Tôi đoán phương pháp này có nghĩa là repo may mắn sẽ không có bất kỳ chi nhánh nào khác ngoài the master and develop branch. Các chi nhánh tính năng sẽ chỉ tồn tại trong kho lưu trữ cục bộ của bạn - nếu việc cộng tác trên nhánh là cần thiết, điều này có thể xảy ra bằng cách đẩy chi nhánh đến kho lưu trữ từ xa của một trong các nhân viên cộng tác.

Tuy nhiên, Pro Git book mô tả đây là quy trình làm việc cho "công khai dự án nhỏ". Điều này có nghĩa là nó tốt hơn để sử dụng một quy trình làm việc khác trong trường hợp của chúng ta, như đẩy các nhánh đã hoàn thành vào repo may mắn thay vì đến một kho lưu trữ cá nhân?

Để rõ ràng: Tôi không ra ngoài để thêm sự phức tạp hoặc chi phí không cần thiết. Mục tiêu của tôi là thiết lập quy trình làm việc nơi tôi và đồng nghiệp của tôi có thể hoạt động không đồng bộ, tôi có thể xem lại công việc của họ khi hoàn thành và trả lại nhận xét hoặc hợp nhất vào cơ sở mã nếu tất cả đều tốt.


Sửa: ràng là câu hỏi không rõ ràng, vì vậy tôi sẽ cố gắng tóm tắt nó:

Nên có một bất lợi trong việc có đồng nghiệp của tôi đẩy chi nhánh trực tiếp đến kho may mắn của chúng tôi (ví dụ như nó sẽ 'gây ô nhiễm' lịch sử của nó theo một cách nào đó)?

+0

Ông có thể nói lại câu hỏi của bạn một chút? Nó quá phức tạp. Xác định quy trình làm việc "tốt hơn". Nó luôn luôn là một thương mại. – ralphtheninja

+0

@MagnusSkog thực hiện – Rijk

Trả lời

0

Một vài disadvatages:

Các repo may mắn sẽ khá nhanh chóng (tùy thuộc vào có bao nhiêu nhà phát triển và các tính năng) được lộn xộn với nhiều chi nhánh. Nó sạch sẽ hơn nếu nó chỉ chứa e.g. master và phát triển, hơn master, development, featureA, featureB, featureC .. vv Tuy nhiên bạn luôn có thể dọn dẹp repo bằng cách xóa chúng trên remote (git push origin: featureA) nhưng nó bổ sung thêm công việc dọn dẹp.

Ngoài ra, khi mọi người tìm nạp từ repo may mắn của họ sẽ chứa các tham chiếu từ xa đến tất cả các nhánh đó và khi bạn xóa các nhánh từ xa, họ sẽ phải "git remote prune origin" để bật các tài liệu tham khảo không còn hợp lệ nữa, điều này cũng bổ sung thêm công việc.

+0

Cảm ơn bạn, điều này xóa nó lên. :) Vì vậy, để đảo ngược câu hỏi: những bất lợi của một thiết lập mà tôi đã mô tả (mỗi dev kho lưu trữ từ xa của chính nó) là gì? Bằng cách nào đó tôi có cảm giác điều này có thể gây ra vấn đề, bởi vì chúng tôi đang đẩy mạnh các mục tiêu khác nhau. Điều này bằng cách nào đó sẽ làm cho nó cồng kềnh hơn để họ có thể đồng bộ với dây chuyền phát triển chính không? – Rijk

+0

Dự phòng nhiều hơn :) – ralphtheninja

+0

Có một giải pháp có nghĩa là vàng tôi đang thiếu? – Rijk

0

Tôi không thấy lý do tại sao quy trình làm việc này không hiệu quả với bạn: sự nhấn mạnh về công chúng có thể là vì một dự án công cộng, điều quan trọng hơn là duy trì lịch sử không thay đổi.

+0

Nhưng sẽ có các chi nhánh tính năng trong repo may mắn có bất kỳ tác động tiêu cực đến lịch sử của ngành phát triển (miễn là chúng được làm sạch trước khi hợp nhất)? – Rijk

1

Tôi tin rằng Gitolite 's "personal" branches có thể phù hợp với nhu cầu của bạn rất tốt. Nó giống như có một khu vực cá nhân (a.k.a.không gian tên) nơi mỗi nhà phát triển có thể (thậm chí buộc) đẩy. Ngược lại, master chỉ đọc cho tất cả nhà phát triển nhưng là một nhà tích hợp.

Nếu Alice .git/config chứa các cấu hình sau:

[remote "origin"] 
     url = [email protected]:project 
     push = +refs/heads/*:refs/heads/personal/alice/* 
     fetch = +refs/heads/master:refs/remotes/origin/master 
     fetch = refs/heads/personal/alice/*:refs/remotes/origin/me/* 
     fetch = +refs/heads/personal/bob/*:refs/remotes/origin/bob/* 

sau đó Alice sẽ thấy

  • chi nhánh của mình trên máy chủ như origin/me/branch, và
  • chi nhánh của Bob như origin/bob/branch.

Bằng cách này, Alice có thể:

  • làm việc trên các chi nhánh của mình và kéo/đẩy họ đến máy chủ
  • bắt đầu một chi nhánh mới tắt của master
  • bắt đầu một chi nhánh mới tắt của Bob chi nhánh
  • sao lưu công việc của mình bằng cách chỉ cần nhấn vào máy chủ.

Gitolite thể được cấu hình như vậy mà Alice không thể viết trên không gian cá nhân của Bob và ngược lại:

@users = alice bob 
@integrators = john 
@repos = repo1 repo2 

repo @repos 
    RW+       = @integrators 
    RW+  personal/USER/  = @users 
Các vấn đề liên quan