2009-03-16 5 views
7

Tôi có hai repo git nhỏ. Các dự án đều bắt đầu từ các điểm khác nhau nhưng hội tụ thành một điểm rất giống nhau (cùng tên tệp, cấu trúc thư mục, v.v.). Người ta không phải là nhánh của người kia, nhưng người ta có thể được coi là sự tiến hóa của người kia.Có thể gộp hai repo git có cấu trúc giống nhau khi chúng chưa bao giờ có bất kỳ lịch sử chung nào không?

Sẽ rất tuyệt nếu tôi có thể hợp nhất hai để repo2 là sự tiếp tục của repo1. Điều này có thể, trong khi thêm lịch sử của repo2 vào cuối repo1 's?

Trả lời

7

Bạn có thể fetch one into another:

$ cd project1 
$ git config remote.project2.url /path/to/project2 
$ git config remote.project2.fetch 'refs/heads/*:refs/project2/*' 
$ git fetch project 

Điều đó sẽ cung cấp cho bạn hai (hoặc nhiều hơn) chi nhánh, chứa lịch sử của project1 và project2. Họ vẫn hoàn toàn độc lập, chỉ cần sử dụng cùng một cửa hàng đối tượng.

Sau đó (không kiểm tra), bạn có thể sử dụng một tập tin ghép (.git/info/grafts), nơi bạn có thể ghi đè lên làm cha mẹ của một cam kết (như là người đầu tiên của project2 có cho cha mẹ mới nhất của project1)

Như Dustin nói trong các ý kiến, một rebase là theo thứ tự để "làm cho nó vĩnh viễn", bằng cách phát lại project2 cam kết vào project1.


Bạn có một minh họa khác trong mục nhập blog "Using Git within a project (forking around)" này, đặc biệt là phần "Cách lôi kéo bạn bè và ảnh hưởng đến mọi người". Một lần nữa:

git checkout two_point_ooh 
git remote add strelau git://gitorious.org/ruby-on-rails-tmbundle/mainline.git 
git checkout -b strelau/two_point_ooh 
git pull strelau two_point_ooh 

là một quá trình tương tự, nhưng đối với kho được chia hai (mà không phải là chính xác trường hợp của bạn)

+0

Lưu ý rằng bạn nên rebase sau khi ghép để loại làm cho nó "vĩnh viễn." – Dustin