如何使git分支的上游引用变为只读?

7
如何告诉git,虽然我想允许在某些分支上“git fetch”,但我不想在那些分支上允许“git push”?
换句话说,我有一些反映“当前工作”的分支,我想将它们推送到我的上游存储库。但是我有其他分支(包括主分支),我打算反映本地存储库中的“其他工作”,并且我不想从这里跨越这些分支。
这是我的远程存储库,在其他情况下,我希望能够将其推送到所有分支。但是从这个特定的本地实例中不能这样做。
我认为这是可能的,因为“git remote show origin”有时会告诉我已经配置了一些分支进行“git pull”,但没有进行“git push”。但是我不理解配置文件足够好以手动创建此效果,并且我也不理解git的命令行语言足够好以在那里执行此操作。
现在,我所能做的最好的事情就是确保我本地副本已过期,适用于我想保持原始的上游分支。(此外,通过在我的git push命令行中明确指定接收分支--指定我只想将其推送到对应于本地检出分支的远程实例--可以防止推送到不需要的分支。但我想消除这种复杂性。)

1
可能是禁止在git中将代码推送到主分支的远程仓库的重复问题。 - ralphtheninja
似乎解决方案是在接收存储库上设置"receive.denycurrentbranch"。但我正在寻找对发送存储库的控制。 - rdm
你可以设置 push.default = upstream,然后 git push 命令不带额外参数时只会推送本地检出的分支。这将成为下一个 git 版本的默认行为。 - Borealid
我需要特定版本的git才能使其工作吗?我尝试了git config --add push.default upstream,但是当我尝试进行试验性更改时,我遇到了以下问题:$ git add READMEerror: Malformed value for push.default: upstreamerror: Must be one of nothing, matching, tracking or current. - rdm
无论如何,我并不完全确定upstream的作用,但是看起来push.default = tracking对我来说是正确的:如果我没有在本地声明一个上游分支正在跟踪我的本地分支,我就不能使用裸的'git push'将其传播到它。 - rdm
2个回答

0

与Borealid在评论中所说的类似,在您的本地副本中,您应该设置git config push.default upstream,然后另外确保那些您不想能够推送到的分支没有分配上游分支。有一个git branch --set-upstream命令,但它不会让您设置空的上游配置以便删除它,因此您需要手动编辑您的.git/config文件,并从相应分支的部分中删除merge = refs/heads/*行。


0

实际上,看起来 push.default = current 可以满足我的需求。

虽然不完全是我要求的,但已经“足够好了”。而且它的优点在于简单明了。

简洁是一种美德——使得理解和使用系统变得简单明了。

它也紧密地模仿了我认为从 git pull 中看到的行为。


引用自 git help config: "tracking - upstream 的弃用同义词。"。 - Borealid
好的,这个问题从哪个版本开始出现?(为什么要破坏现有的文档等内容?) - rdm

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接