我正在尝试制作一个脚本,用Git简化一些常见任务。 其中,脚本应该能够确定当前分支的名称。如果用户已将某些内容提交到存储库,这可以正常工作,但如果用户尚未进行任何操作,我无法弄清楚如何执行此操作。例如,在空文件夹中:
git init
git checkout -b work
现在我想确定当前分支的名称:(因此预期输出为work
)
git branch
没有输出。鉴于:
git checkout work
给出
error: pathspec 'work' did not match any file(s) known to git.
和
git rev-parse --abbrev-ref HEAD
给出输出:
HEAD
fatal: ambiguous argument 'HEAD': unknown revision or path not in the
working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
然而,
cat .git/HEAD
给了我:
ref: refs/heads/work
但这似乎有点像黑客(窥视私人目录.git
)。当用户没有提交任何内容时,是否有任何可移植的方法来确定分支名称?
答案 0 :(得分:3)
支持的命令告诉您与TcpListener
相同的内容cat .git/HEAD
。在没有任何提交的新的存储库中,它仍然会打印git symbolic-ref HEAD
。
答案 1 :(得分:1)
这只是因为你尚未提交任何内容。请注意,还没有master
。在git中,分支只是提交的指针,所以没有提交它们就不存在了。一旦您提交了某些内容(自述文件或许可证是一个好的起点),您就可以看到您的分支。
.git/HEAD
输出您期望的原因是它基本上是指向分支的符号链接,即使该分支不存在。这是创建新孤立分支的承诺部分(孤立分支是在没有先前存在的提交的情况下创建的任何分支,因此在git init
和git commit
之间创建的所有分支都是孤立分支):任何{{ 1}}在分支不存在的情况下运行将在git commit
引用的分支上创建,如果它尚不存在则创建该分支。
如果要在不运行.git/HEAD
的情况下确定指向.git/HEAD
的内容,可以使用命令cat .git/HEAD
。如果您只想要实际的分支名称,可以传递git symbolic-ref HEAD
标记:--short
。