2009-10-25 6 views
2

Je souhaite synchroniser un référentiel GIT local avec un référentiel GIT distant et un référentiel SVN.Histoire de GIT sans fin - qu'est-ce que je fais mal ici?

Les étapes que je suis d'exécution sont les suivantes:

> git push
Everything up-to-date

> git pull
Already up-to-date.

D'accord, mes prises en pension de GIT à distance semble être bien jusqu'à présent.

> git svn rebase
First, rewinding head to replay your work on top of it...
Applying: Fixing some javadoc problems.
Using index info to reconstruct a base tree...
<stdin>:13: trailing whitespace.
\t
<stdin>:21: trailing whitespace.
\t\t\t\t<configuration>
<stdin>:22: trailing whitespace.
\t\t\t\t\t<links>
<stdin>:23: trailing whitespace.
\t\t\t\t\t\t<link>http://java.sun.com/javase/6/docs/api/</link>
<stdin>:24: trailing whitespace.
\t\t\t\t\t</links>
warning: squelched 1 whitespace error
warning: 6 lines add whitespace errors.
Falling back to patching base and 3-way merge...
Auto-merging lilith-parent/pom.xml
I remplacé onglets avec \ t pour plus de clarté.

C'est une fusion que j'ai déjà faite, précédemment ...
J'ai maintenant une nouvelle version locale.

> git svn dcommit
[commits the new version to SVN... again...]

maître maintenant et le tronc sont toutes deux à la tête de mon dépôt local.

> git push
To ssh://[email protected]/gitroot/lilith/lilith
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'ssh://[email protected]/gitroot/lilith/lilith'

Cela signifie, autant que je sache, que je dois exécuter une première traction. Soooo ....

> git pull
Already uptodate!
Merge made by recursive.

qui me remet au début ... :(Rincer et répéter.

J'ai le sentiment que je suis absent un point assez important ici, quelqu'un peut-il m'expliquer cela?

+0

Ok, j'ai pu résoudre mon problème immédiat émission « origine git push: master » suivi « origine git push ». Cela a réinitialisé mon dépôt git à un état plus sain (c'est-à-dire sans les 5 fusions que j'avais créées entre-temps). Je suppose que je vais juste laisser de côté la resynchronisation avec svn dans le futur car ça ne vaut probablement pas le coup. Merci de votre aide! – Huxi

Répondre

4

Une branche ne peut pas être suivie à la fois avec svn via git-svn et avec git via push/pull. Vous devriez faire ces deux branches distinctes et faire git rebase sur les branches synchronisées localement, lorsque vous voulez transférer commits entre ces branches

+0

Merci pour l'info. "Ne peut pas être fait comme ça" était tout ce que j'avais besoin de savoir. – Huxi

4

Le plus grand indice est l'erreur dans la poussée:

! [rejected] master -> master (non-fast forward) 

Cela signifie que vous » La branche re subversion et votre branche git master distante ne sont pas d'accord sur quelque chose. Certains changements ont été poussés/commis à un autre qui n'est pas dans l'autre. Allumez gitk --all, et il devrait vous donner une idée de ce qui s'est mal passé - chercher des "fourchettes" dans l'histoire. Recherchez les branches [origin/master], [master] et [trunk]. L'origine pourrait bien être sur une branche différente de votre maître actuel - git svn rebase peut causer cela.

Généralement, si vous utilisez svn et git, il est préférable de conserver la branche git master identique à la subversion et de travailler sur une autre branche de git. Voir this other SO question about working with git and subversion.

+0

Je voulais juste vous remercier pour le lien vers l'autre question SO. Cela m'a aidé à mieux comprendre. J'ai eu du mal à décider si vous ou Pavel devriez obtenir la réponse et vous êtes contenté de "Pavel était plus rapide". : p Idéalement, je vous donnerais la coche de réponse. – Huxi

1

Vous pouvez également consulter l'article de blog Best branching practices with git-svn qui contient quelques conseils utiles à ce sujet.

Si vous voulez vous débarrasser des avertissements blancs, exécuter

$ git config --global apply.whitespace nowarn 
Questions connexes