【问题标题】:Where does Git store tags?Git 在哪里存储标签?
【发布时间】:2011-07-27 02:27:30
【问题描述】:

Git 在哪里存储标签?我执行:

$ git tag
v0.1.0
v0.10.0
v0.11.0

但是目录.git/refs/tags 是空的。 Git 将这些标签存储在哪里?

谢谢。

【问题讨论】:

  • Git 获取标签的地方...这听起来像是绕口令!

标签: git tags


【解决方案1】:

它们也可以存储在.git/packed-refs

【讨论】:

  • 是的,你是对的。运行git gc --aggressive --prune后,我看到我之前创建的一个标签已经从.git/refs/tags中消失了,但出现在.git/packed-refs中。注意.git/packed-refs是文件,不是目录,所以你必须cat .git/packed-refs才能看到标签。
  • 事实上,这是它们最终将被存储的唯一地方。它们由git gc 打包,并且从不拆包,因为它们从不改变。真的,如果你除了满足你的好奇心之外还想做任何事情,最好的检查方法是通过git taggit for-each-ref [refs/tags],而不是直接查看 .git 目录。
  • Jefromi,标签是由git gc打包的,但是在“打包”点之间,git会创建解压的提交对象和解压的标签。
  • 另见git-pack-refs 命令。
  • 查看官方文档页面中的命令:git-scm.com/docs/git-pack-refs
【解决方案2】:

虽然当他 stated Git 还在 git gc 操作之后将标签存储在 .git/packed-refs 中时,wnoise 是正确的,在“打包”点之间(意思是,在 git gc 操作之间),Git 创建解压缩的提交对象并解压缩标签:

derek@derek-OptiPlex-960:~/Projects/test$ git tag
1
2
3
derek@derek-OptiPlex-960:~/Projects/test$ cat .git/packed-refs 
# pack-refs with: peeled 
55a87ab06897aca29285e58beb4e0de15af409fa refs/heads/master
89a6b171ee6d56bc3ce5a4cbd92c6a379594d974 refs/tags/1
55a87ab06897aca29285e58beb4e0de15af409fa refs/tags/2
derek@derek-OptiPlex-960:~/Projects/test$ ls .git/refs/tags
3
derek@derek-OptiPlex-960:~/Projects/test$

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-06
    • 2015-10-25
    • 2016-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多