这个答案试图解决如何使高级程序员感兴趣的问题git
,而不是如何学习git
最快的方法,为此,优秀的git书籍很棒,或者提供了许多教程(=> Google)。与该答案相关的良好链接是Git是纯功能性的数据结构,尤其是git如何存储数据的简短内容。
恐怕我对此持悲观态度。我一直都在为你着迷-我是一个git
书呆子,想让一支球队远离svn
微不足道的成绩,让我们面对现实。就我而言,这导致我积极地改变自己的看法,并接受人们无法“被迫获得幸福”。人不是计算机,很难对它们进行编程。我仍然为自己的尝试感到高兴,它以一种相当柔和的方式向我展示了我在职业生涯中做什么和不想做什么。
当涉及到新事物时,有些人会开始变得有动力,而有些人会变得消极。这与无关git
,但是git
特别地,您始终具有“如果svn
还好就为什么应该完全使用它”的效果,这是一个巨大的心理障碍。
而且,真正的鬼混git
需要对抽象数据结构产生浓厚的兴趣。这听起来似乎令人难以置信,但是根据我的经验,有些程序员根本不感兴趣,并且对比简单数组更复杂的元素感到无聊和负担过重。您可以来回争论那些人是否应该做他们正在做的工作,但这就是事实。
如果人们对此不感兴趣,他们将不会理解。干净利落。我敢打赌,无私是学校成绩不佳,而不是缺乏智力的主要原因。
就是说,这将是一门我将应用的课程,它是基于从下到上的知识积累。它对我没有用,但您可以以此为灵感来推出自己的产品。
图形用户界面
尽管以下方法并不一定需要对操作进行GUI支持(git add
在hello world存储库中...),但从一开始就拥有用于可视化存储库的GUI会极大地帮助您。如果您不能决定使用哪一种,请采取gitk
最后的选择。如果您的人员使用任何类型的可视化编辑器,请查找其git
GUI组件。
(静态)数据结构是关键
首先说明内部数据类型(它们只有三加一:blob,tree,commit,带注释的标签,在此阶段,最后一个都无关紧要)和它们的结构。您可以在白板上/用铅笔轻松地完成此操作;这棵树很容易绘制,因为它永远无法更改,您可以随时随地添加内容。您可以在新创建的本地存储库中进行播放会话,并使用它git cat-file
来查看实际对象,以向他们显示它们实际上与广告中说的一样琐碎。
如果可以帮助他们理解
- ...在历史上,实际上只有3种类型的对象,它们都很简单,几乎是微不足道的,而且
- ...大多数
git
子命令只是以一种或另一种方式“按摩”这些对象,而这些操作几乎都是琐碎的操作(基本上只有一个:在某处添加新的提交),然后...
- ......一切都可以很容易地看到对符合你的面前
ls
,并git cat-file
...
然后他们将对存储库中的实际内容进行心理翻译。在这一点上,前辈们可能还记得s 的内部svn
是不可思议的魔术(是否曾经在svn信息库内部的锁出现问题,或者在“重新整合”分支等方面有问题?),这可能只是激发了他们一些动机。
一个问题,尤其svn
是对习惯于此的人们来说,是一个习惯,即一个提交(对象,而不是动作)始终是整个目录树。在中svn
,人们习惯于提交单个文件。这是一种完全不同的方法。哦,对于静态对象和动作都使用相同的术语“提交”的事实也无济于事。
svn
伙计们的另一个问题是svn
使用线性历史记录,而不是树。同样,这是完全不同的。因此,现在正是指出这些差异的时候了。
根据结构说明动作
当他们了解了git
存储库的组成部分之后,就该向他们确切展示各个git
子命令在这些方面的作用了。
我正在谈论add
,,commit
本地工作目录和阶段(请确保他们了解工作目录与暂存区域不同,而暂存区域与存储库也不相同)。
当他们了解了这些命令后,就简单地种植了树(在这个阶段,树又由3种类型组成-Blob,树,提交,不仅是提交),您可以先做树,git push
然后git pull
(在快进模式下!) ),向他们展示git
实际上只是在推动其对象,这些哈希实际上只是内容哈希,您可以使用文件系统复制命令等轻松地将这些东西复制。
显然,我们在git add hello.txt
这里谈论的是远离这些命令的所有不必要的选项。
分行
请注意,分支对于svn
人们来说尤其困难,因为它完全不同。该svn
模型更容易可视化,因为基本上没有可视化内容-它处于纯视图中。该git
模型没有那么多。确保他们从一开始就意识到分支和标签只是指向某个地方的“粘滞便笺”,而在静态的,不变的历史方面实际上并没有“存在”。
然后在简单的示例后面做一个示例,以说明您可以实际使用它们做什么。正如您自己似乎已习惯那样git
,您应该在那找到动力。确保他们始终以树的生长方式来查看。
如果他们对此感到沮丧,您可以解释一下git pull
实际情况git fetch && git merge
;如何所有存储库实际上包含完全相同的对象(git fetch
几乎与scp
在git object目录内复制内容一样),依此类推。
也许,如果此时您还没有达到唤醒他们的兴趣的程度,那么您也可以放弃,但是如果他们设法做到了那么远,那么他们就可以使用所有的心理工具,应该几乎没有恐惧已经涉及。其余的(git工作流程...)则应该走下坡路。
最后的话
这听起来很费力,的确如此。不要将其出售为“我们需要此项目”,而是“这可以帮助您个人发展并在所有进一步的交互中帮助您”。您需要很多时间,时间就是金钱。如果您对此没有接受管理层的认可,那可能不值得。你也许应该和老板商量一下。
如果您决定放弃教导看似无法掌握它的开发人员的经验,但是您绝对必须git
在将来使用,请考虑使用git
预编写的脚本或某些可以git
消除所有细节的GUI 替换所有与命令的交互。将所有错误控制等倒入脚本中,然后尝试使其正常工作。