【发布时间】:2020-09-07 19:16:03
【问题描述】:
- 我想限制从任何分支到我的主分支的任何形式的推送。
- 我想从客户端做这一切
- 例如我有3个分支master mtest mtest2
- 我不希望“git push -u origin master”在任何分支上工作。
- 如果我检查了 mtest,但如果我错误地运行“git push -u origin master”,这应该不起作用。
我写了 pre-push 钩子,但它只会在当前分支是 master 时停止推送 如果您运行“git push -u origin master”并且您位于 mtest 分支中,则它不起作用。 我还尝试查看是否可以获得推送参数,以便我们可以知道推送指向哪个分支,但不幸的是,我没有在 pre-push 钩子收到的参数中得到这一点。
我需要一种方法来完全阻止推送到 master 分支。 但是推送到其他分支必须照常进行。
任何方法都可以。
【问题讨论】:
-
尝试从你的 pre-push 钩子中读取
sys.stdin(读取每一行,打印每一行;运行git push origin branch1:branch2 branch3:master,并获得启发)。 -
sys.stdin 没有返回任何内容..我在这里遗漏了什么代码: print(sys.argv) print("Below stdin") for line in sys.stdin: print(line) bytes = sys .stdin.read() print(bytes) $ git push -u origin master ['C:/python_stuff/my_repos/m_fullapp/m_full_app/.git/hooks/pre-push', 'origin', 'git@github.com :magic/m_full_app.git'] 低于标准输入 Git 版本:git 版本 2.9.0.windows.1 当前分支:mtest 分支 master 设置为从源跟踪远程分支 master。一切都是最新的
-
在这种情况下,您的 Git 调用了他们的 Git,确定
git push origin master不需要做任何事情,因此什么也没做。你的钩子运行,但由于没有推送发生,所以没有输入行。使用git push,它实际上会导致服务器上发生事情。 -
谢谢@torek 的解释......这就是现在它工作正常的原因:)