2010-01-20 6 views
6

Nous utilisons svn, et j'utilise git-svn pour maintenir la santé mentale. À un moment donné, notre serveur svn a décidé de retourner un 403 pour un certain dossier. C'est arrivé à tout le monde, pas seulement à moi. Pour cette raison, je suis incapable de faire une rebase git-svn. Je vois cette erreur:Je dois extraire quelques révisions de git-svn

Index mismatch: 164adbb93408bed4ff0bdbcbf07bdfb2c49ed0ce != 64443edc6089f7f737e51cf8ea5ff3680c95a7e9 
rereading 0f2fa25d15a35ac3fe311e3e0142f1d9e5a3be18 
    M test/system-tests/src/test/java/com/garmin/elevation/ElevationManagerSystemTest.java 
    M test/activity-test/src/test/java/com/garmin/elevation/ElevationManagerIntegrationTest.java 
    M test/activity-test/src/test/java/com/garmin/mb/activity/service/ActivityServiceManagerIntegrationTest.java 
    M system/deployment/src/main/resources/oracle/releases/2.9-SNAPSHOT/110-preference/4-data.dml.sql 
    M pom.xml 
service/activity-service-1.2/src/main/java/com/garmin/activity/service/impl/ActivityServiceImpl.java was not found in commit 0f2fa25d15a35ac3fe311e3e0142f1d9e5a3be18 (r8845) 

Le fichier qu'il se plaint de la fin est dans le dossier qui retournait 403 quand nous avons eu l'erreur. Sur mon système de fichiers, le dossier service/activity-service n'existe pas. Je crois qu'il essaie de modifier le fichier (c'est ce que ressemble le changement dans svn), mais comme le fichier n'existe pas, il explose. Donc je pense que si je suis capable de supprimer les révisions passées, puis de les récupérer, cela fonctionnera peut-être. Je ne suis pas sûr de savoir comment faire ça. J'ai essayé de rebaser interactivement, puis de supprimer un groupe, mais cela n'a pas fonctionné.

Alors, quelqu'un sait comment extraire les versions déjà récupérées?

Répondre

8

Faites d'abord une sauvegarde de votre répertoire .git.

Supprimer le fichier .rev_map.$UUID pour la branche de problème, ci-dessous .git/svn; et rembobinez la branche générée git-svn qui représente la branche de problème (généralement, trunk). Pour rembobiner la branche, exécutez git pack-refs --all, git log $BRANCH, recherchez le commit avant la validation du problème et éditez .git/packed-refs de façon à ce que la branche pointe maintenant vers la plus ancienne validation. Ensuite, exécutez git svn fetch. Il va reconstruire la rev-map à partir de votre branche rewound existante, puis récupérer les svn commits que vous n'avez pas encore, y compris le commit de problème. Vous devriez maintenant pouvoir rebaser et décommander normalement.

9

Une meilleure façon de le faire est maintenant git svn reset -r <rev>rev est la révision avant où vous voulez commencer refetching. Une fois cela fait, il suffit de lancer git svn fetch et il va reconstruire son index et refaire les révisions après rev.