2009-04-24 17 views
28

Gần đây tôi đã bắt đầu tham gia vào Git trên một dự án cá nhân và tôi có thể thấy DVCS có thể mang lại lợi ích cho chúng tôi như thế nào (công ty phần mềm doanh nghiệp lớn hiện đang chạy Perforce). Tính năng công việc trong nhóm của tôi, ví dụ chủ yếu bao gồm các nhà phát triển tạo ra các chi nhánh của riêng họ; đôi khi chúng được chia sẻ giữa các nhóm nhỏ các nhà phát triển. Tôi nghĩ rằng nó sẽ hiệu quả hơn trong trường hợp này để sử dụng DVCS.DVCS được sử dụng trong các đội lớn như thế nào?

Trong trường hợp tổng quát hơn, tuy nhiên, tôi muốn được nghe từ những người sử dụng DVCS tại nơi làm việc, trong các nhóm trung bình đến lớn.

  1. Làm thế nào để bạn đối phó với hợp nhất N-cách? Đây có phải là một tình huống phổ biến không? Mercurial chỉ hỗ trợ hợp nhất N-way bằng cách thực hiện (N-1) hợp nhất 2 chiều (và read rằng đây là giải pháp ưu tiên trong DVCS khác), nghe giống như một quá trình rất mất thời gian cho cả tương đối nhỏ N.
  2. sử dụng một kho lưu trữ có thẩm quyền trung tâm duy nhất, hay nó thực sự là P2P?
  3. Các nhà phát triển có thường xuyên đẩy và kéo mã vào và ra khỏi nhau hay thực hiện mọi thứ qua kho lưu trữ trung tâm?
+0

Tôi hy vọng nó không nhanh chóng, tôi nghĩ đó là một câu hỏi thực sự hay.Thật không may là tôi không đủ điều kiện để trả lời - tôi chỉ sử dụng git trên các dự án cá nhân, vì công việc khá đằng sau thời gian, vẫn sử dụng CVS cho một số dự án và svn cho những dự án khác. Đối với hầu hết các phần, có vẻ như những người sử dụng svn nghĩ rằng họ là "hiện đại". :-) – Benson

+4

Tôi nghĩ bạn sẽ tìm thấy rất nhiều nơi làm việc (như tôi), nơi câu trả lời thực sự cho câu hỏi này là "riêng tư" hoặc "không có kiến ​​thức về phần còn lại của nhóm". –

+0

Thật không may có vẻ như câu trả lời tốt nhất là thực sự cho một nhóm nhỏ. Có ai làm việc này với các đội trong thập niên 50 - 100+ không? –

Trả lời

13

