2016-10-02 2 views
1

C'est le svn trunk chemin:Comment importer branche svn git avec l'histoire du tronc

http://svn/path/libs/trunk/mylib 

Et voici le chemin branch:

http://svn/path/libs/branches/mylib/mylib-feature-branch 

je dois migrer que la branche à git , mais j'ai aussi besoin de son historique avant la création de la branche.

La commande suivante va chercher seulement l'histoire de la branche:

git svn clone http://svn/path/libs/branches/mylib/mylib-feature-branch 

J'ai lu this answer, mais ne pouvait pas comprendre comment je devrais changer la commande git svn clone d'avoir toute l'histoire de la branche. Tout avis sera le bienvenu.

+0

Utilisez-vous cela comme une migration ponctuelle et puis seulement git à partir de là, ou voulez-vous utiliser Git comme interface pour le serveur SVN, en validant Git commets au serveur SVN? – Vampire

+0

@Vampire Cela va être une migration ponctuelle. – Meysam

Répondre

1

git-svn est pas le bon outil pour les conversions ponctuelles de référentiels ou de parties de référentiel. Il est un excellent outil si vous voulez utiliser Git comme frontend pour un serveur SVN existant, mais pour les conversions d'une fois, vous devriez pas utilisation git-svn, mais svn2git qui est beaucoup plus adapté à ce cas d'utilisation.

Il existe des outils pleny appelés svn2git, le meilleur est probablement le KDE de https://github.com/svn-all-fast-export/svn2git. Je recommande fortement d'utiliser cet outil svn2git. C'est le meilleur que je connaisse et il est très flexible dans ce que vous pouvez faire avec ses fichiers de règles.

Vous pourrez facilement configurer le fichier de règles afin que votre branche et son historique soient migrés.

Si vous n'êtes pas à 100% sur l'historique de votre dépôt, svneverever de http://blog.hartwork.org/?p=763 est un excellent outil pour étudier l'historique d'un référentiel SVN lors de sa migration vers Git.


Même si git-svn est plus facile de commencer, voici quelques autres raisons pour lesquelles l'utilisation du KDE svn2git au lieu de git-svn est supérieure, en plus de sa flexibilité:

  • l'histoire est reconstruit beaucoup mieux et plus propre par svn2git (si la bonne est utilisée), c'est particulièrement le cas pour les histoires plus complexes avec des branches et des fusions et ainsi de suite
  • les étiquettes sont de vraies étiquettes et non des branches dans Git
  • avec git-svn les tags contiennent une validation vide supplémentaire qui les exclut également des branches, donc fetch normal ne les obtiendra pas tant que vous n'aurez pas donné à la commande car par défaut seules les balises pointant vers les branches récupérées sont également récupérées.Avec les balises svn2git appropriées sont là où ils appartiennent
  • si vous avez modifié la mise en page en SVN vous pouvez facilement configurer cela avec svn2git, avec git-svn vous allez histoire perdre finalement
  • avec svn2git vous pouvez également diviser un dépôt SVN dans plusieurs référentiels Git facilement
  • ou combiner plusieurs dépôts SVN dans la même racine SVN dans un dépôt Git facilement
  • la conversion est une fois gazillion plus rapide avec le svn2git correct qu'avec git-svn

Il y a plusieurs raisons pour lesquelles git-svn est pire et le KDE svn2git est supérieur. :-)

+0

Salut, je reçois le même 'svn_dirent_join: Assertion svn_dirent_is_canonical (base, pool) failed.' erreur comme discuté [ici] (https://stackoverflow.com/questions/38770736/svn2git-object-reference-error#comment64942888_38784776) . Malheureusement, la solution sur le github a été supprimée. Pourriez-vous s'il vous plaît me dire quel était le problème? – Meysam

+0

oh, je pense que j'ai besoin d'exécuter des commandes directement sur le serveur svn, non? – Meysam

+0

Comme le dit la documentation, vous devez avoir une copie locale du répertoire SVN. Si vous téléchargez le repo dans votre boîte locale ou exécutez 'svn2git' sur le serveur SVN n'a pas beaucoup d'importance. – Vampire