2011-07-06 8 views
5

Chúng tôi đang di chuyển sang git. Chúng tôi có một số lượng lớn các mô-đun tạo nên các sản phẩm của chúng tôi, một số sản phẩm được chia sẻ giữa các sản phẩm. Sản phẩm được đại diện bởi một siêu kho "mỏng" (ssh: //server/product.git) mà chỉ chứa submodules:Làm thế nào để làm việc với các mô-đun con và các chiến lược kho lưu trữ n-tiers git

[submodule "module1"] 
path=module1 
url=ssh://server/product/module1.git 
[submodule "module2"] 
path=module2 
url=ssh://server/product/module2.git 
... 

tôi có thể clone kho siêu và làm việc với các môđun con và cam kết họ, và sau đó cam kết các mô-đun con đến kho lưu trữ siêu.

Sự cố xảy ra khi tôi muốn giới thiệu một cấp khác. Có hai kịch bản cơ bản (điều này có thể kết hợp để làm cho các thiết lập phức tạp hơn, nhưng bất cứ điều gì phải là một sự kết hợp của những):

  1. Là một nhà phát triển, tôi sao chép một kho lưu trữ trung ương và làm việc. Sau đó, tôi muốn gửi mã của mình đến máy chủ tích hợp liên tục của chúng tôi trước khi hợp nhất các thay đổi của tôi với kho lưu trữ trung tâm. Tôi để máy chủ CI sao chép repo của tôi. Điều này không làm việc, máy chủ CI sẽ sao chép siêu repo của tôi và sau đó nó sẽ sao chép các mô-đun con từ vị trí kho trung tâm (vì đó là những gì nó nói trong .gitmodules).

  2. Là một nhóm chúng tôi muốn có một kho lưu trữ tích hợp mà chúng tôi làm việc trước khi chúng tôi, vào cuối một lần chạy nước rút, nhập mã của chúng tôi vào kho lưu trữ trung tâm. Điều này không thành công, vì lý do tương tự.

Tôi đã cố chỉ định URL tương đối cho các mô-đun con, nhưng điều này không có tác dụng, vì khi chúng tôi sao chép tầng thứ hai vào tầng thứ ba, các URL tương đối giải quyết liên quan đến vị trí lưu trữ tầng thứ hai. các vị trí submodule bậc hai nằm bên trong kho lưu trữ siêu tầng thứ hai.

Tôi có thể có cả hai? Git submodules và cấu trúc kho lưu trữ n-tier?

+0

Xem giải pháp tại đây: http://stackoverflow.com/questions/6031494/git-submodules-and-ssh-access – Cybot

Trả lời

0

liên kết tương đối không hoạt động trong mô-đun con. Sử dụng gitolite để chứa tất cả các kho lưu trữ của bạn. Cấu trúc của bạn sẽ hoạt động sau đó.

Các url khác cũng gặp sự cố. Ví dụ sẽ là một url như ..\someotherrepo hoặc \\servername\reponame hoặc thậm chí file:///\\server\... được cung cấp cho một mô-đun con.

+0

Tôi đọc tổng quan ngắn về gitolite, nhưng tôi không thấy cách giải quyết trường hợp sử dụng của mình. Nó xử lý xác thực và ủy quyền cho bạn, nhưng tôi không có vấn đề _that_. Một ví dụ đơn giản hoặc con trỏ đến tài liệu có liên quan sẽ giúp ích. – simon

+0

Gitolite sẽ chăm sóc các công cụ ssh cộng với cung cấp cho bạn các url thân thiện với git. Gitolite chạy trên một máy chủ ubuntu ubuntu nhỏ đã thực hiện tải cho vấn đề này và các vấn đề khác. Các url trở thành 'gitolite @ gitserver: somerepo.git' và tôi không có vấn đề gì với submodules và dạng URL đó. Đó là những gì giải quyết vấn đề tương tự cho tôi vì vậy tôi đề nghị nó ở đây. Tôi đoán bạn có thể chờ xem các câu trả lời khác xuất hiện hay nhảy lên kênh #git irc? –

0

Nếu tôi hiểu chính xác, bạn muốn có các mô-đun con nhỏ trong các mô-đun con khác và có thể kiểm tra kho lưu trữ cấp cao nhất và có tất cả các lớp con của các lớp con lồng nhau được kiểm tra chính xác không?

Tôi chưa bao giờ tự làm điều này, nhưng bạn có thể tìm thấy Git submodule inside of a submodule (nested submodules) một bài đọc hay.

+0

Không hoàn toàn. Tôi muốn để có thể sao chép bản sao và nhận được tất cả các mô-đun con nhân bản chính xác quá. – simon