2012-03-07 27 views
7

Tôi đang sử dụng git tại dòng lệnh với PowerShell, và tôi đang cố gắng sử dụng một cái gì đó giống nhưSử dụng một dấu mũ (^) khi sử dụng Git cho Windows trong PowerShell

git difftool HEAD^ 

Powershell dường như điều này như là nếu tôi đã nhập

git difftool HEAD 

vì vậy biểu tượng dấu mũ đã biến mất. Nếu tôi sử dụng nhiều bản sao của caret, tôi nhận được một lỗi lạ:

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

Điều thú vị là sử dụng bốn dấu mũ liên tiếp dường như thoát xuống một, vì vậy git difftool HEAD^^^^ công trình như tôi mong đợi git difftool HEAD^ để làm việc.

Tôi đã cố gắng thoát dấu nháy đơn bằng dấu nháy kép, dấu ngoặc kép, dấu trọng âm, không có gì có vẻ hữu ích.

Đây có phải là tính năng của PowerShell hoặc thiết lập của tôi không đúng ở đâu đó?

+0

Bạn có nhận được kết quả khác với 'git log -n 1 HEAD' và' git log -n 1 HEAD^'không? –

+0

Không, nó giống như mô tả ở trên - để có được hành vi đúng, tôi cần sử dụng 'git log -n 1 HEAD ^^^^' – jonnystoten

+0

Tôi đã tìm thấy vấn đề được nêu chi tiết trong câu trả lời của tôi bên dưới. Đã thay đổi tiêu đề để phản ánh tốt hơn vấn đề. – jonnystoten

Trả lời

6

tôi thấy vấn đề, và đó là với thiết lập của tôi :(

Tôi đang sử dụng Git cho Windows, cung cấp git.exe trong thư mục a/bin và git.cmd trong thư mục/cmd. git.cmd là một tập lệnh theo lô bao gồm git.exe và thực hiện một số nội dung khác.

Cả hai thư mục này đều nằm trong PATH của tôi, với/cmd đến trước, vì vậy khi tôi nhập git, git.cmd đang được chạy. Bởi vì đây là một tập lệnh batch nên không thể sử dụng dấu mũ. Trong thế giới cmd, một dấu mũ được thoát bằng cách gõ hai trong số chúng (^^).

Tôi đoán rằng điều này bằng cách nào đó được yêu cầu hai lần, vì vậy bốn dấu mũ sẽ được thoát xuống hai, sau đó một (tôi không thực sự hiểu bit này). Tôi cũng không hiểu thông báo lỗi khi sử dụng hai hoặc ba dấu.

Bài học là ...

Chỉ sử dụng git.exe khi sử dụng Git cho Windows với PowerShell!

0

Tôi không sử dụng git, đây chỉ là một ý tưởng, nếu bạn đính kèm nó trong dấu ngoặc kép thì sao?

git difftool "HEAD^" 
+0

Vâng tôi đã nói trong câu hỏi rằng tôi đã thử điều đó rồi. Có vẻ như không quan trọng những gì tôi kèm theo. – jonnystoten

0

^được đặt làm ký tự thoát trong môi trường vỏ cmd. Bạn có thể có may mắn hơn bằng cách sử dụng bắt đầu-quá trình và vượt qua nó trong danh sách đối số, nhưng tôi đã không được thử nghiệm đó.

2

Bạn có thể có thể sử dụng ~ thay vì^

git difftool ĐẦU ~

Lưu ý rằng ĐẦU ^^ cũng giống như ĐẦU ~ 2

+1

Không phải trong mọi ngữ cảnh. – Reactormonk

1

Cố gắng thoát khỏi caret với một back- đánh dấu: `

PS C:\>"Hello`^" 
Hello^ 
Các vấn đề liên quan