Comment puis-je résoudre un git-svn indice de discordance?
Quand j'ai fait un git svn rebase il s'est arrêté à un point en disant:
Index mismatch: SHA key of a tree != SHA key of another tree.
(Je viens de savoir que ces SHA touches correspond à un arbre et pas un commit à partir de git show de plus de deux sha clés.)
re-reading <sha index of a commit in svn/trunk>
... list of files ...
fatal: bad object <SHA1 index of the bad object>
rev-list -1 <SHA1 index of the bad object> --not <SHA1 index of the revision it was trying to re-read>: command returned error: 128
Je ne suis pas très expérimenté dans le fonctionnement interne de git, donc, il y a une séquence d'étapes à suivre pour disséquer les problèmes de ce genre et, éventuellement, de les résoudre?
- Le premier pense que je voudrais essayer soupçonné d'avoir corrompu référentiel est un
git fsck
. - Merci pour votre suggestion. J'ai fait un git fsck et il a énuméré un tas de pendre des arbres, des validations et des gouttes. Je me suis fait référence à cette section dans Git manuel de l'utilisateur: kernel.org/pub/software/scm/git/docs/... et essayer de comprendre ce qui s'est passé dans le repo. Heureusement, un couple de semaines, j'archivées mes .git dossier de mon collègue de se lever et courir avec le repo. J'ai utilisé et créé un nouveau repo et de poursuivre mon travail alors que je comprendre ce qui s'est passé à l'est corrompue.
- Seule chose que je peux penser, c'est que quelqu'un d'autre, éventuellement indexé avant vous, ainsi que de modifier le SHA de clé de la télécommande pensions et de vous donner l'erreur que vous voyez maintenant. Si vous tirez les modifications apportées à l'arbre, résoudre les conflits, alors rebase à partir de là, il pourrait fonctionner correctement.
- On ne voit pendre s'engage, pas de ceux qui manquent? Cela est raisonnablement normal -- balançant s'engage sont créés lors de l'année de référence, et balançant d'arbres lors de l'utilisation de
git add
-- l'indice est maintenu comme un arbre. - Le dépôt distant est un référentiel SVN, et SVN ne prend pas en charge la réécriture de l'histoire, donc je ne suis pas sûr de ce que tu veux dire
Vous devez vous connecter pour publier un commentaire.
J'ai eu cette erreur deux fois et les deux fois résolu en supprimant le dossier svn à l'intérieur de l' .git dossier.
puis reconstruire le svn de métadonnées avec:
Vous verrez probablement un message le long des lignes de:
et après tout (la reconstruction peut prendre un certain temps, en particulier sur les grands dépôts de), vous devriez vous retrouver avec un miroir de l'dépôt svn de nouveau.
--log-window-size=5000
(ou plus) permettra d'accélérer la récupération grandement.Merci de ne pas supprimer le .git/svn dossier de résoudre ce problème. Il vous oblige à tout reconstruire, c'est ennuyeux, il va prendre un certain temps (pour la taille de mon repo plusieurs heures) et il n'est PAS NÉCESSAIRE.
J'ai trouvé la bonne réponse ici et je l'ai inclus ci-dessous.
À partir du lien:
À l'intérieur de l' .répertoire git exécutez la commande suivante:
Maintenant supprimer la correspondance .svn/.les caches à partir de la sortie de la première commande
Maintenant
git svn rebase
ougit svn fetch
au contenu de votre coeur.caches
et il a été beaucoup plus rapide que la suppression de l'.git/svn
. Oublié de mettre à jour ici. Merci de poster votre réponse.De mise à jour client de git et récupère à nouveau la dernière svn s'engage à l'aide de:
où 12345 est existant révision svn.
.caches
répertoire n'a pas.Dans mon cas, le problème a été causé par une nouvelle/inconnu svn auteur qui n'était pas dans mon
authors
fichier git-svn a été configuré pour utiliser. Il l'a signalé dans la sortie que j'ai ignoré les premières lectures:De sorte que m'a donné le nom qui me manquait, et ce fichier pour l'ajouter trop (j'ai tiré l'e-mail de ma organisations de registre de l'utilisateur) et a la voile en douceur.
Le problème, c'est que vous avez à faire cela systématiquement, dans ce cas :
Quelque chose qui manque, tout ce crash. Le seul moyen que je connaisse pour récupérer se faire enlever tous svn dans .git et tout reconstruire. Il est tout simplement ennuyeux et prendre un certain temps !
J'ai juste eu cette erreur moi-même. Il suffit de supprimer le ref, comme suit:
Qui devrait effacer l'erreur.
.git/refs/remotes/git-svn
.git-svn
à distance ref, mais je n'ai pas le reste..git/refs/remote/git-svn
fichier...Peut-être quelque chose à voir avec Copie À l'Écriture de la fonctionnalité de votre système de fichiers ext4/btrfs/etc...) ?
Voir : https://stackoverflow.com/a/42299634/7491491
J'ai eu cette erreur:
Index mismatch: <sha> != <sha>
re-reading <sha index of a commit in svn/trunk>
... list of files ...
<path> was not found in commit <sha> (r<svn rev>)
À la recherche dans le repo SVN à l'histoire du chemin, j'ai trouvé la révision SVN où le fichier a été ajouté. Mais en regardant dans Git à la validation créé pour cette révision, j'ai trouvé qu'il ne contient pas tous les fichiers!
Je pense que cela a été causé par un disque plein plus tôt. Après avoir fait un
git svn reset -r
retour à la révision de la rupture de Git commit,git svn fetch
a bien fonctionné de nouveau.J'ai couru dans ce cours de la première clonage s'avère que quelqu'un a créé une branche appelée tronc qui était en conflit avec le réel tronc. Après avoir ignoré /branches/trunk tous travaillé