J'essayais de créer une branche de master
avec la commande suivante,
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
quand Git a soudainement cessé de répondre. Je soupçonne que les ()
non échappés sont en quelque sorte à blâmer. Maintenant, chaque fois que j'essaie d'exécuter une commande Git, j'obtiens la même erreur:
git:176: command not found: _of_ProductSearchQuery
avec le nombre après git
augmentant chaque fois que je tape une commande.
Quelqu'un peut-il expliquer ce qui s'est passé? Et comment puis-je revenir à la normale? J'aimerais supprimer cette branche, mais comment puis-je le faire?
Quelqu'un peut-il expliquer ce qui s'est passé? [...] J'aimerais pouvoir supprimer cette branche, mais Git ne fonctionnera pas pour moi.
En exécutant
git branch SSLOC-201_Implement___str__()_of_ProductSearchQuery
dans zsh, vous n'avez créé aucune branche . Au lieu de cela, vous avez accidentellement défini trois fonctions Shell , appelées git
, branch
et SSLOC-201_Implement___str__
, qui ignorent leurs paramètres (le cas échéant) et dont le corps est _of_ProductSearchQuery
. Vous pouvez vérifier par vous-même que c'est bien ce qui s'est passé, en appelant la commande intégrée zsh appelée functions
, qui répertorie toutes les fonctions Shell existantes:
$ functions
SSLOC-201_Implement___str__ () {
_of_ProductSearchQuery
}
branch () {
_of_ProductSearchQuery
}
git () {
_of_ProductSearchQuery
}
Malheureusement, bien que les deux autres fonctions du shell ne posent pas de problème, , la fonction du shell appelée "git" ombrage désormais le de bonne foi git
commande!
$ which git
git () {
_of_ProductSearchQuery
}
# but the real "git" is a binary file that lives in /usr/local/bin/git (or some similar path)
Par conséquent, vous obtiendrez ultérieurement l'erreur
command not found: _of_ProductSearchQuery
chaque fois que vous essayez d'exécuter une commande Git, par ex. git log
, git status
, etc. (en supposant bien entendu qu'aucune commande appelée _of_ProductSearchQuery
n'existe).
[...] J'ai la même erreur:
git:176: command not found: _of_ProductSearchQuery
(avec le nombre après
git
augmentant chaque fois que je tape une commande)
Ce nombre correspond simplement à la valeur de HISTCMD
, une variable d’environnement contenant
Le numéro d'événement d'historique actuel dans un shell interactif, en d'autres termes, le numéro d'événement de la commande qui a provoqué la lecture de
$HISTCMD
.
Voir le manuel zsh pour plus de détails.
Et comment puis-je revenir à la normale?
Supprimez simplement la fonction Shell problématique (et les deux autres que vous avez créées par accident alors que vous y êtes):
unset -f git
unset -f branch SSLOC-201_Implement___str__
Alors tout devrait bien se passer.
unset
est également ombré?!Bonne question ! Je vous renvoie à excellent commentaire de Wumpus W. Wumbley ci-dessous.
Oui, comme indiqué dans les commentaires, les parenthèses sont des caractères valides dans les noms de branche Git; il vous suffit de citer le nom de manière appropriée, par exemple.
$ git branch 'foo()bar'
$ git branch
foo()bar
* master
$ git checkout 'foo()bar'
Switched to branch 'foo()bar'
Cependant, la nécessité de citer de tels noms à chaque fois lorsqu'ils sont utilisés comme arguments de ligne de commande devrait vous convaincre d'éviter les parenthèses dans les noms de référence. De manière plus générale, vous devriez (autant que possible) éviter les caractères qui ont une signification particulière dans les obus, afin d'éviter de telles surprises.
De toute façon, vous devriez garder les noms de vos branches courtes et agréables. Des descriptions longues comme
SSLOC-201_Implement ___ str __ () _ of_ProductSearchQuery
appartiennent aux messages de validation, pas aux noms de branche.