2012-04-27 10 views
6

Tôi có một repo Git cũ, gọi nó là app. Sau đó, sau một năm, tôi muốn xây dựng lại ứng dụng từ đầu, vì vậy tôi đã tạo một repo mới, gọi nó là app-2.Kết hợp lịch sử của hai kho Git?

Bây giờ, tôi nhận ra tôi nên vừa làm một chi nhánh mới hoặc một cái gì đó, thay vì một repo mới, bởi vì tôi muốn chuyển lịch sử của app-2 trên đầu trang của app và sau đó thoát khỏi app-2 để app hiện có toàn bộ lịch sử của app + app-2.

Điều này có thể thực hiện được không?

UPDATE:

tôi đã cố gắng "Reseting" các app repo bằng cách loại bỏ tất cả các file trong app (trừ thư mục .git) và thực hiện một cam kết. Sau đó:

cd ~/Projects/app-2 
git format-patch --stdout --root master > ../app/app-2-patches.txt 
cd ../app 
git am app-2-patches.txt 

Nhưng, tôi nhận được xung đột ở những nơi tôi có chi nhánh ở số app-2.

Có thể áp dụng các cam kết từ app-2 trong khi vẫn giữ cấu trúc chi nhánh của lịch sử app-2 không?

+0

Có lý do nào bạn cần chúng trong cùng một kho lưu trữ không? Và nếu vậy, có lý do nào họ phải ở trong cùng một chi nhánh không? Tại sao không chỉ có một chi nhánh riêng biệt để lưu trữ lịch sử của phiên bản cũ, và sau đó chỉ cần làm cho ứng dụng mới hiện tại của bạn trở thành nhánh chính như thế nào? – Amber

Trả lời

2

Bạn có thể sử dụng điểm ghép của git cho việc này. Trước tiên hãy kéo lịch sử của app vào app-2 từ điều khiển từ xa, sau đó thực hiện theo các hướng dẫn, ví dụ: trong this answer.

+0

Cụ thể: Bạn có thể sử dụng 'git filter-branch' để biến lịch sử ghép thành lịch sử" thực ", sau đó thoát khỏi điểm ghép. Hãy nhớ rằng điều này sẽ thay đổi tất cả các id cam kết của bạn! – duskwuff

0

Bước một là lấy hai ứng dụng trong một repo; bước hai là hợp nhất chúng theo một cách hợp lý nào đó.

Đối với bước một tôi muốn nói push tất cả các chi nhánh kho trong app-2 cho các chi nhánh trong kho ứng dụng:

$ cd /path/to/app-2 
$ git remote add app-repo /path/to/app 
$ git push app-repo master:app-2-master  # master in app-2 goes to app-2-master in app repo 
# repeat for other branches in app-2 

Bây giờ hơn trong kho ứng dụng bạn có tất cả các chi nhánh và tất cả các ứng dụng -2 chi nhánh. Giả sử bạn (muốn) xem xét app-2 có nguồn gốc từ ứng dụng. Sau đó, bạn hoàn lại tất cả ứng dụng-2 trên ứng dụng với:

$ cd /path/to/app 
$ git checkout app-2-master 
$ git rebase master 

điều này có thể cần nhiều công việc để giải quyết xung đột nhưng git cũng sẽ thực hiện nhiều công việc cho bạn.

+1

nit: 'git add remote' phải là' git remote add' –