一个故事带你了解版本控制

当我们初次在项目中使用版本控制时,这个概念可能难以理解。我看到很多人(也包括我)都在运行诸如 git pull,git push 以及运行其他一些我不理解的命令。为什么我既要 commit 还要 push?为什么每个新特性都需要新建一个分支?

在使用 Git 进行协同工作几个月后,对于版本控制这个概念就比较清晰了,可以更好地理解和使用版本控制来进行协作。下面通过一个小故事来说明版本控制的工作方式及其在项目中的优势吧!

一起盖房子吧

在这个美好的合作项目中,我们将尝试一起盖房子。简单点说,我们只有两个人在这栋房子里工作。我们不是房子的主人,我们为别人(利益相关者)处理房子的内容,他告诉我们他想要什么,想要在哪里。

我们有 4 面墙—主(Master)分支

我们从 4 面墙和屋顶开始,这是坚固的,耐久且非常好的,这四堵墙代表我们的 Master 分支,它们目前已经实施,并且不会被删除。利益相关者批准了这四堵墙,他甚至可能亲自选择了它们,并且希望保留它们。我们需要做的就是改善这四堵墙,在上面或周围建造。无论如何,我们要建造的任何东西都将以这四堵墙为基础。

业主想要一间客厅和一间厨房-特性(Feature)分支

正如我之前提到的,有两个人在做这个项目,我和另外一个同事张三。每个房间都是一个特性,在这种情况下,为了使结果最大化,我和张三将研究不同的特性,我将设计客厅,张三将设计厨房,到目前为止一切都很顺利。

我们都创建了一个特性分支,我们还知道必须使用约定来命名我们的分支,因此,我们将以正在处理的工作(在本例中,是一个新特性)、该特性的名称和我们的名字。

  • feature-living_room-wupx
  • feature-kitchen-zhangs

命名分支有多种约定,这只是其中一个建议。

我们都从主分支创建特性分支,所以我们一开始都有相同的四面墙,然而,我们的特性分支完全是主分支的独立副本,对主分支的内容没有直接影响,这就保证了如果我和张三完全破坏了四面墙其中的一个,主分支的四面墙仍然是站立的。

我想将设计保存在本地—git commit

提交就像将更改保存在本地,每一次新的提交都有一个数字,也代表了你可以返回的保存点,就像在任务游戏中你可以返回到之前的保存点一样,所以当张三建造橱柜的时候,他可以提交它们以保证他的更改不会丢失,并且如果他建造的下一个部分危及到橱柜的质量,他还可以回滚回去。
因此,当Bob建造厨柜时,他可以提交它们,以免丢失更改,并承诺如果他制造的下一部分会危害厨柜的质量。

每次提交还需要一条消息,因为写一些关于你的提交的内容以便让每个人都知道这个“保存点”包括什么是一个很好的实践,张三提交的消息写道“创建红色厨房橱柜”。

我想将设计保存在存储库中的安全位置—git push

存储库是存储所有分支的地方,包括主分支,它就像一个文件夹,里面有关于项目的所有文件,包括它们的修订历史。

Git push 获取你的所有提交并将它们发送到分支的远程版本,该版本可以在在线存储库中获得,所有参与其中的的开发人员都可以看到对分支所做的更改。因此,张三将他的提交推到他的远程分支,我现在可以看到张三关于红色橱柜的提交。

我的客厅装修好了,现在怎么办呢?-开发分支和合并(merge)请求

我们的开发分支是一个集成我们的房间(或功能)的地方,在这里,我们尝试把我们的设计(或功能)结合在一起,看看我们的客厅和厨房的功能是否很好地结合在一起。

如果我想把我的客厅添加到开发分支,我必须做一个合并请求(pull request),通常,在远程分支上发生合并之前,至少必须有一个其他开发人员批准你的合并请求。

张三的厨房做完了,我们的设计不匹配—合并冲突(Merge conflicts)

我试图将张三的新变更合并到我的分支中,但是如果我没有把张三的开放式厨房一侧的墙砌好,会发生什么呢?我们的设计存在冲突,Git 可以自动解决一些冲突,但不能解决所有冲突,Git 有时需要你的帮助来确定应该保留哪些更改,因为其中一些更改是相互冲突的。换句话说,它需要知道保留谁的“设计”(或代码)是正确的选择。

假设我是犯错的人,我可以告诉 Git 在设计厨房墙壁时保留Bob的部分,而不是我的。

我们什么时候可以把厨房和客厅加到主分支?

项目的这一部分通常包括测试、批准,一旦我们的设计经过了全面的测试,这意味着它们也能很好地一起工作,并且我们的利益相关者,房屋所有者批准了这些设计,我们就可以决定将我们的更改合并到主分支,这意味着从现在开始,我们房子的稳定版也将包括我们的客厅和厨房,因此所有的新分支至少应该包括这些房间。

在某些情况下,明智的方法可能是将主分支以前的每个版本都保存在不同的分支中,然而,处理主分支的正确方法取决于你的团队和公司的需求或准则。

总之,版本控制是简单和安全协作的核心

在团队项目中使用 Git 允许多个开发人员独立地处理同一个项目,而不会经常干扰彼此的输入。每个开发人员都可以获得一个独立的代码版本,他们可以修改这个版本,而不必承担破坏稳定版本代码的风险。

Git 能够复制代码并在不同版本上独立工作,这使它成为构建应用程序的任何人(甚至是单独工作的开发人员)的一个很好的选择,它使您有机会保留代码的多个版本,并跟踪每个更改的所有特征,比如谁做了更改以及何时做的更改。

感谢大家的阅读,欢迎留言进行交流讨论。

最好的关系就是互相成就,大家的在看、转发、留言三连就是我创作的最大动力。

参考

https://towardsdatascience.com/a-simple-story-to-explain-version-control-to-anyone-5ab4197cebbc

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,033评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,725评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,473评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,846评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,848评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,691评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,053评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,700评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,856评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,676评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,787评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,430评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,034评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,990评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,218评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,174评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,526评论 2 343