2013-08-27 94 views
4

在我的應用程序存在,我用的git的一些外部文件混帳:文件檢查是否在某些版本

我使用像git show HEAD~1:some_file命令來獲取某個版本的版本管理(基於git的標籤,提交哈希或與HEAD的關係)的文件。 當文件不存在時,會輸出一個'致命的'消息(我認爲是stderr管道)。 例如

致命:路徑「SOME_FILE」不「HEAD〜1」

是否有一個乾淨的命令查看某個版本是否存在的文件存在嗎?

回答

3

到目前爲止,我已經找到了最好的事情是:

git ls-tree -r HEAD~1 --name-only 

在哪一個特定版本,輸出文件名列表。 我需要解析輸出並過濾特定的文件。因此,它比我希望的要少一些,但是小菜一碟。

10

你是怎麼用這個的?在腳本中?您可以隨時查看退出代碼。而git cat-file可能更適合:

git cat-file -e HEAD~1:some_file 

隨着-e選項,它會與非零錯誤代碼退出時,對象不存在,並與0時,它的作用。但是,它也會打印fatal: Not a valid object name,但這很容易被抑制。

+0

謝謝,我真的從(ruby)腳本中調用它。 'cat-file'與'git show' asaik沒什麼區別。 '-e'禁止stdout,但不是stderr。因此,仍然會有致命的問題。我希望有一個命令來問git:'這個文件是否存在?'而不是壓制它。 – SirLenz0rlot

3

因爲所有你需要的是從命令的退出代碼,你可以重定向輸出和錯誤到/ dev/null的:

git show HEAD~1:some_file > /dev/null 2>&1 

的退出代碼0表示該文件存在。

您應該能夠使用你的Ruby系統調用內的整條生產線:

exit_code = system("git show HEAD~1:some_file > /dev/null 2>&1") 

對於任何人在猛砸這樣做的好處,你可以得到退出代碼是這樣的:

​​
相關問題