我使用repo init
来初始化和同步源代码。在我使用的具体项目的目录下
git branch -r
列出所有分支。项目的默认分支称为“stable”,而不是 main 或 master。如何使用 gitbranch 命令获取默认分支的名称?
最佳答案
对于通过repo init
和reposync
下载的源代码,所有项目及其分支都在-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。像 gitbranch
或 git 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/