Duy trì git repo bên trong git repo khác


125

Đây là những gì tôi muốn:

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles

Tôi muốn có thể đẩy tất cả nội dung của REPO-A sang REMOTE-A và chỉ REPO-B thành REMOTE-B.

Khả thi?

Câu trả lời:


104

Có vẻ như bạn muốn sử dụng mô-đun con Git .

Git giải quyết vấn đề này bằng cách sử dụng mô-đun con. Các mô-đun con cho phép bạn giữ một kho lưu trữ Git như một thư mục con của một kho lưu trữ Git khác. Điều này cho phép bạn sao chép một kho lưu trữ khác vào dự án của mình và giữ các cam kết của bạn riêng biệt.


19
Không chính xác: nó sẽ không đẩy tất cả nội dung của repoA: chỉ có A cộng với tham chiếu đến B. Nhưng tôi không chỉ trích câu trả lời của bạn, tôi đã vội vàng viết khá nhiều khi tôi đọc lại câu hỏi của OP;)
VonC

1
Đây là trường hợp sử dụng khá nhiều cho các mô-đun con. REPO-A và REPO-B được coi là Repos git theo đúng nghĩa của riêng mình, với cam kết riêng, nguồn gốc, lịch sử của họ, vv
Damien Wilson

2
vì vậy nếu tôi đang đọc quyền đó, tôi có thể kiểm tra độc lập repo submodule-d hoàn toàn bên ngoài repo mà tôi tìm thấy không? Làm cách nào để lấy một repo đã tồn tại và tham chiếu nó như một mô-đun con trong một dự án khác?
JohnO

tôi đã không tìm kiếm giải pháp chính xác giống như OP và tôi nghĩ về trung bình, đây có lẽ là câu trả lời được tìm kiếm nhiều hơn cho một câu hỏi tương tự: "việc đặt git REPO-B trong git REPO-A có nhúng tham chiếu hay bản sao đầy đủ không của git REPO-B? ”.
jaya

64

Tôi đã luôn sử dụng các liên kết tượng trưng để duy trì hai đại diện riêng biệt và riêng biệt.


8
đối với mô-đun con git và cây con git có vẻ khó hiểu như thế nào, đây là một câu trả lời hợp lệ.
Trevor Hickey

Đây cũng là rất hữu ích cho lắp ráp một ứng dụng từ các kho dữ liệu từ xa
GeraldScott

22
Để duy trì hai repo riêng biệt và riêng biệt, sẽ không ổn nếu giữ repo B trong repo A và chỉ thêm repo B vào repo A .gitignore?
Fabien Snauwaert

1
Tôi đang nghĩ đến việc làm những gì Fabien gợi ý, có vấn đề gì khi làm theo cách đó không?
theonlygusti

1
Tôi giữ các kho lưu trữ git riêng biệt và sao chép các thay đổi được thực hiện đối với REPO-B trong một bản sao của REPO-B (không có .git) được lồng trong REPO-A. Tôi làm điều đó với rsync. Tôi chạy rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/sau khi có bất kỳ thay đổi nào đối với REPO-B
Shai

29

Có, bạn có thể làm chính xác những gì bạn đang yêu cầu với cấu trúc phân cấp tệp bạn đã vẽ. Repo-B sẽ độc lập và không có kiến ​​thức về Repo-A. Repo-A sẽ theo dõi tất cả các thay đổi trong các tệp của chính nó và các tệp của Repo-B.

Tuy nhiên, tôi không khuyên bạn nên làm điều này. Mỗi khi bạn thay đổi tệp và cam kết trong Repo-B, bạn sẽ phải cam kết trong Repo-A. Việc phân nhánh trong Repo-B sẽ gây rối với Repo-A và việc phân nhánh trong Repo-A sẽ rất khó khăn (sự cố khi xóa các thư mục, v.v.). Mô-đun con chắc chắn là con đường để đi.


53
Bạn không thể chỉ cần thêm REPO-B vào /REPO-A/.gitignore?
mikkelbreum

2
@mikkelbreum Tôi cũng có cùng một ý kiến. Chúng tôi hiện đang sử dụng subverion cho dự án chính của mình và sử dụng git repo trong một trong các thư mục con. Với SVN, tôi vừa thêm thư mục có repo git vào thuộc tính svn: ignore và tôi đã tự hỏi mình liệu tôi có thể làm điều tương tự với git hay không.
2ndkauboy

3
Tôi không hiểu tại sao việc thêm một repo git lồng nhau vào danh sách bỏ qua của repo mẹ lại không hoạt động. hiếm khi được đề xuất và nhiều người không khuyến khích các git repos lồng nhau.
mikkelbreum

18
Tôi chỉ thực hiện kịch bản chính xác này. Tôi có một số tệp CSS chưa được nén trong một thư mục con mà tôi không muốn đẩy vào kho lưu trữ từ xa, vì vậy nó nằm trong .gitignore của tôi. Nhưng tôi muốn theo dõi các thay đổi đối với các tệp này cục bộ. Tôi thiết lập một repo bên trong thư mục với các tệp không nén và thêm tất cả các tệp vào repo đó. Nó vẫn bị repo mẹ bỏ qua nhưng tôi có thể theo dõi những thay đổi bên trong repo con. Được khuyến nghị hay không, giải pháp này là chìa khóa cho một số tình huống như thế này.
BrianVPS

1
Tôi hiểu rằng bất cứ khi nào bạn chuyển đổi các nhánh trong một kho lưu trữ khác sẽ thấy toàn bộ các thay đổi, nhưng tại sao "phân nhánh trong Kho lưu trữ-A sẽ khó khăn (sự cố khi xóa các thư mục, v.v.)?" Cám ơn!
user2688151

2

Bạn có thể đạt được những gì bạn muốn (repo REPO-A đó chứa tất cả các tệp, bao gồm cả những tệp trong thư mục REPO-B thay vì chỉ tham chiếu) bằng cách sử dụng "git-subrepo":

https://github.com/ingydotnet/git-subrepo

Nó vẫn hoạt động nếu một số cộng tác viên của bạn không cài đặt lệnh subrepo; họ sẽ thấy cấu trúc thư mục hoàn chỉnh nhưng sẽ không thể thực hiện các thay đổi đối với các bản kê khai con.

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.