gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 13:20:01 25 4
gpt4 key购买 nike

我需要查明是否存在对提交的引用。几乎可行的一件事是 git show 如果引用不存在,它有时会返回非零值。但是,它也接受当前源代码树中的路径。因此,如果我有一个名为 master 的文件,但 ref master 不存在,则 git show 会成功。我无法找到任何更具体的命令。

我想要接受的方法:

  • 分支机构名称
  • 提交哈希值
  • 标签
  • 像 HEAD 这样的关键字

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

最佳答案

您可以使用带有 --verify 标志的 git rev-parse 来解析各种引用并将它们解码为它们的 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 并且您似乎有一个很好的方法来验证用户输入是否是有效的提交引用。

关于Git:如何确定是否存在对提交的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34628532/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com