我们最近才开始使用 Git(之前使用过 Subversion),我发现对工作流程的更改可能有助于解决您的问题,而无需锁定。它利用了 git 的设计方式和分支的简单性。
基本上,它归结为推送到非主分支,对该分支进行审查,然后合并到主分支(或任何目标分支)。
git 是“打算”使用的方式,每个开发人员发布他们自己的公共存储库,他们要求其他人从中提取。我发现 Subversion 用户对此有问题。因此,相反,我们推送到中央存储库中的分支树,每个用户都有自己的分支树。例如,这样的层次结构可能会起作用:
users/a/feature1
users/a/feature2
users/b/feature3
teams/d/featurey
随意使用您自己的结构。注意我还展示了主题分支,另一个常见的 git 习惯用法。
然后在用户 a 的本地存储库中:
feature1
feature2
并将其发送到中央服务器(来源):
git push origin feature1:users/a/feature1
(这可能可以通过配置更改来简化)
无论如何,一旦 feature1 被审查,谁负责(在我们的例子中,它是功能的开发者,你可以让一个用户负责合并到 master),执行以下操作:
git checkout master
git pull
git merge users/name/feature1
git push
拉取(拉取任何新的主更改和功能分支)并将主更新到中央存储库所拥有的内容。如果用户 a 完成了他们的工作并正确跟踪了 master,则合并应该没有问题。
所有这一切意味着,即使用户或远程团队对二进制资源进行了更改,它也会在合并到主分支之前得到审查。并且有一个清晰的描述(基于流程)关于什么时候进入主分支。
你也可以使用 git hooks 以编程方式强制执行这些方面,但同样,我还没有使用过这些,所以不能谈论它们。