Nhóm của tôi tại nhà tuyển dụng trước đây của tôi đã sử dụng Git và nó hoạt động tốt cho chúng tôi. Chúng tôi không phải là tất cả những gì lớn (có thể 16 hoặc hơn, với 8 ủy ban hoạt động thực sự?), Nhưng tôi có câu trả lời cho các câu hỏi của bạn:

  1. N-cách sáp nhập không quá phổ biến. Chúng tôi đã đưa ra một số quy ước về đặt tên chi nhánh cho phép chúng tôi viết kịch bản làm giảm quy trình "phát hành kỹ thuật" (tôi sử dụng dấu ngoặc kép vì chúng tôi không có kỹ sư phát hành) và mọi người sẽ tạo các chi nhánh riêng, nhưng chúng tôi hiếm khi có vấn đề với việc hợp nhất nhiều hơn hai nhánh (xem phần tiếp theo).
  2. (và # 3).Chúng tôi đã có kho lưu trữ trung tâm trên một máy chủ phát triển vì ba lý do: (a) Máy phát triển có RAID5 (khả năng chịu lỗi nhiều hơn) và sao lưu hàng đêm (máy trạm không phải là ban đêm), (b) bản phát hành sản xuất được xây dựng trên máy chủ phát triển, và (c) có một kịch bản lưu trữ tập trung đơn giản hóa. Kết quả là, sự kết hợp N-way đơn giản chưa bao giờ xảy ra. Điều gần nhất mà chúng tôi đã có đối với N-way là khi một người nào đó sáp nhập vào nhau và sau đó sáp nhập theo chiều dọc.

Git là một điều thực sự tuyệt vời đối với chúng tôi vì tính linh hoạt cao; tuy nhiên, chúng tôi đã phải thiết lập một số quy ước (tên chi nhánh và thẻ, vị trí repo, tập lệnh, v.v.) hoặc có thể hơi hỗn loạn. Khi chúng tôi đã thiết lập các quy ước, tính linh hoạt mà chúng tôi có chỉ là tuyệt vời.

Cập nhật: ước của chúng tôi về cơ bản là như sau:

  • một thư mục trên máy chủ NFS của chúng tôi là nơi ở của tất cả các kho trung tâm
  • chúng tôi đã có một số dự án thành phần chia sẻ, vì vậy chúng tôi đã phá vỡ chúng ra vào thư viện, về cơ bản, với các kho lưu trữ của riêng họ và các dự án có thể phân phối chỉ bao gồm chúng dưới dạng các mô đun con git.
  • đã có chuỗi phiên bản và phát hành tên đối với chúng ta từ trên cao, vì vậy chúng tôi chỉ sử dụng một biến thể của những người như tên chi nhánh
  • tương tự, cho thẻ, họ theo tên phát hành quá trình quyết
  • các dự án chuyển giao chứa một tệp thuộc tính mà tôi đọc vào các kịch bản lệnh shell và cho phép tôi viết một kịch bản lệnh duy nhất để quản lý quá trình phát hành cho tất cả các dự án, mặc dù mỗi người có các biến thể nhỏ trên quy trình - các biến thể được tính trong các tệp thuộc tính đó
  • Tôi đã viết tập lệnh có thể tạo lại gói có thể phân phối từ bất kỳ thẻ nào
  • bằng git al hạ thấp chúng tôi để kiểm soát quyền truy cập bằng PAM và/hoặc quyền người dùng thông thường (ssh, v.v.)
  • Có các quy ước khác khó đưa vào danh sách có dấu đầu dòng, như khi việc hợp nhất xảy ra. Thực sự, tôi và một người khác là loại "gitus" trong nhà, và chúng tôi đã giúp mọi người tìm ra cách sử dụng các nhánh và khi nào để hợp nhất.
  • khiến mọi người tham gia vào các đoạn nhỏ và không thả bom khác trong nhánh chính là một thách thức. Một anh chàng đã mất khoảng hai tuần làm việc vững chắc trong một lần cam kết, và cuối cùng chúng tôi phải làm sáng tỏ tất cả. A to phí thời gian và bực bội cho tất cả mọi người.
  • bình luận thông tin và chi tiết để đi với cam kết

Có những thứ khác mà bạn học được khi đội của bạn được trải nghiệm và học cách làm việc với nhau, nhưng điều này đã đủ để chúng ta bắt đầu.

Cập nhật: bất kỳ ai theo dõi những điều như vậy bây giờ đã biết về điều đó, nhưng Vincent Dreissen đã viết một bản vững chắc và khá toàn diện (nhưng không exaustive) take on branching and release engineering using Git. Tôi rất muốn khuyến khích sử dụng quy trình của mình như là một điểm khởi đầu bởi vì đối với hai lý do:

  • rất nhiều đội làm theo cách này hoặc đang sử dụng một số biến thể gần (bao gồm cả Linux, Git, và nhiều nhóm dự án OSS khác), trong đó có nghĩa là phương pháp này đã được thử nghiệm và tinh chỉnh để thành công trong hầu hết các trường hợp. Bạn rất khó có thể đối mặt với một vấn đề chưa được đối mặt và giải quyết trong các ràng buộc của mô hình này.
  • vì đã nói ở trên, hầu như bất kỳ kỹ sư nào có trải nghiệm Git đều sẽ hiểu những gì đang diễn ra. Bạn sẽ không phải viết tài liệu chi tiết về bản chất cơ bản của quá trình phát hành của bạn; bạn sẽ chỉ phải ghi lại những điều cụ thể chỉ cho dự án hoặc nhóm của bạn.
+0

Tôi sẽ chào đón thêm thông tin về các công ước và ví dụ về sự linh hoạt của bạn. –

+0

Tôi cũng vậy :-) Tôi đã ở giữa một bình luận thực sự waffly trước khi @Norman đến với cái đó! – alastairs

+0

