2015-02-23 107 views
4

我的团队将dev和master的用法作为几个repos的默认分支交替使用,我想编写一个脚本来检查默认分支,当进入一个目录时。git - 如何获取默认分支?

当这些回购中的某些回收请求被打开时,它们默认为'dev'或'master'作为合并目标。

我明白如何设置此信息,但无法恢复: https://help.github.com/articles/setting-the-default-branch/

是否有可用的一个git命令确定远程存储库默认分支?

+3

默认分支是github的东西,而不是git的东西。 – 2015-02-23 03:10:44

+0

您可以使用GitHub API,如下面的问题所示:http://stackoverflow.com/questions/16500461/how-do-i-find-the-default-branch-for-a-repository-using-the-github -v3-api – 2015-02-23 03:15:04

回答

2

是否有git命令可用来确定远程存储库的默认分支?

没有,似乎没有为:

git ls-remote -v https://github.com/<user>/<repo> 

将列出所有的分支,而不是HEAD(这是指定默认分支的symref)

同样, GitHub Reference API可以列出标题,但不包括HEAD。

1

这对我的作品使用Git 2.1.10,使用从GitHub克隆资源库:

git branch -r --points-at refs/remotes/origin/HEAD 

这种方法的主要问题是,它列出远程分支指向头;然而,输出包括提示:

origin/HEAD -> origin/master 
    origin/master 
    origin/test123 

所以,你可以后期处理与grep或类似的输出,以找到一个带箭头:

git branch -r --points-at refs/remotes/origin/HEAD | grep '\->' | cut -d' ' -f5 | cut -d/ -f2 
0

似乎有点像一种变通方法解决方案但是这似乎工作:

$ cat .git/refs/remotes/origin/HEAD 
ref: refs/remotes/origin/master 
4

在从GitHub克隆回购测试与git的2.9.4(但在其他版本可能工作):

$ git symbolic-ref refs/remotes/origin/HEAD | sed '[email protected]^refs/remotes/origin/@@' 
master 
+1

谢谢!一个注意事项 - 非常确定'/'是分支名称中的合法字符(这是标签),所以我使用'... | sed的@^refs/remotes/origin/@@'' – nhed 2017-07-05 15:19:38

+1

@nhed这确实比较好,我会更新我的答案。 – danielkza 2017-07-05 20:43:15