2015-02-18 14 views
5

Ho un repository Git Old che voglio spostare in una sottocartella sub di un repository Git esistente New. Ho due rami, master e feature, all'interno di Old che voglio trasferire anche; Old\master si deve semplicemente unire in New\master e ci dovrebbe essere una nuova filiale in New denominata old-feature.Spostare un repository Git in una sottocartella di un altro con diramazioni

Non sono eccessivamente preoccupato per la storia pulita; il mio attuale processo è di fare semplicemente un git mv in Old prima di fare le migrazioni, e per me va bene. Preferisco evitare di riscrivere la cronologia, se possibile.

miei passaggi della migrazione in corso sono le seguenti (in New repo):

  • git remote add -f old ...
  • Crea nuovo old-feature ramo master.
  • Creare il ramo locale feature da old/feature.
  • Unisci ramo feature ->old-feature.
  • Unisci ramo old/master ->master.
  • Premere entrambi i rami.

Anche se questo funziona, trovo che più tardi se mi fondo old-feature-master, Git non è la comprensione della storia (intendo la mia storia incasinata) e tratta il ogni file come un conflitto di unione. Come posso eseguire una corretta migrazione mantenendo le relazioni tra filiali?

+0

Cosa si fa con 'git mv' in' old'? Per esempio. stai spostando tutti i file e le directory da 'Vecchio' a' Vecchio \ sub'? –

+1

I due reposli hanno commesse comuni da avviare? –

+0

@ShaunLuttin: Sì, ora li sto spostando in 'sub' mentre sono ancora in' Vecchio', quindi eseguo la migrazione. I due repository non hanno nulla in comune. –

risposta

0

Mentre questo appartiene a un commento lungo e non una risposta, volevo mostrarvi il risultato che ho ottenuto seguendo il vostro processo con due repository separati, in modo che potessi chiedere come il log di esempio di seguito non sia soddisfacente. (Nota:. Ho avuto solo un conflitto di unione che è stato per il file README.md in entrambi i pronti contro termine)

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 Risultato

* 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. 

Non sono sicuro di quello che vuoi dire quando vuoi "mantenere le relazioni di filiale". Cosa ti piacerebbe cambiare sulla storia illustrata nel mio esempio?

Problemi correlati