2009-09-15 8 views
10

J'ai un dépôt git-svn nu et j'ai fait un 'git svn fetch' dessus.Comment mettre à jour 'git log' après 'git svn fetch' sur un repo nu?

L'exécution de 'git log' n'affiche pas les mises à jour. Je suis sûr qu'il y a des mises à jour car elle montre les fichiers modifiés après 'git svn fetch' et 'git svn log' les montre aussi.

S'il vous plaît noter que j'ai volontairement fait cela un repo bare 'git rebase' ne fonctionnera pas. Quelle est la commande appropriée pour obtenir les modifications récupérées?

Répondre

8

Essayez git log git-svn - Je don Je n'ai pas de repo, mais je viens de lancer git svn fetch, et le standard git log me donne le journal actuel (rebasé), mais avec le git-svn arg (qui est l'autre branche en plus de master qui est identifiée par git branch -a dans mon cas) Je reçois le journal jusqu'à Une révision extraite

+0

Vous avez raison. 'git log' recherche la référence principale, c'est pourquoi cela a fonctionné sur le 'git symbolic-ref refs/têtes/master refs/remotes/git-svn'. Merci. – vjangus

+0

Cela ne fonctionne pas non plus dans git 1.7.5.4 – MDCore

6

J'ai trouvé la réponse,

git refs symbolique-ref/têtes/refs maître/remotes/git-svn

Merci aux commentaires de Steven Walter à http://gsocblog.jsharpe.net/archives/12

+0

Cela ne fonctionne plus dans git 1.7.5.4 – MDCore

+0

ça marche pour moi !!! –

17

A git svn fetch ajoute une nouvelle branche distante appelée remotes/git-svn (comme on peut le voir avec git branch -a).

Si vous apportez des modifications au svn amont, puis exécutez à nouveau git fetch, les modifications sont tirées (en fait, extraites) dans cette branche, pas sur maître. Donc, pour que git log (et tout le reste) fonctionne bien sur la branche master, vous avez juste besoin d'une fusion, comme vous le feriez normalement après un fetch (c'est ce que fait git pull, une fetch puis une fusion)).

Puisque git svn pull ne fonctionne pas, vous devrez le fusionner manuellement. Alors que sur la branche principale, exécutez:

git merge remotes/git-svn

Cette fusionnera branche master avec la branche git-svn, ce qui rend tout va bien à nouveau.

à l'avenir, exécutez

git svn fetch 
git merge remotes/git-svn 

et vous serez à jour avec le dépôt en amont une fois de plus.

La définition de l'adresse de la tête du maître sur la tête git-svn comme suggéré par vjangus rendra également ce travail, mais vous ne devriez jamais effectuer de changements dans une branche distante.

+1

C'était la réponse qui a correctement adressé la situation que j'avais. – Ian

+0

J'avais d'abord tiré le svn repo par 'git svn fetch -s --prefix = origin /', donc dans mon cas il y avait une branche 'remotes/origin/trunk' au lieu d'une branche' git-svn'. Même solution cependant. – mcmlxxxvi

Questions connexes