【发布时间】:2011-07-27 02:27:30
【问题描述】:
Git 在哪里存储标签?我执行:
$ git tag
v0.1.0
v0.10.0
v0.11.0
但是目录.git/refs/tags 是空的。 Git 将这些标签存储在哪里?
谢谢。
【问题讨论】:
-
Git 获取标签的地方...这听起来像是绕口令!
Git 在哪里存储标签?我执行:
$ git tag
v0.1.0
v0.10.0
v0.11.0
但是目录.git/refs/tags 是空的。 Git 将这些标签存储在哪里?
谢谢。
【问题讨论】:
它们也可以存储在.git/packed-refs
【讨论】:
git gc --aggressive --prune后,我看到我之前创建的一个标签已经从.git/refs/tags中消失了,但出现在.git/packed-refs中。注意.git/packed-refs是文件,不是目录,所以你必须cat .git/packed-refs才能看到标签。
git gc 打包,并且从不拆包,因为它们从不改变。真的,如果你除了满足你的好奇心之外还想做任何事情,最好的检查方法是通过git tag 或git for-each-ref [refs/tags],而不是直接查看 .git 目录。
git gc打包的,但是在“打包”点之间,git会创建解压的提交对象和解压的标签。
虽然当他 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$
【讨论】: