这听起来似乎违反直觉,但请听我说:
鼓励他们开始尝试git
git有趣的事情之一是,使任何本地操作完全安全非常容易。刚开始使用git时,我发现自己做的一件事是将整个目录压缩为一个备份,以防万一我搞砸了。后来我发现这是一个巨大的麻烦,实际上几乎不需要保护您的工作,但是它的优点是非常安全,非常简单,即使您不知道自己在做什么和如何做也是如此。您想要尝试的命令将显示出来。执行此操作时唯一需要避免的是push
。如果您不进行任何操作,这是一种100%安全的方法来尝试您想要的任何东西。
害怕尝试东西是学习git的最大障碍之一。它给你这样过的一切,它是一种令人生畏的太多的控制。现实情况是,您可以在日常使用中坚持一些非常安全的操作,但是要找出哪些命令需要一些探索。
通过给他们的感觉安全,他们会更愿意尝试找出如何做自己的事情。他们将更有能力在自己的本地计算机上找到适合他们的个人工作流程。如果不是每个人都在本地做同样的事情,那很好,只要他们遵守所推动标准。如果在进行操作之前需要压缩整个存储库,这样就可以了;他们可以随时随地尝试更好的做事方式。让自己开始尝试并观察其作用的任何方法。
这并不意味着培训是毫无价值的。相反,培训可以帮助您介绍功能,模式和规范。但这并不是坐下来在日常工作中实际做事的替代品。git和SVN都不是您可以去上一堂课,然后就知道了一切的东西。您必须使用它们来解决问题,以熟悉它们以及哪些功能非常适合哪些问题。
停止阻止他们学习git的来龙去脉
我提到没有推动任何事情,这实际上与您一直在教他们的一件事相反:始终“提交并推动”。我相信您应该停止告诉他们这样做,并告诉他们开始相反的事情。Git基本上有5个“位置”,您可以在其中进行更改:
- 在磁盘上,未提交
- 上演但未落实
- 在本地提交
- 在当地藏匿
- 远程存储库(仅在不同存储库之间推送和拉取提交和标记)
不要鼓励他们一步一步地推动和推动一切,而要鼓励他们利用这5个不同的地方。鼓励他们:
- 在提交更改之前先获取更改。
做出决定如何处理所取得的变化。选项有:
- 进行他们的更改,然后进行检查。
- 提交他们的阶段性更改,然后查看提交。
- 单独推动。
这将鼓励他们在将工作公开发布给所有人之前检查其工作,这意味着他们将更快地发现错误。他们将看到提交并思考:“等等,这不是我想要的。”与SVN不同,他们可以回去再尝试,然后再进行推送。
一旦他们习惯的理解的想法,其中的变化,那么他们就可以开始决定何时跳过步骤,并结合某些操作(当拉,因为你已经知道你要取+合并或当单击提交与推送选项) 。
实际上,这是git相对于SVN的巨大好处之一,而git在设计时就考虑了这种使用模式。相比之下,SVN假定使用中央存储库,因此,如果git的工具没有针对同一工作流程进行优化,就不足为奇了。在SVN中,如果您的提交是错误的,那么您唯一真正的求助就是撤消错误的新提交。
这样做实际上自然会导致下一个策略:
鼓励他们使用当地分支机构
本地分支机构实际上减轻了处理共享文件的许多痛苦点。我可以在自己的分支中进行所有所需的更改,并且由于我不推动它们,因此它永远不会影响任何人。然后,当需要时,我可以使用所有相同的合并和变基策略,只是更简单:
- 我可以重新建立本地分支的基础,这使得将其合并为琐碎的母版。
- 我可以在master中使用纯合并(创建新的提交)将本地分支的更改引入其中。
- 如果我认为我的分支太麻烦了,可以将我的整个本地分支合并成一个对master的提交。
使用本地分支机构也是确定系统分支策略的良好起点。它可以帮助您的用户更好地了解他们自己的分支需求,因此您可以根据需求和团队当前的了解/技能水平来选择策略,而不仅仅是因为大家都听说过Gitflow而已。
摘要
简而言之,git不是SVN,不能像它一样对待。你需要:
- 通过鼓励安全实验来消除恐惧。
- 帮助他们了解git有何不同,以便他们了解如何改变其正常工作流程。
- 帮助他们了解可用的功能,以帮助他们更轻松地解决问题。
所有这些都将帮助您逐步采用更好的git使用方法,直到达到可以开始实施一套标准的地步。
具体特点
从近期来看,以下想法可能会有所帮助。
变基
您提到了变基,而您在问题中并不真正了解它。因此,这是我的建议:尝试一下我刚刚描述的内容。在本地进行一些更改,而其他人则进行一些更改。在本地提交更改。压缩您的存储库目录作为备份。获取其他人的更改。现在尝试运行一个rebase命令,看看您的提交会发生什么!您可以阅读无休止的博客文章,也可以接受有关变基以及如何使用或不应该使用它的培训,但是这些都不能替代它的实时运行。所以尝试一下。
merge.ff=only
这将是个人喜好的问题,但是由于您提到您已经在处理冲突方面遇到麻烦,因此我至少会暂时推荐它。我建议设置merge.ff
为only
:
git config --global merge.ff only
“ ff”代表“快进”。快速前进合并是git不需要合并来自不同提交的更改的情况。它只是将分支的指针沿着图中的直线向上移动到新提交。
实际上,这样做是为了防止git自动尝试创建合并提交。因此,如果我在本地提交某些内容,然后再进行其他人的更改,而不是尝试创建合并提交(并可能迫使用户处理冲突),则合并只会失败。实际上,git只会执行fetch
。如果没有本地提交,则合并将正常进行。
这为用户提供了一个机会,使用户有机会在尝试合并不同的提交之前先进行查看,并迫使他们做出如何最好地组合它们的决定。我可以重新设置基础,继续进行合并(使用git merge --no-ff
绕过配置),或者甚至可以暂时暂不合并所做的更改,然后再进行处理。我认为这个小小的减速将帮助您的团队避免对合并做出错误的决定。一旦他们能够更好地处理合并,就可以让您的团队将其关闭。