在git clone之后,新repo中的配置如下所示:
remote.origin.url=<some url>
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
然后,我可以执行“git pull”和“git push”。但我只对“git pull”感兴趣,因为我想推进另一个回购。
我能做的一件事是:
git add remote repo-for-push <some other url>
git push repo-for-push master
但我想配置git使用默认和不同的存储库进行拉取和推送,即:
git pull # pulls from origin
git push # pushes into repo-for-push, avoiding accidental push into the origin
如何配置? 提前谢谢。
编辑:
基本上,我想将默认的push repo设置为与默认的fetch / pull repo不同。
答案 0 :(得分:35)
看起来像
git config remote.origin.receivepack /bin/false
使推送到远程原点失败。
答案 1 :(得分:27)
在版本1.6.4中,Git使用remote.name.pushurl
配置设置获得了从一个URL进行远程提取并推送到另一个URL的功能。如果push-repository没有跟踪pull-repository,我可以想象出奇怪的行为,但是我怀疑Git会尝试从当前/跟踪/匹配分支快进来推送存储库,而不考虑它是什么当它询问遥控器的同名时会拉。
例如,如果你想通过匿名git协议,但通过SSH推送(也许你需要一个SecurID令牌或某些东西进行身份验证):
[remote "myremote"]
url = git://server/path
pushurl = user@server:/path
答案 2 :(得分:7)
我不确定你今天能用Git做到这一点。 git-fetch(在builtin-fetch.c中)和git-push(在builtin-push.c中)的实现都调用内部函数remote_get(NULL)来标识要从/推送到的默认存储库。 / p>
一种选择是创建一个指定所需仓库的别名。例如:
git config --add alias.mypush "push repo-for-push"
然后你可以:
git mypush
推送到您想要的回购。当然不完全是你想要的。 (您也可以考虑推送--repo参数;请参阅http://kerneltrap.org/mailarchive/git/2008/10/7/3537694了解最新的文档更新,以澄清--repo参数。)
答案 3 :(得分:0)
如果您可以从另一个分支执行所有推送,我认为您可以将该分支配置为具有自己的单独存储库以推送到:
git checkout master
git branch outbound
git remote add destination <some url>
git config branch.outbound.remote destination
我没有尝试过这个,你可能需要做更多的工作来创建一个完整的解决方案。如果你必须从主人那里推出,它也可能不适合你。
答案 4 :(得分:0)
将“git”命令包含在吃掉push参数的内容中。我写下了这个:
~$ cat /usr/local/bin/git #!/bin/bash # git wrapper # prevents pushing to repository declare -a args declare msg='' while [ $# -gt 0 ] do if [ "$1" != 'push' ]; then args=( "${args[@]}" "$1" ) else msg="No pushing" fi shift done if [ ${#msg} -gt 0 ]; then echo "$msg" fi /usr/bin/git "${args[@]}"
请确保在“real”git命令之前在路径中包含wrapped命令。