我需要找出是否存在对提交的引用.几乎有效的一件事是git show,如果ref不存在,有时会返回非零值.但是,它还接受当前源树中的路径.因此,如果我有一个名为master但master不存在ref 的文件,则git show成功.我找不到任何更具体的命令.
我想要接受的方法:
编辑:我这样做是因为我想以编程方式对用户输入进行完整性检查.
您可以使用git rev-parse该--verify标志来解析各种引用并将它们解码为SHA-1哈希值.这将删除所有无效的引用和文件路径:
$ git rev-parse --verify HEAD
a93775d7fcd9bf27bbd89ee69e84a03e06223e9b
$ git rev-parse --verify HEAD~2
4100b19c32fac3e2c0838c85d180cd4f50500c2f
$ git rev-parse --verify master
e88352936f4ffc703cdfb0da95ad5592456feb0b
$ git rev-parse --verify origin/master
e88352936f4ffc703cdfb0da95ad5592456feb0b
$ git rev-parse --verify README.md
fatal: Needed a single revision
$ git rev-parse --verify doesnotexist
fatal: Needed a single revision
Run Code Online (Sandbox Code Playgroud)
请注意,遗憾的是,这也会接受其他对象类型,例如树:
$ git rev-parse --verify "HEAD^{tree}"
5fdca9a3c0db1e1414229a7b50dac20e4e87a3b8
Run Code Online (Sandbox Code Playgroud)
您可以使用的git cat-file是直接在Git的对象数据库上运行.所以它只能找到实际存在的对象.它还会解析您传递给它的任何类型的修订参数,因此它可以理解各种引用.通过使用该-t参数,它将为您提供要传递的对象的类型.如果该类型是提交,那么您传递的任何内容都是指定现有提交的有效方式:
$ git cat-file -t HEAD
commit
$ git cat-file -t HEAD~2
commit
$ git cat-file -t master
commit
$ git cat-file -t origin/master
commit
$ git cat-file -t README.md
fatal: Not a valid object name README.md
$ git cat-file -t doesnotexist
fatal: Not a valid object name doesnotexist
$ git cat-file -t "HEAD^{tree}"
tree
Run Code Online (Sandbox Code Playgroud)
因此,只需检查是否返回commit,您似乎有一个很好的方法来验证用户输入是否是有效的提交引用.
| 归档时间: |
|
| 查看次数: |
1975 次 |
| 最近记录: |