【问题标题】:How to block/restrict push to remote master totally如何完全阻止/限制推送到远程主机
【发布时间】: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 的解释......这就是现在它工作正常的原因:)

标签: git github hook githooks


【解决方案1】:

查看有关 pre-push hooks 的文档,以及随任何 repo 提供的 .git/hooks/pre-push.sample

关于目标引用的信息通过标准输入传递,而不是通过sys.argv

【讨论】:

  • sys.stdin 没有返回任何内容
  • 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。一切都是最新的
  • 脚本顶部的注释说您从pre-commit 示例开始。您是在编辑 pre-push 还是 pre-commit 挂钩?
  • 它的 pre_push only ...我首先编辑了 pre_commit 并将内容复制到 pre_push ..因此存在 pre_commit 示例描述。但是文件名是 pre_push 只是因为我之前共享输出而正确执行,但它没有列出 sys.stdin 内容。
【解决方案2】:
  1. 打开 GitHub 存储库
  2. 点击Settings
  3. 点击侧边栏中的Branches
  4. 点击Add rule
  5. 启用Require pull request reviews before mergingRequire status checks to pass before merging

【讨论】:

  • 嗨,尼克感谢您的建议,但我正在寻找客户端解决方案。可以在本地从 git config 完成吗?我尝试了一些标志,但它对我不起作用。这可以通过钩子实现吗?
  • @Shell_Magic 客户端解决方案很容易被颠覆。至少使用客户端+服务器端的解决方案。
  • @phd 是的,但这是我们的要求......我们希望限制来自客户端......我们希望保留来自客户端站点的挂钩或任何限制而不做任何事情在服务器端更改。我发现很难找到客户端解决方案。
  • 从客户端“完全”阻止某些内容是没有意义的。如果脚本在客户端的计算机上运行,​​他们可以删除脚本并推送他们想要的任何内容。如果您不相信用户会遵循您的建议,则需要一个服务器端解决方案。
  • 如果问题是您不想编辑 GitHub 设置,只需在 .github/workflows 中编写一个 GitHub 操作,以在不正确的提交时使构建失败。
猜你喜欢
  • 1970-01-01
  • 2015-01-22
  • 2020-01-18
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 2021-10-01
  • 2010-10-07
  • 1970-01-01
相关资源
最近更新 更多