2012-03-07 25 views
7

我使用的蠢貨使用PowerShell命令行中使用時,適用於Windows的Git,和我想要使用像使用插入符號(^)在PowerShell中

git difftool HEAD^ 

PowerShell的似乎將此視爲如果我輸入

git difftool HEAD 

所以脫字符號不見了。如果我使用插入符號的多個副本,我得到一個奇怪的錯誤:

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

有趣的是,在連續使用四個插入符號似乎向下逃生之一,所以git difftool HEAD^^^^作品如我所料git difftool HEAD^工作。

我試過用單引號,雙引號,重音符號來轉義脫字符,似乎沒有任何幫助。

這是PowerShell的一個特性,還是我的設置在某處出錯?

+0

你從'git log -n 1 HEAD'和'git log -n 1 HEAD ^'得到不同的結果嗎? – 2012-03-07 12:55:05

+0

不,它是如上所述 - 爲了得到正確的行爲,我需要使用'git log -n 1 HEAD ^^^^' – jonnystoten 2012-03-07 12:56:52

+0

我在下面的答案中找到了詳細的問題。改變標題以更好地反映問題。 – jonnystoten 2012-03-08 10:14:45

回答

6

我發現這個問題,這是我的設置:(

我使用Git for Windows,它在/ bin文件夾中提供git.exe,在/ cmd文件夾中提供git.cmdgit.cmd是一個批處理腳本,它包裝git.exe並執行其他一些操作。

這兩個目錄都在我的路徑中,首先是/ cmd,所以當我輸入git時,正在運行git.cmd。因爲這是批處理腳本,所以不能使用插入符號。在cmd世界中,通過輸入其中的兩個(^^)可以使脫字符號逃脫。

我想這在某種程度上需要兩次,所以四個脫字符將會被轉移到兩個,然後是一個(我真的不明白這一點)。當使用兩三個插文時,我也不明白錯誤消息。

的教訓是...

只有使用Git的Windows PowerShell的時候使用git.exe!

0

我不使用git,這只是一個想法,如果你把它放在引號中怎麼辦?

git difftool "HEAD^" 
+0

是的,我在問題中說過,我已經試過了。似乎並不重要,我把它放進去。 – jonnystoten 2012-03-07 12:24:45

0

^被保留爲cmd shell環境中的轉義字符。使用start-process並將它傳遞給參數列表可能會有更好的運氣,但我沒有測試過。

2

您可能能夠使用〜代替^

混帳difftool HEAD〜

注意HEAD ^^相同HEAD〜2

+1

不適用於任何情況。 – Reactormonk 2012-03-07 16:05:24

1

嘗試用背逃逸插入符勾選:`

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