2012-04-27 11 views
6

Mam stare repozytorium Git, nazwij je app. Potem, po roku, chciałem przebudować aplikację od zera, więc zrobiłem nowe repozytorium, nazywając to app-2.Czy można połączyć historię dwóch repozytoriów Git?

Teraz zdaję sobie sprawę, że powinien właśnie zrobiony nowy oddział lub coś, zamiast nowego repo, ponieważ chcę, aby przenieść historię app-2 na szczycie app a następnie pozbyć app-2 tak że app ma teraz cała historia app + app-2.

Czy można to zrobić?

UPDATE:

Próbowałem "resetowanie" na app repo poprzez usunięcie wszystkich plików w app (z wyjątkiem katalogu .git) i dokonywania popełnić. Następnie:

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

Ale mam konfliktów w miejscach, gdzie miałem oddziały w app-2.

Czy można zastosować zatwierdzenia z app-2 przy zachowaniu struktury oddziału historii app-2?

+0

Czy jest jakiś powód, dla którego są one potrzebne do tego samego repo? A jeśli tak, czy istnieje powód, dla którego muszą być w tej samej gałęzi? Dlaczego po prostu nie ma oddzielnej gałęzi do przechowywania historii starej wersji, a następnie po prostu spraw, aby bieżąca nowa aplikacja była odgałęzieniem głównym? – Amber

Odpowiedz

2

Możesz użyć do tego punktów przeszczepu git. Najpierw pobierz historię app do app-2 z pilota, a następnie postępuj zgodnie z instrukcjami, np. w this answer.

+0

W szczególności: Możesz użyć 'git filter-branch', aby przekształcić przeszczepioną historię w" prawdziwą "historię, a następnie pozbyć się punktu przeszczepu. Pamiętaj, że to zmieni wszystkie twoje identyfikatory commitów! – duskwuff

0

Pierwszym krokiem jest uzyskanie dwóch aplikacji w jednym repo; krok drugi łączy je w jakiś rozsądny sposób.

Na etapie pierwszym Powiedziałbym Push wszystkich oddziałów w repozytorium aplikacji-2 do oddziałów w repozytorium aplikacji:

$ 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 

teraz nad w repozytorium aplikacji masz wszystkie swoje oddziały i całą aplikację -2 gałęzie. Powiedzmy, że (chcesz) rozważyć app-2, jak pochodzi z aplikacji. Potem zmieniają bazę wszystkich aplikacji na app-2 z:

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

ten może obejmować wiele pracy, aby rozwiązywać konflikty, ale git będzie robić mnóstwo pracy dla Ciebie.

+1

nit: 'git add remote' powinno być' git remote add' –