排除git push的配置引用

时间:2013-04-05 08:51:29

标签: git

当我致电git remote show <remote_name>时,我会在下面看到

  Local branches configured for 'git pull':
    master           merges with remote master
  Local refs configured for 'git push':
    master           pushes to master           (up to date)

如何排除已配置的推送?所以来自master分支的git push将抛出错误,只有push将使用显式远程名称git push <remote_name> <remote_branch_name>

3 个答案:

答案 0 :(得分:2)

如果您将push.default的gitconfig更改为nothing,则每次都需要在所有分支上指定<remote_name><remote_branch_name>

git config --global push.default nothing(删除--global for project specific config)

设置完成后,当你进行git push时,你会收到类似于以下内容的错误。

  

致命:您没有指定要推送的任何refspec,而push.default是   “无”。

<强>更新

如果您只想禁用自动推送特定分支,我只需删除跟踪配置。

一种方法是修改项目的.git/config并删除[branch="branchname"]配置。

或以编程方式:git config --unset branch.branchname.remote删除分支配置的remote=remotename部分。

答案 1 :(得分:1)

确保您的远程配置没有push配置:

git config --unset remote.<remote_name>.push

push.default配置为nothing

git config push.default nothing

不幸的是,似乎git remote show <remote_name>似乎没有考虑config.push设置(它始终假定为'匹配'),因此Local refs configured for 'git push'仍会在输出中列出。

答案 2 :(得分:1)

目前还不完全清楚你想要什么,但是如果你想一起禁用裸git push,你可以这样做:

git config --local push.default nothing

这意味着裸git push将不会采用默认的refspec,您必须指定它。我能想到的另一件事就是创建一个别名,然后用它来推送。所以,在.gitconfig

中就是这样的
[aliases]
p = "!_() { cur=$(git symbolic-ref HEAD); if test \"$cur\" = refs/heads/master -a -z \"$1\"; then { echo \"please specify push target\"; exit 1; } ; fi; git push \"$@\" ; }; _"

然后git p会在主服务器上的命令行上没有指定其他命令行参数时拒绝推送。否则,它会使用推送默认值。

我相信你现在可以通过git实现所有灵活性。如果你需要更多的东西,或许在git列表上谈论它可能会说服某人为你实现一个功能。但是,你需要一个引人注目的用例。