Attualmente, quando corro git svn dcommit
git crea un commit separato in SVN per ogni commit locale che ho fatto dall'ultima sincronizzazione con SVN. C'è un modo per dcommit
di combinare invece tutti i miei recenti commit locali in un commit per SVN?Combina locale Git commit in un commit per git-svn
risposta
git rebase remotes/trunk --interactive
dovrebbe portare al menu dove si può prendere commit o li schiacciare in 1 impegnarsi al fine di evitare di inquinare il repository svn. This è una risorsa molto buona (ma breve) su come lavorare con git-svn.
No, ma è possibile eliminare tutti i commit insieme abbastanza facilmente. Per il seguente esempio, ho intenzione di assumere sei sul ramo master
corrispondente al trunk
ramo remoto e che si vuole schiacciare tutti i locali si impegna insieme:
git tag local # create a temporary tag
git reset --hard trunk
git merge --squash local
git commit # write your single commit message here
git svn dcommit
git tag -d local # delete the temporary tag named local
Invece di utilizzare un tag temporanea si potrebbe anche semplicemente usare il reflog (vale a dire utilizzare [email protected]{1}
al posto di local
)
questo è assolutamente fantastico, questo cambia completamente il mio flusso di lavoro, molte grazie –
Questo ha funzionato per me - schiacciate diversi commit in un unico commettono e poi dcommitted a svn:
http://www.gitready.com/advanced/2009/02/10/squashing-commits-with-rebase.html
Quando lavoro con git-svn e voglio che una serie di commit di git compaia come un singolo commit, lavoro su un ramo di argomento e poi eseguo uno merge
non-forward veloce in master prima di dcommit
-ing.
In primo luogo, rebase vostro ramo contro svn e assicurarsi maestro locale è up-to-date:
git svn rebase && git push . remotes/trunk:master
quindi passare a maestro, unire e dcommit:
git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit
questo apparirà come singolo commit in Subversion ma avrai comunque la tua cronologia locale che ti ha portato a quel commit.
+--- Merge commit
V
svn trunk *---*---*-------------------*--- --- ---
\ /
topic branch *---*---*---*---*
Un modo più semplice potrebbe essere (se si dispone di più commit ammucchiati sul sistema locale):
git reset <hash tag of commit till which u need to combine>
git commit -am "your message" // This will create one clubbed commit of all the commit till the hash tag used.
Assicurati di aggiungere nuovi file. "git commit -am" non aggiunge nuovi file da solo. –
In alternativa, usando reset --soft lascerai le modifiche tutte in scena in modo da non doverti preoccupare di aggiungere file o usare -a. – PeterJCLaw
che non funziona per me. Io uso merge --no-ff --no-commit
ma dopo impegno, ho ottenuto:
svntrunk 54f35e4 [trunk: ahead 336] release 1
dcommitting a trunkwill impegnare tutte le 336 commit.
reset, tagging e schiacciamento come descritto nella risposta n. 2: Combine local Git commits into one commit for git-svn funzionerà, ma al prossimo "unione" si avrà qualche problema per ottenere tutti i commit di nuovo insieme!
l'unico che sta lavorando per me:
git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master
per ottenere tutti i commit da maestro a svn senza perdere la storia per il futuro la fusione con lo stesso comando
~ Marcel
- 1. Gerrit: combina più commit in un "cambiamento"
- 2. git commit -m vs. git commit -am
- 3. Come annullare una git locale commit
- 4. hook pre-commit bypass per commit commit
- 5. Bad commit to Git
- 6. Stampa messaggio di commit di un dato commit in git
- 7. Numero di commit in un repository git
- 8. git commit comment per file
- 9. Count Git commit per periodo
- 10. Intellij git revert un commit
- 11. git rebase un singolo commit
- 12. Git esclude un commit in un ramo
- 13. git: spingere un singolo commit
- 14. ^M caratteri nel messaggio di commit git (git commit -v)
- 15. git cerca registro di commit per ID commit
- 16. Git - Cos'è un ID commit git?
- 17. Git commit da python
- 18. Git Commit Genes 'Order
- 19. Git blame commit line
- 20. git commit problems
- 21. Git submodule commit hooks
- 22. Git commit bash script
- 23. Lost Last Git Commit
- 24. delete first git commit
- 25. git commit fuso orario
- 26. git find fat commit
- 27. Git: commit modifiche parziali
- 28. Rimuovi commit vuoto in git
- 29. Divisione Git diff in un nuovo commit
- 30. Come eliminare l'ultimo commit Git in Bitbucket?
Questo sembra come un'ottima soluzione Non capisco quale sia l'effetto di telecomandi/trunk nel comando, il risultato finale è che tutti i miei commit sono schiacciati all'interno del master. Speravo che sarebbero stati schiacciati solo mandando a SVN. È necessario eseguire il commit su SVN dopo lo schiacciamento. –
@MacRae Linton: tutti i tuoi doveri devono essere schiacciati nel master. Se non fossero git non avrebbero modo di mantenere sincronizzati i repository git e svn. Quando rebase per tirare le ultime modifiche svn avrebbe un commit ma in git avresti n commit. –
@Jonon Punyon: Il problema che sto incontrando è che dopo lo schiacciamento commette in master, diventa difficile unire master con il mio ramo di sviluppo di nuovo. Praticamente tutti i miei cambiamenti diventano conflitti di fusione, il che è un enorme dolore da affrontare. Questa è una conseguenza inevitabile di tenere separato il mio ramo in via di sviluppo dal maestro schiacciato? –