git 相当于 mercurials phases 功能,用于防止分支被推送

git equivalent for mercurials phases feature for preventing a branch to be pushed

我目前面临的问题是,由于其他人做出的一些决定,我们需要转移到 git。

因此,对于 mercurial,我们拥有强大的阶段功能,它允许我管理本地分支,这些分支在发出 push(all) 时将被忽略。最大的优势是,阶段功能独立于服务器托管的主存储库。我可以在没有任何人许可的情况下在我自己的本地使用它。

和 git,据网络搜索告诉我,您可以添加一些带有分支过滤的挂钩到公共服务器托管的主存储库。我的问题是:作为开发人员,除了 create/delete/push/pull,我没有任何控制权。我不能在那里安装任何挂钩,管理服务器的人永远不会手动修改它们。一切都由 ALM 软件管理。

所以我在网上找到的 git 的解决方案不能解决我的问题。

这引出了我的问题:git 中是否有任何其他机制可以替代 mercurial phases 的功能,这使我能够在本地存储库上防止某些分支被推送到服务器托管存储库?

当您不在命令行上给出明确的规范时,您始终能够明确配置推送或获取哪些 refspecs,并且自包含否定匹配的 v2.29 以来。

要将所有匹配的分支推到原点而不是这个分支,

git config --unset-all remote.origin.push
git config --add remote.origin.push :
git config --add remote.origin.push ^refs/heads/notthisone

从那时起,平原

git push

将推送所有匹配的分支,但不匹配 nottthisone 即使它匹配。

我看到 git push 文档没有更新以反映新功能,push 和 fetch 都使用相同的引擎来处理模式,我只是尝试了上面的顺序并且它像宣传的那样工作。

这是我测试的配置文件:

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "t2"]
    url = ../t2
    fetch = +refs/heads/*:refs/remotes/t2/*
    push = :
    push = ^refs/heads/b2