Ho bisogno di automatizzare un rebase interattivo o di sostituirlo con altri comandi. Lasciatemi solo spiegare la mia situazione attuale:git: Come automatizzare rebase interattivo/sostituirlo con comandi git equivalenti
In una transizione di tipo svn-> git è necessario rebase il repository git appena creato per correggere una "interruzione della cronologia" eseguita durante SVN. Ecco il mio flusso di lavoro manuale per risolvere il problema.
branchNEW: containing history from SOMEDAY until now
branchOLD: containing history from past to SOMEDAY
EDIT o come ascii:
branchNEW: Y - Z
branchOLD: W - X
entrambi i rami non hanno commit comuni.
L'idea di base è ora di rebase ramoNEW su branchOLD. Sfortunatamente ci sono stati alcuni refactoring SOMEDAY: alcuni file sono stati spostati in un'altra directory. Il risultato del rebase ora è che ogni file spostato esiste in entrambe le posizioni.
EDIT
some file exist in X
the (nearly) same files also exist in Y, just on another path
branchNEW: W - X - Y - Z
(after rebase)
Dopo la rebase, HEAD ora contiene i file di X e Y. Ho anche cercato di aggiungere un nuovo impegnano a branchOLD che rimuove i file vecchi. Dopo il rebase SVN-HEAD e git-HEAD sono identici binari, ma il "git log --follow" non funziona.
Ora il problema principale: sono in grado di risolvere questo problema utilizzando un secondo, rebase interattivo:
git rebase -i SHA
SHA è lo sha-id del vecchio radice commettere in branchNEW. Ora nell'editor devo cambiare "pick" in "edit" per il commit più in alto. Dopo essere usciti l'editor ora devo rimuovere i file sbagliati
git rm -f fileA fileB
git commit --amend
git rebase --continue
Dopo questa testa di git è binario identico a capo di SVN e in aggiunta, git ha la storia completa e anche "git log --follow" opere per i file spostati.
Poiché questo passaggio è solo una piccola parte di un'enorme transizione VCS in futuro, è necessario eseguire lo script dell'intero processo. Ma come automatizzare i passaggi precedenti?
(so che SHAs non rimarrà lo stesso, ma sono in grado di ottenere lo SHA richiesta dal svn-id che è incorporato in ogni messaggio di commit)
Non sono sicuro, ma forse 'git filter-branch' potrebbe aiutarti. – Jubobs