2010-04-22 17 views
6

Sto usando svn. Ho due rami e su entrambi sono state eseguite molte modifiche. Oltre a uno dei rami sono stati rinominati molti file, quindi ora svn non può aiutarmi a unire le modifiche in quei file (conosco bene la limitazione di svn).git-svn merge 2 rami svn

  1. È possibile utilizzare git-svn per eseguire l'unione dei rami?
  2. Git-svn gestirà anche i file rinominati?

Grazie

+0

Vedere questa risposta: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to -help-out-with-svn-merge/3585702 # 3585702 –

+0

Vedere http://stackoverflow.com/questions/714589/can-git-svn-correctly-populate-svnmergeinfo-properties ... La parte "Modifica:" della 2a risposta (non la risposta accettata) è particolarmente bella –

risposta

7

git merge dovrebbero essere in grado di rilevare (fino a un certo punto) rinomina.

recursive

Questo può risolvere solo due teste utilizzando un algoritmo di fusione a 3 vie.
Inoltre, è in grado di rilevare e gestire le unioni che coinvolgono i nomi.
Questa è la strategia di unione predefinita quando si estrae o unisce un ramo.

Ma git-svn può solo importare/esportare da/a SVN, non eseguire l'unione.
E l'unione è difficile:

CAVEATS

Per ragioni di semplicità e di interagire con un sistema meno capace (SVN), si raccomanda che tutti git svn utenti clone, recuperano e dcommit direttamente dal server SVN ed evitare tutte le operazioni git clone/pull/merge/push tra repository e branch git.
Il metodo consigliato per lo scambio di codice tra i rami git e gli utenti è git format-patch e git am, o semplicemente "dcommiting" al repository SVN.

L'esecuzione di git merge o git pull NON è consigliata su un ramo dal quale si intende eseguire il dcommit. Subversion non rappresenta fusioni in alcun modo ragionevole o utile; quindi gli utenti che usano Subversion non possono vedere alcuna fusione che hai fatto. Inoltre, se si uniscono o si estraggono da un ramo git che è un mirror di un ramo SVN, dcommit potrebbe commettere il ramo sbagliato.

Se non unire, tenere presente la seguente regola: git svn dcommit tenterà di commettere in cima al SVN commit chiamato in

git log --grep=^git-svn-id: --first-parent -1 

pertanto È necessario assicurarsi che il più recente commit del ramo a cui vuoi partecipare è il primo genitore dell'unione. Il caos sarà altrimenti, specialmente se il primo genitore è un vecchio commit sullo stesso ramo SVN.

1

Una volta ho avuto lo stesso problema in un progetto al college.quello che ho fatto è stato il seguente:

  • creare un nuovo repository git-svn (git svn clone -s https://…)
  • unire i rami con git (git checkout master; git merge branch)
  • cassa il tronco con svn (svn co https://…/trunk)
  • copia su i file uniti da git
  • eliminare i file e le directory di sinistra-over con svn (svn rm)
  • commit con svn (svn ci)
  • prendere il nuovo commit in git
+0

Grazie per l'utile sommario. Il git si fonde facilmente, più facile che farlo con svn? (Cerco di trovare una risposta a questo: http://stackoverflow.com/questions/2945842/using-git-svn-or-similar-just-to-help-out-with-svn-merge) – inger

+0

Un'ultima cosa , hai provato a tornare a svn? In caso affermativo, quali problemi si stavano ottenendo/aspettandosi? – inger

+0

@inger, no mi sono impegnato con svn per assicurarmi che non finisca per spingere le fusioni a metà forno che solo git capirebbe. – knittl

0

usare svn merge funzionalità di unire rami SVN, sarà più veloce. L'utilizzo di Git per questi problemi è piuttosto complesso, crea troppi conflitti ...

Problemi correlati