Comment faire pour importer svn branches et les tags dans le dépôt git-svn?
J'ai un dépôt SVN centrale, je dois m'engager, mais j'ai une passion pour git (comme n'importe quel autre développeur, je sais). Le cas est bien connu.
Puis j'ai lu sur git-svn et il a donné un essai. Comme je n'ai pas besoin de toute l'histoire, juste de deux mois, j'ai fait comme ceci:
git svn clone -r 34000 -s https://svn.ourdomain.com/svn/repos/Project/SubProject
Sous-projet a, comme d'habitude, les sous-répertoires trunk
, tags
et branches
. Grand.
Ensuite, afin d'obtenir la dernière version, je n'ai
git svn rebase
Certains téléchargements plus tard, une grande. La dernière révision, les journaux, etc. Ok, maintenant je vais passer à ma branche.
$ git branch
* master
$ git branch -r
trunk
$ git branch -a
* master
remotes/trunk
Les questions: Où sont mes branches? Ai-je fait quelque chose de mal? Comment dois-je faire pour recevoir mes branches dans le nouveau repo git?
git-svn, partout où j'ai lu à ce sujet, traité à bon escient avec des branches et des tags, mais le comportement n'est pas ce que j'attendais. Merci!
MODIFIER: j'ai juste trouvé que git svn fetch
de le faire. Mais elle va obtenir toutes les révisions, ce qui est quelque chose que je ne voudrais pas.
- Eh bien, ce ne sera pas répondre à votre question, d'où le commentaire: Lors de l'utilisation de git-svn vous casser la subversion de la fonctionnalité de suivi de fusion, comme git-svn ne prend pas en charge. À mon humble avis, ce problème tout seul disqualifie git-svn pour un usage sérieux avec un dépôt subversion. Je n'ai pas trouvé d'info si cette fonctionnalité ne sera jamais développé -- non, sans doute, que les gens aiment à passer à un DVCS au lieu d'utiliser ces hacks.
- J'ai lu quelque part que la transformation de l'git fusionne en commet à l'aide de --squash ne cassera pas la subversion suivi de fusion.
- Pour la norme "trunk/branches/tags" mise en page qui vous semblent utiliser, vous pouvez essayer
--stdlayout
, comme dansgit svn clone --stdlayout svn://...
- voir stackoverflow.com/questions/5361559/... - ne sais pas pour les autres mais
--stdlayout
était ce dont j'avais besoin - N'est-ce pas
-s
un court de--stdlayout
?
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin de plusieurs étapes.
approvisionnement adéquat du tronc, de branches et de tags les noms de dossier et de chercher de l'repo svn:
Depuis tags svn sont de véritables branches, de créer des étiquettes git tag branches:
Supprimer la balise branches
Puisque les étiquettes marquées dans l'étape précédente point à un commit "créer un tag", nous avons besoin de dériver de "vrais" balises, c'est à dire les parents de "créer une balise" s'engage.
Tout ce que nous avons à faire maintenant est de supprimer les anciennes étiquettes.
git for-each-ref --format="%(refname:short) %(objectname)" refs/remotes/tags | while read tag ref; do echo git tag -a $tag -m \"Import $tag from svn\" $ref; done
git for-each-ref --format="%(refname:short) %(objectname)" refs/remotes/tags | cut -d / -f 2- | while read tag ref ; do msg=$(git log --pretty=format:'%s' -1 ${ref}) ; git tag -f -a $tag -m "$msg" ${ref}^ ; done
git for-each-ref --format="%(refname:short)" refs/remotes/tags
dans votre cas?tags/v0.0.1
echo tags/v0.0.1 | cut -d / -f 2-
sortiesv0.0.1
pour moi. Pourriez-vous exécuter cette commande?refs/remotes/tags
au lieurefs/remotes/origin/tags
.--prefix
, c'est maintenant par défaut pourorigin
.Elle s'inspire de la Vanuan la réponse ci-dessus, mais il conserve le message de l'original
svn
balise dans le nouveaugit
tag.C'est le même que nicolai.rostov est la réponse ci-dessus, mais je viens de changer les refs chemin
J'ai remplacé
refs/remotes/tags
parrefs/remotes/origin/tags
J'utilise git version
2.1.1
encygwin
terminal.Vous dire que vous n'avez pas reçu vos branches dans votre caisse.
Ce qui est probablement un problème avec la mise en page de votre repo svn.
Le standard de mise en page": le
branches/
tags/
trunk/
Si vous avez votre mise en page comme ceci:
branches/user1/
branches/user2/
Ensuite, vous perdrez vos branches lorsque vous ne git svn fetch /clone.
Pour résoudre ce problème, vous devez donner l'argument
--branches=branches/*/*
git clone.phpport
etotherfiles
semblent être les branches.Si vous voulez voir vos branches lorsqu'un git branch après une importation à partir de svn, vous devez utiliser le script ruby svn2git (et git2svn)
Après
svn2git
est fait avec votre projet, vous allez obtenir ceci à la place:J'ai écrit un script pour faciliter la migration comme vous le souhaitez. Le script n'est pas parfait, mais j'espère que cela peut vous aider:
Pour plus d'informations, vous pouvez visiter le site: https://github.com/MPDFT/svn-to-git
Pour ceux qui ont à travailler sur Windws au travail, voici une solution à jour avec la version git 2.17.0 (et, en théorie fonctionne également pour les versions antérieures)
J'ai eu le même problème - les étiquettes et les branches ont disparu quand j'ai précisé la révision:
Le correctif a été pour spécifier une plage de révisions,
-r 34000:HEAD
:La git liste de diffusion m'a donné l'astuce.