当前位置:  开发笔记 > 开发工具 > 正文

Git:如何确定是否存在对提交的引用

如何解决《Git:如何确定是否存在对提交的引用》经验,为你挑选了1个好方法。

我需要找出是否存在对提交的引用.几乎有效的一件事是git show,如果ref不存在,有时会返回非零值.但是,它还接受当前源树中的路径.因此,如果我有一个名为mastermaster不存在ref 的文件,则git show成功.我找不到任何更具体的命令.

我想要接受的方法:

分支机构的名称

提交哈希值

标签

关键词如HEAD

编辑:我这样做是因为我想以编程方式对用户输入进行完整性检查.



1> poke..:

您可以使用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

请注意,遗憾的是,这也会接受其他对象类型,例如树:

$ git rev-parse --verify "HEAD^{tree}"
5fdca9a3c0db1e1414229a7b50dac20e4e87a3b8

您可以使用的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

因此,只需检查是否返回commit,您似乎有一个很好的方法来验证用户输入是否是有效的提交引用.

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有