你不能拥有这一切。不在 GIT 上,也不在 SVN 上。
您已经意识到您的需求相互冲突,甚至承认您当前的设置并未涵盖所有情况,因此您应该改变处理此问题的方式。
与其要求工具的某些功能,不如尝试解释需要解决的实际问题并允许人们提出解决问题的方法,这些可能不是您已经考虑过的事情。
我现在将尝试回答您在评论中显示的问题,并完全忽略您的初始请求,希望它对您所处的实际情况有所帮助。
我们无法承受每个(10-15)个模块的提交消息显示在同一个地方的时间线
与 SVN 不同,在 GIT 中,您有分支(真正的分支),并且每个分支都有自己的历史记录,因此只要您的开发人员使用分支并将它们合并而不是使用 rebase,您应该能够使用适当的命令隔离每个分支日志,看git log --graph
明白了。
目前合并是焦虑的,因此开发人员尽量避免合并
对此没有真正的解决方案,但有办法缓解这个问题。
一种方法是在主副本中复制几个 repo,如果您的团队大约有 40 人并且您有 10-15 个模块,那么我猜您那里有专注于特定领域/模块的小团队;如果是这种情况,那么每个子团队都应该有自己的 repo 克隆并在本地合并,然后再合并回主副本。
这种方法有效地将合并过程(和职责)分为两个阶段,一个涉及子团队内部的更改,另一个处理与其余模块的交互。
但我必须保留用例 4(移动和编辑),以使 Git 在开发人员眼中具有明确的领先地位,并驯服对合并的恐惧
老实说,UC#4 是不可能的*。特别是在 GIT 上,mv
操作实际上是rm
和的组合add
。
也许如果添加发生在运动之前,一些 (d)VCS 可以解决,但我不认为 GIT 就是这种情况,即使如此我认为你采取了错误的方式来“驯服对合并的恐惧”让我解释。
* @sleske 建议检查此线程以了解执行 UC#4 的方法
人们害怕合并的原因是因为他们不理解它并且 SVN 迫使您合并上游(即在服务器上)这增加了压力,您的方法的问题在于,通过尝试帮助他们避免它,您是强化合并是应避免的晦涩和危险的想法,不要那样做。
如果你想让他们克服恐惧,你需要训练他们,让他们拥有处理这种情况的工具,换句话说,不要帮助他们避免问题,强迫他们解决问题,教他们所有的合并和冲突风格,告诉他们rerere
,甚至教他们章鱼合并,我从来没有用过,但他也教他们什么!然后让他们练习,让它成为他们知道并且可以处理的东西。
GIT 中的合并不像 SVN 那样压力大,因为它们也是本地的,因此您可以根据需要多次执行它们,而不必担心会破坏其他人的环境,只有在您完全确定它们时才会推动它们重新确定。
暂时就这些了,如果您还有其他问题,请添加评论,我会看看我是否有想法,祝您好运!