Sir*_*lot 8 git version-control
在我的应用程序中,我使用git进行某些外部文件的版本管理
我正在使用命令git show HEAD~1:some_file来获取文件的某个版本(基于git标记,提交哈希或与HEAD的关系).当文件不存在时,输出"致命"消息(我想到stderr管道).例如
致命:'HEAD~1'中不存在路径'some_file'
是否有一个干净的命令来检查某个版本中是否存在某个文件?
man*_*lds 14
你好吗?在脚本中?您始终可以检查退出代码.并且git cat-file可能更适合:
git cat-file -e HEAD~1:some_file
Run Code Online (Sandbox Code Playgroud)
使用该-e选项,当对象不存在时,它将以非零错误代码退出,而当对象不存在时,它将以0返回.但是,它也会打印出来fatal: Not a valid object name,但这很容易被抑制.
到目前为止,我发现的最好的事情是:
git ls-tree -r HEAD~1 --name-only
Run Code Online (Sandbox Code Playgroud)
输出特定版本的文件名列表。我需要解析输出并过滤特定文件。因此,它比我希望的要少一些直接的工作,只是小菜一碟。
小智 6
由于您只需要命令的退出代码,您可以将 stdout 和 stderr 重定向到 /dev/null:
git show HEAD~1:some_file > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
退出代码 0 表示文件存在。
您应该能够在 Ruby 系统调用中使用整行:
exit_code = system("git show HEAD~1:some_file > /dev/null 2>&1")
Run Code Online (Sandbox Code Playgroud)
为了在 Bash 中执行此操作的任何人的利益,您可以通过以下方式获取退出代码:
git show HEAD~1:some_file > /dev/null 2>&1
if [ $? -ne 0 ]; then
# the file does not exist
fi
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6678 次 |
| 最近记录: |