相关疑难解决方法(0)

如何在git上限制对master分支的访问

我有一个单独的回购,其中我有2个用户组:

  • 管理员
  • HTML/UI开发人员

我不希望我的master分支机构对我的HTML开发人员进行读/写访问,因为他们不需要对其进行操作,也不应该滥用核心代码.

虽然他们需要在自己的分支上工作ui-developers.我如何在git上执行此操作?

PS:我正在使用BitBucket

更新:

当我对编码和git非常陌生时,我发布了这个问题.经过2年的经验,我现在知道git不允许限制任何特定分支的READ访问.但Bitbucket,Gitlab,Github等服务允许您对分支机构进行写入和合并限制.

此外,我转回Gitlab 6个月前:)

git bitbucket git-branch gitlab

49
推荐指数
3
解决办法
4万
查看次数

防止在git存储库中的master分支上直接提交并仅接受合并?

我的git存储库有两个分支,'master'和'dev'.

致力于'dev'的代码在测试之前会经过自动构建过程.然后将传递此代码的代码合并到"主"分支中.

是否可以使用钩子或其他东西来阻止"主"分支上的正常直接提交,并且只接受从"dev"到"master"的合并?

git merge commit

32
推荐指数
2
解决办法
1万
查看次数

如何防止使用 husky 直接提交到 master 分支?

我正在使用 husky 来运行 git hooks。

"husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  }
Run Code Online (Sandbox Code Playgroud)

我想防止直接提交到主分支。它应该允许仅通过合并请求更新主分支。

我从 Git 中发现了以下代码: Prevent commits in masterbranch。我将其复制到 .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)

但我想用哈士奇来实现这一点。我怎么做?

git git-husky

7
推荐指数
1
解决办法
4588
查看次数

Git 钩子:'.git/hooks/pre-commit':不允许操作

这一切都在 OS X Mojave 上。

我试图阻止自己错误地提交到 master 分支,因为这是我经常做的事情,使用这个 SO answer 中pre-commitGit 钩子,因为我使用 bash 而不是 sh 稍微改变了。但是,每次我尝试运行它时,都会得到以下信息:

fatal: cannot exec '.git/hooks/pre-commit': Operation not permitted
Run Code Online (Sandbox Code Playgroud)

我检查了.git.git/hooks目录的权限。两者都是drwxrwxrwxpre-commit本身的权限是:

-rwxr-xr-x@  1 emeyer  staff    25 Feb  5 11:50 pre-commit
Run Code Online (Sandbox Code Playgroud)

...这与pre-commit.sample我复制到pre-commit然后替换内容的文件相同。我试过了,chmod +w但这并没有解决它。

我决定简化我的测试并替换pre-commit为以下内容:

#!/bin/bash

echo "Test"
Run Code Online (Sandbox Code Playgroud)

我仍然遇到上面提到的Operation not permitted错误。我也在#!/bin/shSO answer's example 中尝试了它;同样的结果。

如果我尝试直接运行脚本,通过./pre-commit从命令行输入,我会得到一个稍微不同的错误:-bash: ./pre-commit: /bin/bash: bad interpreter: Operation not …

git bash githooks macos-mojave

6
推荐指数
1
解决办法
2043
查看次数

误推master后如何恢复

我经常犯这个错误,我想知道是否有更好的解决方案,以及我当前的解决方案是否有风险。

这是工作流程

  1. git 结账大师
  2. git拉
  3. git 子模块更新 --init --recursive
  4. (编辑、调试、测试)
  5. git 提交 -a
  6. git push origin HEAD:refs/for/master
  7. (更多编辑、测试等)
  8. git 提交 -a
  9. 吉特克
  10. (咒骂)
  11. git rebase -i HEAD~2 # 选择并将我的两个提交压缩在一起
  12. git checkout -b 任务ID
  13. git 结账大师
  14. git rebase -i HEAD~2 # 选择前一个用户的提交,删除我自己的

我的错误是,在第 5 步的某个地方,我应该执行类似于第 12 步的操作来创建一个新分支,以使这项工作与其他任务分开,以便我可以轻松地返回到它或以所需的顺序重新设置不同的补丁或其他任何内容。相反,我将新代码推送到主分支上,大约第 10 步我意识到,这master不再指向公司已批准的最新、最好的代码版本,而是我自己的努力。因此,在将我自己的提交压缩为一个交互式的提交之后rebase,我正在执行另一项交互式操作rebase以返回master它应该在的位置——即,已经通过审核过程的其他人的工作。

编辑澄清:当我“推送到master”时,这不会将我的更改发布给其他人。有一些提交钩子魔法可以创建 Gerrit 代码审查任务,并且只有获得批准后,我的提交才会合并到远程存储库中。抱歉误导了大家。我在这里关心的只是我的本地仓库。

我的问题是双重的。就风险而言,这种做法有多糟糕?如何改进?我并不是寻求帮助来避免最初的错误。我想我只需要更加小心我要推向哪个分支。问题是如何最好地指向master先前的提交而不干扰/冒险/丢失任何东西。

git

4
推荐指数
1
解决办法
6239
查看次数

标签 统计

git ×5

bash ×1

bitbucket ×1

commit ×1

git-branch ×1

git-husky ×1

githooks ×1

gitlab ×1

macos-mojave ×1

merge ×1