首页 > 解决方案 > 防止在 GitHub 的主分支上修改文件

问题描述

在我们的main分支中,我们有一个包含特定配置的文件。我们称这个文件为.example-conf

当开发人员创建他的分支并拉取请求时。他可以更改.example-conf文件的内容,因此他的拉取请求将基于这些配置执行我们的自定义脚本。.example-conf合并时应忽略文件中的更改。

我们需要防止开发人员修改分支.example-conf中的文件。main但是当他们从main.

我们尝试实施一个解决方案,.gitattributes但这不起作用,因为在合并期间没有冲突。所以合并后的结果.example-conf会被修改。我们需要它保持与main分支相同。

我们使用 GitHub 进行版本控制。

如何才能做到这一点?

标签: gitgithubgit-merge

解决方案


据我了解,这些是你想要的东西:

  1. 没有人可以改变分支.confmain
  2. 它们可以.conf在分支以外的main分支中更改。

如果文件在分支中更改,您可以编写一个预提交挂钩来中止提交。要进行预挂钩,您可以编写一个 shell 脚本,如:.confmain

#!/bin/sh

branch="$(git rev-parse --abbrev-ref HEAD)"

if [ "$branch" = "main" ]; then
  if [ "$(git diff --exit-code .conf)" = "1" ]; then
    echo "Cannot change .conf file in main branch. Aborting commit..."
    echo "Unstage .conf to commit."
    exit 1
  fi
fi

将此脚本另存为pre-commit. 通过使用使其可执行

chmod +x pre-commit

在目录中保存/移动这个可执行文件.git/hooks/

这将不允许任何人更改.conf分支main。但是,如果您确实想更改.confinmain分支,则需要--no-verify使用git commit. .conf这将绕过钩子,并且在您更改main并提交时不会出错。

替代方案:特定于分支.gitignore

看到这个答案 。你可以有一个解决方法来拥有特定的分支.gitignores。这意味着一个人可以.conf在本地存储库feature分支中更改他的更改,但不会将更改推送到远程feature分支。feature因此,来自->的 PRmain不会在.conf.


推荐阅读