git - 获取git项目的默认分支名称

标签 git github branch git-branch

我使用repo init来初始化和同步源代码。在我使用的具体项目的目录下

git branch -r

列出所有分支。项目的默认分支称为“stable”,而不是 main 或 master。如何使用 gitbranch 命令获取默认分支的名称?

最佳答案

对于通过repo initreposync下载的源代码,所有项目及其分支都在-m指定的 list 文件中描述>。 list 有一个 default 节点,它有一些属性,其中可能包括 revision="foo"。对于 project 节点,如果它具有 revision="some_ref_name"revision="some_sha1sum"uploaded="some_ref_name",则其默认分支为some_ref_name。如果没有这些属性,则使用默认节点中的修订版本。请注意,ref 可以是标签或除分支之外的任何有效 git ref。默认节点和项目节点可能类似于

<default revision="some_ref_name" remote="origin" />
<project name="repo1" path="repo1" revision="some_ref_name" />
<project name="repo2" path="repo2" />
<project name="repo3" path="repo3" revision="afbdb1ba3bb7de1aa9c86e501d4ef635bdf05354" upstream="some_ref_name" />

但是,默认情况下,reposync 从引用头中 check out 分离的 HEAD。分离的 HEAD 更像是一个匿名分支。尽管它一开始指向与 ref 的 head 相同的提交,但基于分离的 HEAD 进行新的提交不会更新 ref。像 gitbranchgit for-each-ref 这样的 Git 命令没有多大帮助。

如果你想获取默认修订版或上游引用,最可靠的方法是解析 list 文件。在大多数情况下, list 是单个 xml 文件。解析它或在其中查找正则表达式很容易。但 list 文件可以有一个或多个嵌套 list 文件。 repo 工具还支持本地 list 。而在实际应用中,涉及多个manifest文件的情况更多。成功运行reposync后,您可以使用repo manifest -r -o foo.xml首先创建一个 list 文件。然后 grep 项目名称或路径并找到其上游。

假设您想在 foo.xml 中查找名为 bar 的项目的默认引用。

grep -E 'name="bar"' foo.xml | grep -oP '(?<=upstream=")[^"]+(?=")'

关于git - 获取git项目的默认分支名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73127297/

相关文章:

CVS:用分支替换 HEAD

git - 是否可以检测 http git remote 是聪明的还是愚蠢的?

git - git merge origin branchname 有什么作用?

java - Chris Banes实现ActionBar-PulltoRefresh,库错误等

git - 使用 Github 接口(interface)进行单个提交 pull 请求

version-control - 当您计划在将来进行重写时如何处理分支?

ruby - GitHub API : Tag a commit belongs to ( parallel for git describe --tag <sha> )

git - 如何有效地查看 git 下维护的重命名文件的内容?

github - 从Github生成Dockerfile自动构建-找不到标签

git - 为什么 'git bisect' 分支不知道?