我有许多使用不同Github URL格式的存储库。我希望所有存储库始终通过HTTPS从Github获取,并推送SSH。这使我的生活更轻松,使用ssh键/代理转发/...
这对我来说很有意义,但它没有重写几个案例:
[url "git@github.com:"]
pushInsteadOf = "https://github.com/"
[url "https://github.com/"]
insteadOf = "git@github.com:"
例如,对于具有三个遥控器的测试存储库:
那是:
% git remote -v
hh https://github.com/foo/bar (fetch)
hh https://github.com/foo/bar (push)
hs https://github.com/foo/bar (fetch)
hs git@github.com:foo/bar (push)
sh git@github.com:foo/bar (fetch)
sh https://github.com/foo/bar (push)
...此配置生成:
% cat .gitconfig
[url "git@github.com:"]
pushInsteadOf = "https://github.com/"
[url "https://github.com/"]
insteadOf = "git@github.com:"
% HOME=. git remote -v
hh https://github.com/foo/bar (fetch)
hh git@github.com:foo/bar (push)
hs https://github.com/foo/bar (fetch)
hs https://github.com/foo/bar (push) # wrong
sh https://github.com/foo/bar (fetch)
sh https://github.com/foo/bar (push) # wrong
git config snippet会在所有情况下生成“http fetch,ssh push”遥控器吗?
答案 0 :(得分:1)
这对我来说很有意义,但它并没有重写几个案例
如果您为存储库配置了显式配置的推送URL,则无法使用pushInsteadOf
覆盖它。请参阅documentation:
<强>
url.<base>.pushInsteadOf
强>任何以此值开头的网址都不会被推送到;相反,它 将被重写为以
<base>
开头,结果网址将为 被推到。在一些网站服务大量的情况下 存储库,并使用多种访问方法为其提供服务 其中不允许推送,此功能允许人们指定 只有拉取的URL并让Git自动使用适当的URL 推送,即使是网站上从未见过的存储库。当更多 一个pushInsteadOf
个字符串与给定的URL匹配,最长匹配 用来。 如果某个遥控器有明确的pushurl,Git会忽略它 设置该遥控器。
请注意,url.<base>.insteadOf
设置无条件应用,这解释了为什么您的SSH推送网址(hs
遥控器)被替换为HTTPS网址的原因:
<强>
url.<base>.insteadOf
强>任何以此值开头的网址都会被重写以启动, 相反,
<base>
。在某些网站服务量很大的情况下 存储库,并使用多种访问方法为它们服务,以及 有些用户需要使用不同的访问方法,此功能允许 人们指定任何等效的URL并拥有Git 自动将URL重写为最佳替代方案 特定用户,即使是网站上前所未见的存储库。 当多个insteadOf
字符串与给定的URL匹配时,时间最长 使用匹配。
所以,要实现你的目标,你必须
从您的git配置文件中删除url.<base>.insteadOf
设置。
为您偏离所需方案的所有遥控器单独设置提取/拉取和/或推送网址。