Vâng, một cách mà Git mang đến cho bạn rất nhiều sự linh hoạt là nó có hàng chục chương trình thay vì chỉ một chương trình lớn. Điều đó nghe có vẻ lộn xộn, nhưng nó là, nhưng điều đó cho phép bạn viết một số kịch bản thực sự mạnh mẽ bằng cách đầu ra đường ống từ một lệnh vào một lệnh khác. Nó khá nhiều cho phép POSIX sh là ngôn ngữ mở rộng của Git. Nếu bạn thành thạo với kịch bản lệnh shell, đó là một điều rất, rất mạnh mẽ. Bây giờ, vào năm 2013, Git có nhiều nguyên khối hơn, nhưng giao diện của nó vẫn rất dễ đọc, và bao gồm cả Windows. PowerShell cũng làm cho một ngôn ngữ mở rộng rất tốt đẹp. –

1

Dưới đây là một ví dụ (bởi không có nghĩa là một "phổ quát" một)

Chúng tôi đã VCS trung ương (ClearCase hoặc Subversion, tùy thuộc vào các dự án khác nhau), và chúng tôi đang sử dụng chúng cho sự phát triển "chính thức" nỗ lực (dev, bản vá lỗi, bản sửa lỗi), nơi số lượng chi nhánh bị hạn chế và được xác định rõ.

Tuy nhiên, để phát triển tái cấu trúc liên quan đến nhiều trạng thái trung gian, không có gì hoạt động và nhiều nhà phát triển cần có chi nhánh hoạt động của riêng mình hoặc chi nhánh , một số kho Git được thiết lập giữa các nhà phát triển đó Cách P2P.
Một khi công việc đạt được một số loại 0,1 ổn định, và sáp nhập được giảm, nó được tái nhập khẩu trong VCS, nơi công việc có thể đi vào trong một "trật tự" thời trang trung tâm.

Kể từ Git on Windows works well (MSysGit), chúng tôi quản lý để có những phát triển ban đầu nhỏ được thực hiện nhanh chóng theo cách đó.

Chúng tôi vẫn đang đánh giá Git để phát triển dự án có quy mô đầy đủ.

+1

