Come applicare SVN diff a Git?
-
20-08-2019 - |
Domanda
Ho i miei progetti in 2 repository. Uno sotto SVN e uno sotto Git. Ogni volta che cambio qualcosa in SVN, voglio fare la stessa cosa nel repository Git.
Supponiamo che apporti una modifica al repository SVN, producendo la revisione 125. Come applicherei queste stesse modifiche al mio repository Git (supponendo che il mio repository Git sia aggiornato con la revisione 124).
Grazie.
Soluzione
Quello che ho effettivamente fatto / cercato è stato:
cd /path/to/svn/repo
svn diff -r 125 > /tmp/patch.diff
cd /path/to/git/repo
patch -p0 < /tmp/patch.diff
Altri suggerimenti
Prova:
svn diff | patch -d /path/to/git/repo -p0
Vedi svn help diff
se vuoi esportare una specifica versione di revisione
Perché a nessuno piace git-svn? Non posso presumere che nessuno lo sappia.
C'è git-svn (e git-hg e git-cvs e git-bzr afaict). Almeno con git-svn puoi semplicemente farlo
git svn clone --stdlayout http://myrepo/root here
usando -s ( --stdlayout
) assume il trunk / rami / tag / layout standard, ma puoi farlo in qualsiasi modo ( man git-svn
).
La mappatura è bidirezionale, quindi puoi spingere e tirare come con un telecomando nativo (git). Nessuna domanda.
Se hai intenzione di generare una patch in SVN e applicarla con Git in un secondo momento, non dimenticare di usare --git
opzione della riga di comando :
- git
Abilita una modalità di output speciale per svn diff progettata per la compatibilità incrociata con il popolare controllo della versione distribuita Git sistema.
Ad esempio, esegui
svn diff --git -r 125 > /tmp/patch.diff
Oltre ad usare la patch come menzionato sopra, potresti anche considerare di impostare un hook post-commit quindi non devi farlo ogni volta che commetti qualcosa di nuovo.
Il seguito ha funzionato per me.
Fonte: Come per creare e applicare una patch con Git
Innanzitutto, dai un'occhiata a quali modifiche sono presenti nella patch . Puoi farlo facilmente con git apply
git apply --stat fix_empty_poster.patch
Nota che questo comando NON applica la patch, ma ti mostra solo le statistiche su ciò che farà. Dopo aver dato un'occhiata al file patch con il tuo editor preferito, puoi vedere quali sono le modifiche effettive.
Successivamente, sei interessato a quanto sarà problematica la patch . Git ti consente di testare la patch prima di applicarla effettivamente.
git apply --check fix_empty_poster.patch
Se non si verificano errori, la patch può essere applicata in modo pulito & # 128512 ;. Altrimenti potresti vedere in quali problemi ti imbatterai.
Per applicare la patch, userò git am invece di git apply. La ragione di ciò è che git am ti permette di firmare una patch applicata. Questo può essere utile per riferimento futuro.
git am --signoff < fix_empty_poster.patch
Applying: Added specs to test empty poster URL behaviour
Applying: Added poster URL as part of cli output
Va ??bene, le patch sono state applicate in modo pulito e il ramo master è stato aggiornato. Ovviamente, esegui di nuovo i test per assicurarti che nulla si sia rotto.
Nel tuo registro git, & # 8217; scoprirai che i messaggi di commit contengono un & # 8220; Sign-off-by-# & 8221; etichetta. Questo tag verrà letto da Github e altri per fornire informazioni utili su come il commit è finito nel codice.