2013-09-30 100 views
0

我在嘗試診斷一個別名的問題,該別名允許用戶檢出文件的最近提交,以便遏制其最近的更改。我不想重置重置,只需將舊版本檢入到新一輪提交中即可。Git別名給出pathspec錯誤

如果沒有錯誤地傳遞文件名,那麼將整個回購分支到HEAD ^也是很重要的,因此-sh用於sh(如果$ 1沒有填充某些東西時會窒息)。

如果有問題,我們都在同一個存儲庫中工作,並且我是唯一不是完整新手的用戶,但我不是任何方式的git master。

我們在Windows 7

這裏使用MsysGit 1.8.4是別名:

[alias] 
    back1=!sh -uc 'git checkout HEAD^ $1 ' - 

然而,這有時會像

$ git back0 format_tests.sas 
error: pathspec 'format_tests.sas' did not match any file(s) known to git. 

錯誤但是如果我跑

$ git checkout HEAD^ format_tests.sas 

直接從命令行,它工作正常。它似乎也很好地測試另一個git存儲庫。

我覺得這可能是一個引用問題,但我不知道在這一點上。

我不使用下面介紹的方法的原因是,如果我運行沒有文件的命令,我會得到類似於以下內容的東西,這在我們的新手環境中是不正確的(爲什麼我使用shell命令「-u」開關):

testgit.git/ (j=0,r=0)$ git back1 
Warning: you are leaving 1 commit behind, not connected to 
any of your branches: 

    a77dfed hlksdj; 

If you want to keep them by creating a new branch, this may be a good time 
to do so with: 

git branch new_branch_name a77dfed 

HEAD is now at 954f639... blakjsd 

感謝您的興趣和幫助!

回答

1

你的別名,並不需要通過shell中運行,你應該能夠做到這一點:

[alias] 
    back=checkout HEAD^ -- 

Git會自動追加別名參數,這意味着:

$ git back afile bfile cfile 

會變成這樣:

$ git checkout HEAD^ -- afile bfile cfile 

獎勵:注意使用雙連字符的「 - 」,這告訴CH eckout其餘參數是所有文件,否則可能會錯誤地將文件解釋爲現有分支或其他參考文件。

爲了解決海報中使用shell命令別名的要求,問題是子shell會將其工作目錄設置爲存儲庫的根目錄。下面是git help config不得不說:

alias.* 
    [...] Note that shell commands will be executed from the 
    top-level directory of a repository, which may not necessarily be 
    the current directory. GIT_PREFIX is set as returned by 
    running git rev-parse --show-prefix from the original current directory. 

好消息是GIT_PREFIX變量,你可以在你的命令,像這樣使用:

back1=!sh -uc 'git checkout HEAD^ -- "$GIT_PREFIX/$1"' - 
+0

在我們的環境中,沒有文件運行此給出了一個奇怪的事情 - - 我編輯了上面的問題來描述它。奇怪的事情會導致混亂。否則,我甚至不會擔心別名。 – forkandwait

+0

感謝您對答案的更新,而不只是說RTFM;)。將它標記爲已回答,但我即將嘗試使用更好的錯誤消息進行擴展,這可能會破壞所提供的良好修改... – forkandwait