Ras*_*ard 52 git merge fast-forward
(为简单起见)我有一个master分支和一个dev在我的Git-repo中.我想确保master分支始终正常工作,因此我所做的所有工作都应该在dev分支机构中.
但是,当我将合并中的更改--no-ff合并时,我倾向于留在master分支中,并继续在其中工作(因为我忘了检查我的dev分支).
我可以为master分支建立一个规则,它表示我不能提交,快进合并,但只能--no-ff从另一个分支合并?
这必须适用于私有托管存储库(而不是GitHub和BitBucket).
qzb*_*qzb 110
对的,这是可能的.您必须创建预提交挂钩,拒绝提交到主分支.当你调用merge命令时,Git不会调用pre-commit钩子,所以这个钩子只会拒绝常规提交.
使用以下内容创建文件.git/hooks/pre-commit:
#!/bin/sh
branch="$(git rev-parse --abbrev-ref HEAD)"
if [ "$branch" = "master" ]; then
echo "You can't commit directly to master branch"
exit 1
fi
Run Code Online (Sandbox Code Playgroud)使其可执行(Windows上不需要):
$ chmod +x .git/hooks/pre-commit
Run Code Online (Sandbox Code Playgroud)要禁用快进合并,还必须在.git/config文件中添加以下选项:
[branch "master"]
mergeoptions = --no-ff
Run Code Online (Sandbox Code Playgroud)
如果您还想保护远程主分支,请检查以下答案:如何在git上限制对master分支的访问
JGC*_*JGC 21
您可以使用预提交实用程序来执行此操作。它有一个内置的no-commit-to-branch钩子,可用于防止提交到一个或多个分支。
基本的设置过程是:
.pre-commit-config.yaml在项目的根目录中创建一个文件(请参阅下面的初稿)pre-commit install。这是一个仅包含no-commit-to-branch钩子的基本配置:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.3.0
hooks:
- id: no-commit-to-branch
args: ['--branch', 'master']
Run Code Online (Sandbox Code Playgroud)
如果你想保护多个分支,你可以--branch在参数列表中使用包含多个参数:
repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v3.3.0
hooks:
- id: no-commit-to-branch
args: ['--branch', 'master', '--branch', 'staging']
Run Code Online (Sandbox Code Playgroud)
Pre-commit 有许多其他内置挂钩,以及大量社区构建的挂钩,它们将改变您清理和验证提交的方式。我提到这一点的原因是,虽然这个工具只是阻止提交到受保护的分支可能有点矫枉过正,但它还有许多其他功能,使其成为任何 git 项目的引人入胜且简单的补充。
Mic*_*mia 11
通过全局安装它可能是有意义的
git config --global core.hooksPath ~/githooks
Run Code Online (Sandbox Code Playgroud)
并将该pre-commit文件移动到该目录中
| 归档时间: |
|
| 查看次数: |
21187 次 |
| 最近记录: |