2015-02-18 18 views
5

Mam repozytorium Git Old, które chcę przenieść do podfolderu sub z istniejącego repozytorium Git New. Mam dwie gałęzie, master i feature, w ramach Old, które również chcę przekazać; Old\master powinien po prostu scalić się z New\master i powinien być nowy oddział w New o nazwie old-feature.Przenieś jedno repozytorium Git do podfolderu innego z oddziałami

Nie przejmuję się czystą historią; mój obecny proces polega na zrobieniu git mv w Old przed wykonaniem migracji, i to w porządku ze mną. Wolę unikać przepisywania historii, jeśli to możliwe.

Moje obecne kroki migracji są w następujący sposób (w New repo):

  • git remote add -f old ...
  • Utwórz nowe old-feature oddział z master.
  • Utwórz lokalny oddział feature z old/feature.
  • Połącz oddział feature ->old-feature.
  • Połącz oddział old/master ->master.
  • Naciśnij oba gałęzie.

Chociaż to działa, uważam, że później, jeśli mogę połączyć z old-feature do master, Git nie znajduje zrozumienia historii (mam na myśli moją historię zawiedli-up) i każdy plik jako konflikt scalania traktuje. Jak przeprowadzić prawidłową migrację z zachowaniem relacji między oddziałami?

+0

Co robisz z 'git mv' w' starym'? Na przykład. czy przenosisz wszystkie pliki i katalogi z 'Old' na' Old \ sub'? –

+1

Czy dwa repo mają jakieś wspólne zatwierdzenia, aby rozpocząć? –

+0

@ShaunLuttin: Tak, teraz przenoszę je do 'sub', gdy są jeszcze w' Old', a następnie przeprowadzają migrację. Dwa repozytoria nie mają ze sobą nic wspólnego. –

Odpowiedz

0

Chociaż należy to do długiego komentarza, a nie do odpowiedzi, chciałem pokazać wynik, który osiągnąłem, wykonując dwa oddzielne operacje repozytorium, dzięki czemu mogłem zapytać, w jaki sposób poniższy przykładowy raport jest niezadowalający. (Uwaga:. Miałem tylko jeden konflikt korespondencji seryjnej, który był dla pliku w obu repo README.md)

PowerShell

> cd Old 
> git commit --allow-empty -m "A commit from Old" 
> dir -Exclude sub | % { Move-Item $_ sub } 
> git add -A; git commit -m "Move all to sub" 
> cd ..\New 
> git remote add old -f <full-path-to-Old> 
> git checkout master 
> git checkout -b old-feature 
> git branch feature old/feature 
> git merge feature 
> git log --oneline --graph --all --decorate -20 

Log Wynik

* 4b636e7 (HEAD, master) Merge remote-tracking branch 'old/master' 
|\ 
| * 4aa5741 (old/master) Move all to sub 
| * 158c921 Commit from old/master. 
| * c258979 Commit from old/master. 
| * b00b001 Commit from old/master. 
| * b0b582b Commit from old/master. 
| * b6487e1 Commit from old/master. 
| * 15b676a Commit from old/master. 
| * 9db62a7 Commit from old/master. 
| * 1ff5856 Commit from old/master. 
| | * f8475cb (old-feature) Merge 
| | |\ 
| |//
|/| | 
| | * 54e0f30 (old/feature, feature) Commit from old/feature. 
| | * 999e6b5 Commit from old/feature. 
* | | f0dd795 (origin/master) Commit from new/master. 

Nie jestem pewien co masz na myśli, gdy chcesz "utrzymywać relacje między oddziałami". Co chciałbyś zmienić w historii przedstawionej w moim przykładzie?