Git - 避免发生冲突?

Git - avoid committing conflicts?

如果仍有未解决的冲突,有没有办法(最好是 MacOS 上的 iTerm2)禁止 committing/pushing?大多数 GUI 禁止发送未解决的冲突,但命令行禁止。

我有很多使用 CLI 的开发人员,有时他们会推送未解决的冲突,在编辑器中使用 git 的人不会遇到这个问题,因为编辑器不允许这种情况发生。

感谢您的任何见解:)

这可能有点吹毛求疵,但是git确实需要解决所有冲突才能完成提交。但是,从git的角度来看,"resolved"就是"the user has issued a git add command for the path that contained the conflict"。如果用户在留下冲突标记的同时说 "this is resolved",则 git 不会假设知道得更好。

和坐在 git 之上的编辑基本上没有什么不同。他们可能会以不同的方式呈现冲突,或者以用户必须跳过箍才能故意在完成的内容中留下冲突标记的方式来控制解决工作流程。但是如果用户字面上说解析的内容是

>>>>>>> their version
some change
-------
different change
<<<<<<< our version

没有通用工具可以否决这一点。

我的建议是,如果用户在不应该的时候(当然,几乎总是不应该的)提交冲突标记,则可能是培训问题。我会鼓励他们要么学习更多有关 git 冲突解决的知识,要么使用您的其他开发人员使用的其中一些工具,这样您就可以更好地保护他们免受这些错误的影响。我认为,如果用户花时间学习它足以使用命令行,那么他们可以从 git 中获得最大收益,但如果他们不打算这样做,则在其中一个周围添加 "safety"可能会导致命令行工具使用不当的众多错误...是一个不够全面的解决方案。

如果你仍然想添加这样的安全性,最好的办法是使用 git 钩子。您可以向原始存储库添加一个预接收挂钩,这样它将拒绝任何包含包含冲突标记文件的提交的推送。您还可以让个人存储库可以使用它作为预提交过滤器,这样他们就可以及早发现错误,而不是等到他们尝试提交时才意识到他们有一个糟糕的历史记录。

请注意,此类挂钩会对允许的内容做出假设。如果剧本写得好,这些假设并不离谱;对于许多类型的内容,确实不是提交冲突标记的充分理由。但是作为一个(有点愚蠢的)例子,如果有人需要提交一个描述冲突状态的 .txt 文件,你的脚本是否能够区分并让它通过?

对于额外的安全层,潜在的边缘情况是否值得,只有您可以为您的项目回答。同样,我的建议是首先解决您的用户犯这些错误的原因。