cClaude.rocks ☕ Le blog

[Nouvelles technologies du libre, sciences et coups de gueule…]

Menu
đŸ˜€ Ce billet a Ă©tĂ© Ă©ditĂ© le : 2024-05-16

Comment résoudre le problÚme de checkout ambiguë avec git ?


ඏ

  • PrĂ©cision

    PrĂ©cision, je rencontre ce problĂšme pĂ©riodiquement ces derniers temps, et je pense qu’il est liĂ© Ă  une version de git ou de git-cola qu’il m’arrive d’utiliser. Peut-ĂȘtre est-ce liĂ© Ă  l’utilisation simultanĂ©e de ces outils. Je prĂ©cise donc les versions au cas oĂč ce soit bien ce qui se passe.

    La version de git standard.

    git --version
    
    git version 2.33.1
    

    Un outil graphique pour git.

    git-cola --version
    
    cola version 3.6
    

ඏ

SymptĂŽmes

Lors d’un checkout banal : (ou presque
)

git checkout armv7l_disabled_and_add_restore

on se retrouve avec une erreur du type :

hint: If you meant to check out a remote tracking branch on, e.g. 'origin',
hint: you can do so by fully qualifying the name with the --track option:
hint:
hint:     git checkout --track origin/<name>
hint:
hint: If you'd like to always have checkouts of an ambiguous <name> prefer
hint: one remote, e.g. the 'origin' remote, consider setting
hint: checkout.defaultRemote=origin in your config.
fatal: 'armv7l_disabled_and_add_restore' matched multiple (2) remote tracking branches

ඏ

La bricole

En gros, ce message me conseille de faire cela :

git config --local checkout.defaultRemote origin

Donc je relance la commande :

git checkout armv7l_disabled_and_add_restore

Et pas mieux :

fatal: Not tracking: ambiguous information for ref refs/remotes/origin/armv7l_disabled_and_add_restore

Donc on dĂ©gage cette configuration, puisqu’elle ne sert Ă  rien :

git config --local --unset checkout.defaultRemote

J’ai Ă©galement exĂ©cutĂ© un nettoyage du dĂ©pĂŽt local Ă  l’aide de :

git gc --prune

Mais rien n’a fonctionné 


ඏ

Diagnostique

Les outils pour diagnostiquer cela existe, il s’agit de git ls-remote et git show-ref.

git ls-remote

qui donne (extrait) quelque chose comme :

From https://git.domain.tld/path/repo-name.git
6cdd9e1da490e96822bdf52f7d3f1f75b82149c7    HEAD
8fd6eea1236952e0bb9983720443fcbc461926a6    refs/heads/armv7l_disabled_and_add_restore
6cdd9e1da490e96822bdf52f7d3f1f75b82149c7    refs/heads/master
2cf666899a5bb2023e2ddb3193bfb7c343abd856    refs/heads/obsolete_armv7l_disabled
bae96d35a87f128ba71769d0f377976a224acdb6    refs/heads/php7.3_and_armv7l
b2fd3d7b19651af9b9bffa45aa983a8ebc307a90    refs/merge-requests/1/head


2d748703563598c1ff7ee1f87da70ca7b61bda20    refs/merge-requests/219/head
98c5cf60125a826fe84c017ffef720c3ad7cdfbd    refs/merge-requests/219/merge


1e14d21cf2e2454765588ee8f88a3c36fa29f2b6    refs/tags/last-version-before-improving-install
b1b237cb1eb9f5165f380854c0a01e9c09c35901    refs/tags/last-version-before-improving-install^{}
fc42aaadefce0938ef8f1f39c0e3bbcd89cc8cfc    refs/tags/last-version-before-reinstall
77d391881e57bf7fcd9e4b29713185cb55e3b2c7    refs/tags/last-version-before-reinstall^{}


c1c19b9e515ef0cb051e20a93a01614ac6ea5faa    refs/tags/strxsh-to-bxstxr
7dd8d5681461ea2949ea3372848106c9a1cb5f03    refs/tags/strxsh-to-bxstxr^{}

Quoi qu’il en soit cela n’importe pas grand-chose, et heureusement, cela indiquerait un problĂšme sur le serveur git. La commande git ls-remote traitant des commits prĂ©sent cĂŽtĂ© serveur.

La seconde commande est plus intéressante pour ce cas :

git show-ref

Là encore on obtient une liste de hash suivi du nom complet de la référence.

