2012-04-26 25 views
8

Vì vậy, tôi có hai repo git. Đầu tiên là khung công tác của chúng tôi (nghĩ rằng trừu tượng hóa db, các hàm) và sau đó là một repo git khác cho dự án mới của chúng ta.Cách tổ chức kho git; tìm nạp và hợp nhất

tôi muốn bao gồm các repo khuôn khổ git vào git dự án, và theo GitHub Trợ giúp, điều này sẽ làm việc:

cd /project 
git remote add framework git://github.com/username/Framework.git 
git fetch framework 
git merge framework/master 

Vấn đề là, khi tôi làm việc hợp nhất, nó mang lại cho tất cả mọi thứ tất cả các file từ khuôn khổ và chỉ đơn giản là đổ chúng vào thư mục gốc của dự án. Thay vào đó, làm thế nào chúng ta có thể có các tệp khuôn khổ được hợp nhất thành một thư mục con như /project/framework/?

Trả lời

20

Bạn có thể muốn xem xét hỗ trợ submodule của Git. Một submodule cho phép bạn nhúng một kho git bên trong một kho git khác. Có alternative solutions cho loại điều này, nhưng tôi đã không sử dụng chúng bản thân mình.

Một ví dụ có thể trông như thế này:

$ git clone git://github.com/username/project.git 
$ cd project 
$ git submodule add git://github.com/username/framework.git framework 
$ git commit -m "added framework submodule" 

Nếu bạn đang nhân bản một kho lưu trữ với các môđun con, bạn cần phải sử dụng --recursive tùy chọn:

$ git clone --recursive git://<repository-with-submodules>.git 

Hoặc cách khác, bạn có thể sao chép thường xuyên và sau đó chạy:

$ git submodule init 
$ git submodule update 

Đọc tài liệu được liên kết (và)) để biết thêm thông tin.

Nếu thay đổi được thực hiện cho các submodule, bạn mang lại cho họ trong như thế này:

# first update the submodule just like any other git repository 
$ cd project/framework 
$ git pull 

# now you have to record the new commit in the parent repository 
$ cd .. 
$ git commit -m "updated framework submodule" 

Bước cuối cùng là cần thiết vì git giữ một kỷ lục của cụ cam kết liên kết với một submodule nhất định (để khi bất cứ ai nhái cha mẹ họ sẽ nhận được phiên bản của mô-đun con, thay vì bản sửa đổi cập nhật nhất của nó, có thể đã trải qua các thay đổi phá vỡ sẽ ngăn nó hoạt động như dự định với kho lưu trữ gốc). Vì vậy, nếu bạn cập nhật submodule, bạn cần phải ghi lại các cam kết mới trong phụ huynh.

Nếu bạn thực hiện thay đổi trong mô-đun phụ framework, bạn sẽ chỉ cần git push chúng giống như bạn làm với bất kỳ kho lưu trữ nào khác. Sau đó bạn sẽ phải cam kết sửa đổi mới trong mô-đun chính.

+0

Tuyệt vời, vì vậy khi thay đổi được thực hiện cho Framework, làm thế nào để tôi đưa chúng vào dự án ngay bây giờ là một mô-đun của nó? Ngoài ra, nếu tôi thực hiện thay đổi cho Framework thay vì dự án, làm thế nào để đẩy những người đó trở lại vào khung git repo? – Justin

+0

Tôi đã cập nhật câu trả lời của mình. – larsks

+0

Một lưu ý nhỏ. HEAD submodule được tách ra, do đó bạn cần phải cẩn thận khi thực hiện các thay đổi trong mô-đun con. Tạo một nhánh (hoặc chuyển sang nhánh), thực hiện các thay đổi, cam kết và sau đó đẩy. – GoZoner

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