Tôi đã tìm thấy sự hỗ trợ Windows cho Git khá nghèo nàn, IMO. MSysGit dường như cung cấp một cơ sở tốt, nhưng thực tế tất cả được xây dựng trên MinGW (và về mặt lịch sử đã được chạy trong CygWin) là một chút sucky. TortoiseGit (http://code.google.com/p/tortoisegit/) giúp một chút công bằng, nhưng nó vẫn là phiên bản beta (có thể là alpha, thậm chí). – alastairs

+0

Chim trong gần ba năm sau đó để nói rằng MSysGit đã đi một chặng đường dài, và cho các nhà phát triển Visual Studio không có nhiều tốt hơn so với các plugin GitExtensions. –

+0

@Justin ᚅᚔᚈᚄᚒᚔ: Tôi đồng ý, như tôi đã nêu chi tiết trong http://stackoverflow.com/questions/1346031/is-perforce-worth-it/1346196#1346196 với bản cập nhật tháng 11 năm 2011 về câu trả lời của tôi từ năm 2009. – VonC

1

Có lẽ tốt nhất là hãy xem xét cách các nhà phát triển hạt nhân Linux hoạt động. Họ có một luồng công việc khá phức tạp, nơi các thay đổi được gửi từ nhiều nguồn, và sau đó các nhà phát triển đáng tin cậy cho mỗi subsytem (gọi là trung úy) kéo các thay đổi, và khi họ vui lòng gửi chúng cho Linus, người cuối cùng hoặc kéo chúng vào cây hoặc từ chối chúng. Tất nhiên nó phức tạp hơn thế, nhưng đó là tổng quan chung.

5

Tôi đã làm việc nhiều năm với nhóm Glasgow Haskell Compiler sử dụng Darcs. Gần đây tôi đã (vài tháng) bắt đầu sử dụng git cho bản sao repo của riêng tôi, cả về hiệu suất và cải thiện giáo dục của tôi.

  1. Làm thế nào để bạn đối phó với hợp nhất N-cách?

    Không có cách hợp nhất N-cách. Mỗi nhà phát triển bắt nguồn một luồng các bản vá và các luồng được hợp nhất từng lần một tại mỗi repo. Vì vậy, nếu nhà phát triển N thực hiện thay đổi cùng một lúc, họ sẽ được hợp nhất theo cặp.

  2. Bạn có sử dụng một kho lưu trữ có thẩm quyền trung tâm duy nhất không?

    Tuyệt đối. Đó là cách duy nhất để biết GHC là gì và những gì không phải là GHC.

  3. Các nhà phát triển có thường xuyên đẩy và kéo mã vào và ra khỏi nhau hay thực hiện mọi thứ qua kho lưu trữ trung tâm?

    Tôi nghĩ điều đó tùy thuộc vào nhà phát triển và VCS bạn đang sử dụng. Trên dự án GHC gần như tất cả các kéo và đẩy tôi thấy đi qua kho trung tâm. Nhưng có một gatekeeper nặng (self-quản lý) trên push to repo trung tâm, và nếu một đồng nghiệp có một sửa chữa lỗi tôi cần bây giờ, tôi sẽ kéo nó trực tiếp từ repo của mình. Với darcs, rất dễ dàng để kéo chỉ một miếng vá (chứ không phải toàn bộ trạng thái như trong git), và tôi biết rằng các đồng nghiệp của tôi, những người có nhiều kinh nghiệm hơn với darcs, sử dụng tính năng này nhiều hơn tôi --- và họ thích nó rất nhiều.

    Với git, khi tôi làm việc chặt chẽ với một nhà phát triển khác, tôi sẽ thường xuyên tạo chi nhánh mới chỉ nhằm mục đích chia sẻ nó với một người khác. Nhánh đó sẽ không bao giờ chạm vào repo trung tâm.

2

Các khá nổi tiếng "Tech Talk: Linus Torvalds trên git" giải thích cách nó được sử dụng cho Linux (khoảng lớn như đội như tôi có thể nghĩ đến)

Nếu tôi nhớ chính xác, đó là sử dụng được Giống như một chuỗi lệnh của quân đội - mỗi mô-đun có một người bảo trì, người xử lý các yêu cầu kéo từ các nhà phát triển, sau đó có một vài người "đáng tin cậy nhất" xử lý dữ liệu từ các nhà duy trì mô-đun vào kho lưu trữ kernel.org git chính thức.

"Linux: Managing the Kernel Source With 'git'" cũng giải thích nó, mặc dù một lần nữa nó hầu như không một lời giải thích ngắn gọn .. schema

7

Work-dòng chảy từ whygitisbetterthanx:

alt git work-flow with integration manager http://whygitisbetterthanx.com/images/workflow-b.png

Để mở rộng quy mô này lên đến thậm chí nhiều nhà phát triển, bạn chỉ cần thêm một lớp "người trung thành đáng tin cậy" khác giữa người quản lý tích hợp và nhà phát triển.

+0

Điều gì có thể "những người trung thành đáng tin cậy" dịch sang môi trường kinh doanh/độc quyền? Một tính năng dẫn đầu? Quản lý dự án? ;-) Tôi không chắc chắn rằng tôi thấy điều này làm việc tốt như vậy trong nhóm của tôi chẳng hạn, nơi chúng tôi có kho lưu trữ Perforce trung tâm mà mọi người đều có quyền truy cập. Nó có vẻ không hiệu quả (và không phải là rất phân phối ...) để làm cho một người duy nhất chịu trách nhiệm tích hợp vào kho chứa may mắn. – alastairs

+0

Điều khác về nhóm của chúng tôi là chúng tôi không có trách nhiệm rõ ràng về tính năng, như vậy. Chắc chắn, chúng tôi từng có chuyên môn của chúng tôi trên các lĩnh vực khác nhau, nhưng chúng tôi có thể di chuyển, làm việc trên các lĩnh vực khác nhau của sản phẩm cho các dự án khác nhau. Điều này có vẻ sẽ làm mất hiệu lực mô hình trình quản lý tích hợp/nhà độc tài cho chúng tôi. – alastairs

+0

Trong môi trường kinh doanh, có thể là một ý tưởng tốt hơn để chia nhỏ các dự án nếu chúng trở nên quá lớn đối với một trình quản lý tích hợp duy nhất. Nhưng đừng đánh giá quá cao công việc mà một người quản lý tích hợp phải làm: các nhà phát triển là những người đảm bảo rằng các thay đổi công khai của họ hợp nhất một cách sạch sẽ với HEAD của kho chứa may mắn. –

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