2012-03-07 19 views
7

estoy usando git en la línea de comandos con PowerShell, y yo estoy tratando de usar algo comoEl uso de un símbolo de intercalación (^) al usar Git para Windows PowerShell en

git difftool HEAD^ 

Powershell parece tratar esto como si escribí

git difftool HEAD 

para que el símbolo de símbolo de intercalación desaparezca. Si utilizo varias copias del símbolo de intercalación, me sale un error extraño:

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

Curiosamente, utilizando cuatro símbolos de intercalación en una fila parece escapar a uno, por lo git difftool HEAD^^^^ obras como espero git difftool HEAD^ para trabajar.

He intentado escapar el símbolo de intercalación con comillas simples, comillas dobles, acento grave, nada parece ayudar.

¿Es esta una característica de PowerShell, o es mi configuración mal en alguna parte?

+0

¿Te obtener resultados diferentes de 'git log -n 1 HEAD' y 'git log -n 1 CABEZA ^'? –

+0

No, es el mismo que el descrito anteriormente - para obtener el comportamiento correcto que necesito usar 'git log -n 1 CABEZA ^^^^' – jonnystoten

+0

me encontré con el problema detallado en mi respuesta a continuación. Cambió el título para reflejar mejor el problema. – jonnystoten

Respuesta

6

he encontrado el problema, y ​​estaba con mi configuración :(

Estoy usando Git para Windows, que proporciona git.exe en una carpeta/bin y git.cmd en una carpeta/cmd. git.cmd es una secuencia de comandos por lotes que envuelve git.exe y hace algunas otras cosas.

Ambos directorios estaban en mi RUTA, con/cmd como el primero, de modo que cuando escribí git, se ejecutó git.cmd. Como se trataba de un script por lotes, el símbolo de intercalación no se pudo usar. En el mundo de cmd se escapa un símbolo de intercalación escribiendo dos de ellos (^^).

supongo que esto de alguna manera estaba siendo requerido en dos ocasiones, por lo que cuatro símbolos de intercalación se escapó a dos, entonces uno (realmente no entienden este bit). Tampoco entiendo el mensaje de error cuando se utilizan dos o tres referencias.

la lección es ...

Utilice únicamente git.exe al usar Git para Windows PowerShell con!

0

No consumo git, esto es sólo una idea, lo que si se encierra entre comillas?

git difftool "HEAD^" 
+0

Sí, dije en la pregunta que ya lo intenté. No parece importar en qué lo encierre. – jonnystoten

0

El^está reservado como el carácter de escape en el entorno de shell cmd. Es posible que tengas más suerte al utilizar el proceso de inicio y pasarlo a la lista de argumentos, pero no lo he probado.

2

Es posible que pueda utilizar en lugar de ~^

git difftool CABEZA ~

Tenga en cuenta que CABEZA ^^ es la misma que CABEZA ~ 2

+1

No en todos los contextos. – Reactormonk

1

Trate escapar el símbolo de intercalación con un Back marque: `

PS C:\>"Hello`^" 
Hello^ 
Cuestiones relacionadas