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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top