【发布时间】:2019-02-06 19:59:00
【问题描述】:
在标准(非裸)Git 存储库中,以下命令都给出了基本相同的结果,因为它们列出了所有分支(每个命令后面的数字是通过管道传输到 wc -l 的命令的输出,只是为了保持事情简介):
R1) bare: false
pwd .../R1/.git
git branch 8
git for-each-ref refs/heads 8
git show-ref --heads 8
git for-each-ref refs/heads/* 8
git show-ref refs/heads/* 8
find ./refs/heads -type f 8
但在裸存储库中,显然并非总是如此:
R2) bare: true
pwd .../R2.git
git branch 24
git for-each-ref refs/heads 24
git show-ref --heads 24
git for-each-ref refs/heads/* 17
git show-ref refs/heads/* 13
find ./refs/heads -type f 14
R3) bare: true
pwd .../R3.git
git branch 15
git for-each-ref refs/heads 15
git show-ref --heads 15
git for-each-ref refs/heads/* 6
git show-ref refs/heads/* 6
find ./refs/heads -type f 6
R4) bare: true
pwd .../R4.git
git branch 36
git for-each-ref refs/heads 36
git show-ref --heads 36
git for-each-ref refs/heads/* 36
git show-ref refs/heads/* 0
find ./refs/heads -type f 0
因此,通过查看比此处显示的更多的存储库,前 3 个命令总是给出一致的答案,无论是裸的还是非裸的,但后 3 个给出的结果并不总是与前三个相同,而且并不总是一致彼此。谁能解释一下原因?
在使用非裸存储库时,我一直假设像 branch、show-ref 和 for-each-ref 这样的命令可以处理 refs/heads 目录的实际内容,但在裸存储库中,这不可能是真的,因为它们显示的结果比 refs/heads 目录中的文件多。
【问题讨论】:
标签: git