Git存储标签的位置在哪里?

29
Git存储标签的位置在哪里?我执行了以下命令:
$ git tag
v0.1.0
v0.10.0
v0.11.0

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

谢谢。


3
Git获取标签的地方...听起来像绕口令! - Andriy Drozdyuk
2个回答

27

这些引用还可以被存储在.git/packed-refs文件中。


2
是的,你说得对。在运行 git gc --aggressive --prune 后,我发现我之前创建的一个标签已经从 .git/refs/tags 中消失了,但出现在了 .git/packed-refs 中。请注意,.git/packed-refs 是一个文件,而不是一个目录,所以你必须使用 cat .git/packed-refs 命令来查看标签。 - Derek Mahar
2
事实上,这是它们最终存储的唯一位置。它们由git gc打包起来,永远不会被解压缩,因为它们永远不会改变。如果你想做除了满足好奇心以外的任何事情,最好的方法是通过git taggit for-each-ref [refs/tags]来检查东西,而不是直接查看.git目录。 - Cascabel
Jefromi,标签是由 git gc 打包的,但在“pack”点之间,git 会创建未打包的提交对象和未打包的标签。 - Derek Mahar
1
还可以查看 git-pack-refs 命令。 - sschuberth
请查看官方文档页面中的命令:https://git-scm.com/docs/git-pack-refs - Guillaume Husta

9

虽然wnoise在这里说得没错,即Git也会将标签存储在.git/packed-refs文件中,在执行git gc操作期间,在“pack”点之间(也就是在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$

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接