Git:给定远程跟踪分支 - 如何查找它正在跟踪的远程/分支

时间:2018-05-15 21:31:16

标签: git

我有远程特殊的fetchspec

[remote "devall"]
url = https://BNahum90789@dcilpa670/scm/devops/dev4all.git
fetch = +refs/heads/dev/BNahum90789_2/*:refs/remotes/dev_BNahum90789/*

现在我推送到远程:

git push -u devall my:dev/BNahum90789_2/my_on_remote

所以我的远程跟踪分支看起来像这样:

git rev-parse --symbolic-full-name dev_BNahum90789/my_on_remote
refs/remotes/dev_BNahum90789/my_on_remote

鉴于此远程跟踪分支   '参/遥控器/ dev_BNahum90789 / my_on_remote' 如何在远程找到远程和分支的名称? (请注意,它不包含远程名称或本地跟踪分支!!!)

(我能想到的唯一方法就是查看所有遥控器的所有fetch-specs并查找哪一个匹配)

由于 波阿斯

2 个答案:

答案 0 :(得分:1)

你是对的,对于像这样的非常困难的情况,你必须遍历所有遥控器的所有fetch-specs。这类似于Git在获取内部时所执行的操作:它接受另一个Git呈现的每个引用(如git ls-remote remote-url所示)并在该特定远程的所有fetch行中运行它,以查看它映射到的名称。如果有多个输入名称映射到该输出名称,那就是错误。 1

在您的情况下,您没有输入名称,而是输出名称。无法保证从输出名称到可能的输入名称存在唯一的映射。您当然可以在该遥控器上运行git ls-remote以查看它们具有的输入名称,从而重复Git所做的工作。

(从本地分支名称转移起来要简单得多,这些名称要么将远程跟踪名称设置为上游,要么不这样做。)

1 在某些版本的Git中,你没有得到任何实际的错误,你只是得到了奇怪的行为。

答案 1 :(得分:0)

[remote "devall"]
url = https://BNahum90789@dcilpa670/scm/devops/dev4all.git
fetch = +refs/heads/dev/BNahum90789_2/*:refs/remotes/dev_BNahum90789/*

默认情况下,Git将远程名称嵌入远程跟踪分支名称中。当你把它拿出来时,你没有破坏任何东西, 跟踪r-t-b的一切仍然跟踪它们没有它,fetch仍然更新它们,它仍然有效。它只是让它更难以遵循。

  

如何在远程

上找到远程和分支的名称

查找将您的r-t-b名称映射到的refspec。

git config --get-regexp fetch refs/remotes/dev_BNahum90789

查看映射到该r-t-b名称的所有refspec。在你的情况下,你至少会得到

remote.devall.fetch +refs/heads/dev/BNahum90789_2/*:refs/remotes/dev_BNahum90789/*

并且对于一次性,很容易看到映射。如果您将多个遥控器映射到可能会导致问题的相同跟踪前缀,我认为这不是您的第一个指示,所以我将忽略这种可能性。

顺便说一句,我有

git config alias.grl '!f() { git config --local --get-regexp "${@-.}"; }; f' 
git config alias.gr '!f() { git config --get-regexp "${@-.}"; }; f'

默认搜索显示所有内容并使搜索更容易输入,git grl fetch BNahum可能会这样做。