Brug en caret (^), når du bruger Git til Windows i PowerShell

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg bruger git på kommandolinjen med PowerShell, og jeg forsøger at bruge noget som


git difftool HEAD^


Powershell synes at behandle dette som om jeg skrev


git difftool HEAD


så caret symbolet er væk. Hvis jeg bruger flere kopier af karmen, får jeg en underlig fejl:


git difftool HEAD^^
fatal: ambiguous argument 'HEAD@set': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions


Interessant nok synes at bruge fire biler i træk at flygte ned til en, så git difftool HEAD^^^^ fungerer som jeg forventer git difftool HEAD^ til at arbejde.


Jeg har forsøgt at undslippe caret med single citater, dobbelt citater, grave accenter, intet synes at hjælpe.


Er dette en funktion af PowerShell, eller er min opsætning fejlagtig et sted?

Bedste reference


Jeg fandt problemet, og det var med min opsætning :(


Jeg bruger Git til Windows, som giver git.exe i en/bin-mappe og git.cmd i en/cmd-mappe. git.cmd er et batch script, der ombryder git.exe og gør nogle andre ting.


Begge disse mapper var i min PATH, med/cmd kommer først, så da jeg skrev git, blev git.cmd kørt. Fordi dette var et batch script kunne caret ikke bruges. I cmd-verdenen undgår man en caret ved at skrive to af dem (^^).


Jeg antager, at dette på en eller anden måde blev påkrævet to gange, så fire carets ville blive rømt ned til to, så en (jeg forstår ikke denne smule). Jeg forstår også fejlmeddelelsen, når der anvendes to eller tre karetter.


Lektionen er ...



Brug kun git.exe, når du bruger Git til Windows med PowerShell!

Andre referencer 1


Du kan muligvis bruge ~ i stedet for ^


git difftool HEAD ~


Bemærk, at HEAD ^^ er det samme som HEAD ~ 2

Andre referencer 2


Prøv at undslippe karmen med en tilbagekrydsning: `


PS C:>"Hello`^"
Hello^

Andre referencer 3


Jeg bruger ikke git, det er bare en ide, hvad hvis du vedlægger det i citater?


git difftool "HEAD^"

Andre referencer 4


^ Er reserveret som escape karakter i cmd shell miljøet. Du har måske held og lykke ved at bruge startprocessen og passerer den i argumentlisten, men jeg har ikke testet det.