201 votes

Comment puis-je dire git-svn sur un sites distants créés après que j’ai récupéré le repo ?

J’utilise pour contrarier mon entreprise de central référentiel. Nous avons récemment créé une nouvelle branche de fonctionnalité dans le repo central. Comment puis-je dire à ce sujet ? Quand je lance je ne vois que les branches qui existait lorsque j’ai couru contre le repo pour initialiser mon `` repo ?

305voto

vjangus Points 2023

Vous pouvez ajouter manuellement les sites distants,

104voto

janos Points 22603

Si vous souhaitez suivre TOUTE la distance svn branches, puis la solution est aussi simple que:

git svn fetch

Cela permettra de récupérer TOUTES les branches distantes qui n'ont pas été récupérées encore.

Autre conseil: si vous avez coché uniquement le tronc au premier abord, et plus tard, vous souhaitez suivre TOUTES les branches, puis modifiez .git/config pour ressembler à cela et ré-exécutez git svn fetch:

[svn-remote "svn"]
        url = https://svn/path_to_repo_root/
        fetch = path_to_trunk:refs/remotes/git-svn
        branches = path_to_branches/*:refs/remotes/*

Les points clés sont url doit pointer vers la racine du dépôt, et les chemins définis dans fetch et branches doit être relative à l' url.

Si vous souhaitez récupérer uniquement les branches spécifiques au lieu de TOUS, il est un bel exemple, en git svn --help:

[svn-remote "huge-project"]
        url = http://server.org/svn
        fetch = trunk/src:refs/remotes/trunk
        branches = branches/{red,green}/src:refs/remotes/branches/*
        tags = tags/{1.0,2.0}/src:refs/remotes/tags/*

Avec les anciennes versions d' git-svn, une fois que vous avez spécifié les branches comme cela, vous pourriez ne pas être en mesure d'obtenir de nouvelles branches avec git svn fetch. Une solution de contournement est d'ajouter plus d' fetch lignes, comme ceci:

[svn-remote "huge-project"]
        url = http://server.org/svn
        fetch = trunk/src:refs/remotes/trunk
        fetch = branches/blue:refs/remotes/branches/blue
        fetch = branches/yellow:refs/remotes/branches/yellow
        branches = branches/{red,green}/src:refs/remotes/branches/*

Une autre solution de contournement par @AndyEstes: éditer .git/svn/.metadata et de modifier la valeur de branches-maxRev ou tags-maxRev d'une révision avant tout venez d'indiquer, de succursales ou de balises ont été créées. Une fois que vous avez fait cela, exécutez git svn fetch pour suivre le svn nouvelle succursale à distance.

54voto

Hank Gay Points 36173

Il semble que j’ai juste besoin de `` ; en quelque sorte j’avais convaincu moi-même qui réalisait l’extraction le repo entier plutôt que seulement les changements.

15voto

MatrixFrog Points 11066

Peut-être que j'ai tout fait foiré, mais j'ai suivi les instructions de la section vjangus réponse et presque travaillé. Le seul problème était que newbranch ne semble pas être ramifiée à partir du tronc. Dans gitk, c'était une sorte de "flottant" à lui tout seul; il n'avait pas d'ancêtre commun avec le tronc.

La solution à ce problème est:

  1. Trouver le SHA1 du dernier commit qui s'est passé sur le tronc avant de la branche a été créée.
  2. Trouver le SHA1 du premier commit sur la branche (le message est probablement "a Créé une nouvelle branche, copié à partir du tronc@12345" ou quelque chose)
  3. git diff-tree <sha1 from step 1> <sha1 from step 2> -- il ne devrait pas être de sortie. Si il est de sortie, vous avez choisi le mauvais s'engage.
  4. git checkout local-newbranch alors git rebase <sha1 from step 1>. Ce sera rebase local-newbranch sur le nouvel arbre, mais remotes/newbranch sera toujours déconnecté.
  5. Go pour le fichier .git/refs/remotes/newbranch et l'éditer pour contenir la SHA1 du nouveau commit (sur la relocalisée newbranch) qui correspond à l'ancien commit il est pointé. (Ou peut-être utiliser git-update-ref refs/remotes/newbranch <new-SHA>. Merci inger.)
  6. La prochaine fois que vous git svn dcommit de newbranch, vous aurez un tas de messages à propos de la mise à jour des journaux. C'est normal je pense.

Je vous recommandons de conserver gitk --all ouvert tout le temps, et rafraîchissant souvent à garder une trace de ce que vous faites. Je suis toujours en sorte de nouveau à git git svn, donc s'il vous plaît suggérer des améliorations apportées à cette méthode.

5voto

Mikael Lepistö Points 1040

Je n'ai pas trouvé aucune documentation sur cette fonctionnalité, mais on dirait que git svn configuration prend en charge plusieurs récupérer les entrées. De cette façon, vous pouvez également ajouter des branches séparément, sans avoir besoin d'ajouter un autre à distance dépôt svn de l'entrée à votre config, ni à l'aide de caractères génériques pour obtenir toutes les branches de certains répertoires.

Supposons que votre SVN arbre est vraiment désagréable d'avoir beaucoup de branches sans aucune logique la façon dont ils sont situés, par exemple, d'avoir des branches et des sous-répertoires contenant plus ramifié.

c'est à dire

trunk
branches
  -> branch1
  -> sub-dir1
    -> branch2
    -> branch3
  -> sub-dir2
    -> branch4
    -> sub-dir3
      -> branchX 
<... hundreds more ...>

et vous voulez juste de ramasser quelques branches d'être inclus dans votre dépôt git.

Vous pouvez d'abord init votre dépôt avec seulement tronc sans branches:

git svn clone -r 10000:HEAD https://svn.com/MyRepo myrepo --prefix=svn/ --trunk=trunk 

Après cela, vous devriez voir la configuration suivante:

localhost: elhigu$ git config --get-regexp "svn-remote."
svn-remote.svn.url https://svn.com/MyRepo
svn-remote.svn.fetch trunk:refs/remotes/svn/trunk

si jamais vous voulez vous procurer une nouvelle branche de MyRepo vous pouvez simplement ajouter de nouveaux aller chercher les entrées de configuration:

git config --add svn-remote.svn.fetch branches/sub-dir2/branch4:refs/remotes/svn/branches/sub-dir2/branch4

Ou vous pouvez modifier la configuration .git/config

Pour aller chercher les nouvelles branches après les ajouter à la config il suffit d'exécuter:

git svn fetch -r 10000:HEAD

[Edit] Parfois, il semble être nécessaire d'exécuter la chercher avec --tous les paramètre pour récupérer nouvellement ajoutée des branches:

git svn fetch --all -r 10000:HEAD

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X