J’utilise git à la ligne de commande avec PowerShell, et j’essaie d’utiliser quelque chose comme
git difftool HEAD^
Powershell semble traiter cela comme si je tapais
git difftool HEAD
alors le symbole du caret est parti. Si j’utilise plusieurs copies du caret, j’obtiens une erreur étrange:
git difftool HEAD^^ fatal: ambiguous argument 'HEAD@set': unknown revision or path not in the working tree. Use '--' to separate paths from revisions
Il est intéressant de noter que l’utilisation de quatre carets dans une rangée semble s’échapper, alors git difftool HEAD^^^^
fonctionne comme je l’ git difftool HEAD^
pour fonctionner.
J’ai essayé de m’échapper avec des citations simples, des citations doubles, des accents graves, rien ne semble aider.
Est-ce une fonctionnalité de PowerShell, ou ma configuration est-elle fausse quelque part?
J’ai trouvé le problème et c’était avec ma configuration 🙁
J’utilise Git pour Windows, qui fournit git.exe
dans un dossier / bin et git.cmd
dans un dossier / cmd. git.cmd
est un script batch qui git.exe
et fait d’autres choses.
Ces deux répertoires étaient dans mon PATH, avec / cmd venant en premier, donc quand j’ai tapé git
, git.cmd
était en cours d’exécution. Comme il s’agissait d’un script de traitement par lots, le curseur ne pouvait pas être utilisé. Dans le monde des cmd, un caret est échappé en tapant deux ( ^^
).
Je suppose que cela était en quelque sorte exigé deux fois, donc quatre carets seraient échappés à deux, puis un (je ne comprends pas vraiment ce bit). Je ne comprends pas non plus le message d’erreur lorsque deux ou trois carets sont utilisés.
Utilisez uniquement git.exe lorsque vous utilisez Git pour Windows avec PowerShell!
Vous pourriez être en mesure d’utiliser ~ au lieu de ^
git difftool HEAD ~
Notez que HEAD ^^ est identique à HEAD ~ 2
Essayez de vous échapper avec un back-tick: `
PS C:\>"Hello`^" Hello^
Je n’utilise pas git, c’est juste une idée, et si vous la mettez entre guillemets?
git difftool "HEAD^"
Le ^ est réservé comme caractère d’échappement dans l’environnement shell cmd. Vous pouvez avoir plus de chance en utilisant start-process et en le passant dans la liste des arguments, mais je ne l’ai pas testé.