8fd6eea1236952e0bb9983720443fcbc461926a6 refs/heads/armv7l_disabled_and_add_restore
6cdd9e1da490e96822bdf52f7d3f1f75b82149c7 refs/heads/master
6cdd9e1da490e96822bdf52f7d3f1f75b82149c7 refs/remotes/origin/HEAD
8fd6eea1236952e0bb9983720443fcbc461926a6 refs/remotes/origin/armv7l_disabled_and_add_restore
6cdd9e1da490e96822bdf52f7d3f1f75b82149c7 refs/remotes/origin/master
2cf666899a5bb2023e2ddb3193bfb7c343abd856 refs/remotes/origin/obsolete_armv7l_disabled
bae96d35a87f128ba71769d0f377976a224acdb6 refs/remotes/origin/php7.3_and_armv7l
c1612c9417396d16967e783f22e39daa9b095334 refs/stash
5dbff12b367eac2d18a2fe2b055329632b967266 refs/tags/killed-production-09-2019
217666aa2c36f1a54b4d7796fb3b7420443ab32b refs/tags/last-from-framboise03-resintall1
1e14d21cf2e2454765588ee8f88a3c36fa29f2b6 refs/tags/last-version-before-improving-install
fc42aaadefce0938ef8f1f39c0e3bbcd89cc8cfc refs/tags/last-version-before-reinstall


ed16ee7dec2ffae64e32910eb56d3aefd9983a2f refs/tags/rc1.0
cfccef099bbebaac95e0ead29b1799cd0608e389 refs/tags/rc1.1
940cc2bb749e9863bf12e2eac5c409c5b89d2879 refs/tags/rc2.0.0
c1c19b9e515ef0cb051e20a93a01614ac6ea5faa refs/tags/stresh-to-buster

Le problÚme semble venir de ces deux lignes :

8fd6eea1236952e0bb9983720443fcbc461926a6 refs/heads/armv7l_disabled_and_add_restore
8fd6eea1236952e0bb9983720443fcbc461926a6 refs/remotes/origin/armv7l_disabled_and_add_restore

La solution dans ce cas est de supprimer la rĂ©fĂ©rence invalide, mais dans mon cas ces deux rĂ©fĂ©rences adressent le mĂȘme commit, il n’y a donc pas d’ambiguĂŻté 

Si cela avait Ă©tĂ© le cas, il aurait fallu supprimer la rĂ©fĂ©rence invalide Ă  l’aide d’une commande du type :

git update-ref -m "remove ambiguous ref" -d refs/
votre-ref


Dans mon cas, durant l’investigation le problĂšme semble s’ĂȘtre rĂ©solu du lui-mĂȘme



ඏ

Contexte

  • Un checkout banal ou presque

  • Le problĂšme semble s’ĂȘtre rĂ©solu du lui-mĂȘme ou presque


D’abord ce checkout n’était pas vraiment banal, le contexte Ă©tait un peu plus compliquĂ©. Un rebase qui ne se passe pas super bien, ensuite on pousse cela sur une branche temporaire histoire de regarder ce qu’il y a rĂ©cupĂ©rĂ©, on tente des trucs et finalement, je me mets sur master, puis je supprime toutes les branches locales toucher par cet Ă©vĂšnement (donc, entre autres, un git branch -D armv7l_disabled_and_add_restore) et le checkout suivant se plante


Donc non, le contexte n’est pas celui de tous les commits (heureusement d’ailleurs).

J’utilise parfois git-cola pour certaines actions, comme la comparaison de branches et tout cela me laisse penser que c’est git-cola qui gardait des rĂ©fĂ©rences invalides actives



ඏ

Mise Ă  jour

Ayant pu retrouver ce cas de figure (en dehors d’un git rebase Ă  problĂšme), j’ai constatĂ© que la sĂ©quence de commande suivante rĂ©solvait l’erreur :

git checkout __la_branche__ # Erreur
git config --local checkout.defaultRemote origin
git checkout __la_branche__ # Erreur encore
git config --local --unset checkout.defaultRemote
git checkout __la_branche__ # Okay

Je dois en conclure Ă  un bug sur la version actuelle de git, surtout que l’analyse de rĂ©fĂ©rences n’a pas rĂ©vĂ©lĂ© l’ambiguĂŻtĂ© prĂ©tendue par le git checkout.


ඏ

Références

኿


â„č 2006 - 2024 | 🏠 Accueil du domaine | 🏡 Accueil du blog