有没有办法设置一个git存储库,所以git pull默认为一个远程,git push默认为另一个?我知道我可以通过改变分支部分中变量的值来设置两者,但是如何分别对每个方向进行设置?remote.git/config
use*_*887 89
从Git 1.7.0开始,您可以使用以下命令设置:
git remote set-url --push origin https://your.push.com/blah/
Run Code Online (Sandbox Code Playgroud)
Chr*_*sen 26
对于Git 1.6.4及更高版本,请remote.<name>.pushurl使用git config进行设置.
有人可能会使用它来使用只读https:协议并使用基于ssh的协议进行推送.
说origin的是url(remote.origin.url)https://git.example.com/some/repo.git.它是只读的,但您可以通过基于ssh的"URL"进行写访问git@git.example.com:some/repo.git.执行以下命令,实现推送基于ssh的协议:
git config remote.origin.pushurl git@git.example.com:some/repo.git
Run Code Online (Sandbox Code Playgroud)
Mva*_*est 22
由于Git的1.8.3,您可以使用remote.pushDefault选项做你想要什么(即具有不同的默认遥控器的pull和push).您可以像任何其他选项一样设置选项; 例如,要将其设置为pushTarget遥控器,请使用
git config remote.pushDefault pushTarget
Run Code Online (Sandbox Code Playgroud)
此选项将具有以下效果:
git pull将从remote相关分支部分中的选项指定的远程拉出.git/config,同时git push将推送到指定的遥控器remote.pushDefault.请注意,您需要指定远程的名称,而不是URL.这使得此解决方案比涉及的解决方案更灵活remote.<name>.pushurl,因为(例如)您仍将拥有两个遥控器的跟踪分支.您是否需要或希望获得这种灵活性取决于您.
发布说明称此选项专门用于支持三角工作流程.
感谢MvanGeest链接到git 1.8.3 发行说明。这些发行说明说:
remote.pushdefault新的(覆盖“起源”事物)和branch.*.pushremote(覆盖
)配置变量更好地支持三角形“从一个地方拉出,推送到另一个地方”工作流程branch.*.remote。我一直使用这样的三角工作流程来进行开源贡献。例如:我有自己的 GitHub 分支llvm/llvm-project,并且我想让自己的main分支与上游的main. 所以我经常git pull upstream main; 如果我可以直接打字就方便了git pull。但是,我不希望有任何机会在我打算git push<return>这样做之前git push origin main<return>意外地推送到上游项目的存储库!所以,在今天之前,我的.git/config样子是这样的:
[remote "origin"]
url = git@github.com:Quuxplusone/llvm-project
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "upstream"]
url = git@github.com:llvm/llvm-project
fetch = +refs/heads/*:refs/remotes/upstream/*
[branch "main"]
merge = refs/heads/main
remote = origin
Run Code Online (Sandbox Code Playgroud)
根据上面引用的发行说明,我刚刚将本地存储库更改.git/config为:
[remote "origin"]
url = git@github.com:Quuxplusone/llvm-project
fetch = +refs/heads/*:refs/remotes/origin/*
[remote "upstream"]
url = git@github.com:llvm/llvm-project
fetch = +refs/heads/*:refs/remotes/upstream/*
[branch "main"]
merge = refs/heads/main
remote = upstream
pushremote = origin
Run Code Online (Sandbox Code Playgroud)
现在我可以做一个简单的git checkout main ; git pull从上游/主拉,和一个简单的git checkout main ; git push推送到原点/主。这就是我想要的“三角工作流程”。
从我可以从git config man page收集到的,上游 repo 是:
branch.remotegit pull/fetch和git pull对于给定的分支,我看不到默认情况下有两个单独的远程的任何方法。