.git/refs/heads 没有得到所有分支

.git/refs/heads not getting all branches

当我运行.git/refs/heads时,它只显示我在本地签出的分支。 如何为我的所有分支创建 refs/heads? 或者如何为所有 origin/?

创建 refs/heads

我正在使用 Azure DevOps。我正在使用他们的预定义变量,这些变量将仅 return 拉取请求的 source/target 的分支引用。但是,这些变量将 return,例如 refs/heads/feature。因此,在我获得 refs 之后,我在我的一项 devops 任务中使用 git rev-list $branch-ref 。但它给了我模棱两可的论点 'refs/heads/feature': unknown revision ERROR。我认为发生这种情况是因为正在发生的 git 结帐没有这些引用。但是,当我使用 origin/feature 时它工作正常。所以我试图找到一种方法将所有 origin/ 变成 refs/heads/

.git/refs 文件夹中,您发现:

  • heads文件夹,包含本地分支的所有refs
  • remotes 文件夹,包含所有遥控器(例如 origin
  • remotes/origin 文件夹,包含 origin 个远程分支
  • 的所有引用
  • tags 文件夹,包含标签的所有引用

如果存储库已打包(这可能会自动发生),您将在文件 .git/packed-refs.

中找到引用

根据您的需要,提取引用的正确方法是通过 git 本身。
应避免访问原始 .git 文件。

.git/refs/heads 不会包含所有本地分支机构的列表。有些会在 .git/packed-refs.

要查看所有本地分支机构,请使用 git branch

How can I create refs/heads to all my branches? Or how can I create refs/heads to all the origin/?

除非您打算进行修改,否则不应创建本地分支。您可以改为参考 remote tracking branchorigin/foo 指的是 origin 上的分支 foo

如果您真的想要,请使用 git branch -r 编写一个小脚本来获取所有远程分支的列表。这是 Ruby.

中的示例
remotes = `git branch -r`.split("\n").map(&:strip)
locals = remotes.map { |r| r.sub(%r{^.?+/}, ''); }
remotes.zip(locals) { |r,l| system("git branch #{l} #{r}") }