如何配置git以避免意外的git推送
git克隆后,新repo中的配置如下所示:如何配置git以避免意外的git推送,git,Git,git克隆后,新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中实现这一点。gi
remote.origin.url=<some url>
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
如何配置?
提前谢谢
编辑:基本上,我想将默认的推式回购设置为不同于默认的获取/拉式回购。我不确定您现在是否可以在git中实现这一点。git fetch(在builtin fetch.c中)和git push(在builtin push.c中)的实现都调用内部函数remote_get(NULL)来标识要从/推送到的默认存储库 一个选项是创建一个别名来指定所需的回购。例如:
git config --add alias.mypush "push repo-for-push"
然后你可以:
git mypush
推动你想要的回购。当然,这并不完全是你想要的。(您也可以考虑“推送参数”来推动;参见最近的DOC更新,阐明了RePO参数。) < P>如果您可以从另一个分支中进行所有推送,我认为您可以配置该分支以将其单独的存储库推送到:
git checkout master
git branch outbound
git remote add destination <some url>
git config branch.outbound.remote destination
git签出主机
git分支出站
git远程添加目标
git config branch.outbound.remote destination
我还没有尝试过这个,您可能需要做更多的工作来创建一个完整的解决方案。如果您必须从主机上推,它也可能不适用于您。看起来像
git config remote.origin.receivepack /bin/false
使推送到远程源失败。将“git”命令包装在吃推送参数的东西中。我在脑海里写下了这样一句话:
~$ 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[@]}"
~$cat/usr/local/bin/git
#!/bin/bash
#git包装器
#防止推送到存储库
声明-a参数
声明msg=''
而[$#-gt 0]
做
如果[“$1”!=“推送”];然后
args=(“${args[@]}”“1”)
其他的
msg=“禁止推送”
fi
转移
完成
如果[${msg}-gt 0];然后
回显“$msg”
fi
/usr/bin/git“${args[@]}”
只需确保在“真正的”git命令之前将wrapped命令放在您的路径中。在版本中,git能够使用remote.name.pushurl
config设置从一个URL远程拉入并推入另一个URL。如果推送存储库不跟踪拉送存储库,我可以想象出奇怪的行为,但我怀疑Git只会尝试从当前/跟踪/匹配分支快进推送存储库,而不考虑当它询问同名的远程存储库时会拉什么
例如,如果您希望通过匿名git协议进行拉取,但通过SSH进行推送(可能需要SecurID令牌的值或进行身份验证的内容):
因此,基本上您希望将默认的推式回购设置为不同于默认的获取/拉式回购,对吗?也许你应该澄清一下。对,那是一样的,但用更少的词:)别名“推式回购换推”和“推式回购换推式回购”都是很好的解决办法。谢谢。正如@Novelocrat在回答中指出的,从1.6.4开始,这不再是事实。使用此解决方案,我必须手动合并两个分支,并正确地了解当前git push xor git pull的分支。如果在当前分支不正确的情况下,我无法将git配置为避免/取消/禁止git拉入或推入,那么这并不比别名更好。谢谢正如@Novelocrat的回答中所指出的,这不再是必需的。好主意,但它应该在用户文件系统中,并且当存在一些没有此限制的存储库时,它应该检查当前工作目录。谢谢。有些协议是只读的吗?这也会使推送到错误的存储库失败。@Andrew:对,如果你通过git协议克隆,你会被设置。如何恢复它?
git config remote.origin.receivepack /bin/false
~$ 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[@]}"
[remote "myremote"]
url = git://server/path
pushurl = user@server:/path