关于Git的一些理解

版本控制


   基本的版本控制,其实就类似于编写文档时的撤销和回退,在需要的时候将当前文本内容变为历史内容。所以程序代码的版本控制系统,核心就在于要保存历史记录,并有一个索引指向代码的各个历史版本,并能够通过索引随时将当前项目的内容替换为历史版本的内容。

Git


  Git就是一种广泛使用的分布式版本控制系统,除了免费的GitHub外,各个公司、团队可以以Git为基础定制化自己的一套系统。Git做版本控制时,他所管理的版本历史记录,不是你代码的记录,而是代码改动的记录。即他不会记下你某个时间点代码内容是什么样的,他记录的是在那个时间点代码有什么样的变动。

常见工作模型


  目前常见的Git工作模型大致是这样的:

  1.先由主工程师完成基础框架,并将代码推送至服务器上,作为中央仓库

  2.中央仓库的代码会有多个分支,比如master,dev等

  3.每个成员需要从中央仓库clone一个本地仓库

  4.项目的开发工作,基本都是在dev分支做。当完成一个版本的开发后,会合并到master分支

  5.每个成员开发时,都需要从dev分支建立属于自己的分支,在这个分支上进行开发

  6.成员在开发完成一个小功能时,需要提交代码至自己的本地仓库中

  7.在完成一个大模块的开发后,需要将本地仓库同步至远程仓库

  8.每个成员在开发过程中要注意保持自己本地仓库与远程仓库同步

提交代码:add 和 commit


  在使用Git时,最常见的命令就是add和commit了。Git中有一个叫做暂存区(stage)的东西。每当有新的代码改动,都需要先执行add命令将改动加入到暂存区。add时,可以指定要加入的内容,比如add xxx.txt, 也可以偷偷懒一次全部加入add -A 或add .。在加入到暂存区之后,还可以继续开发,也就是可以有多次add,每次add都会将部分改动加入到暂存区。当你觉得差不多了,可以执行一次commit,也就是将当前暂存区内的所有改动,统一标记为一次提交,提交至本地仓库中。在提交后,会自动生成一个字符串,作为这次提交的索引,叫做commit id。 而这次提交所生成的commit,就相当于一个指针或者引用,指向了这一次提交。

    随着工作的进行,会有很多很多commit引用,我们只需要知道commit对应的id,或者其他手段,获取到这个指针/引用,就可以获取到“在那次提交时项目的代码是怎么样的”。

同步仓库:pull 和 push


    在本地仓库开发完成并向远程仓库同步时,要使用push。 笼统的说,push就是拿本地仓库去覆盖掉远程仓库。当然如果有冲突的话,这一请求会被拒绝掉。实际上,push命令所做的是:将当前分支,也就是HEAD所指向的分支,提交到远程仓库,同时将这一分支上的所有提交也一并提交到远程仓库去。HEAD指向master这样远程仓库已经存在的分支,那就相当于是更新了远程仓库的分支的提交记录。 而如果指向了其他远程仓库不存在的分支,比如新的feature1,此时就会更新远程仓库信息,告诉他:现在多了一个分支,这个分支有哪些改动。之后其他成员从远程仓库同步下来之后,也得到了你的新的分支信息。

     从远程仓库同步下来的操作是pull。不过pull其实不是一个命令,他内部其实分为了两步。如果不执行pull,也可以分别通过这两个命令来实现pull的功能,这两个命令就是fetch和merge。

     第一步,git fetch,他的作用是更新本地仓库关联的所有远程仓库中,各个分支的一系列提交记录。这里只是获取到,并不会有其他操作。第二步merge,则是将当前的本地提交与获取到的远程仓库的提交做一个合并,这就是上面说到的fast-forward的典型。一般情况下,直接pull更简单省事。但是一旦出现冲突,由于会自动的进行merge,自动的合并之后可能会出现很多问题,需要自己一个一个查。而如果先fetch之后,再查看一下有哪些更新,此时再手动merge,就会好很多。

注意事项


    在一个团队中使用Git时,一定要细心,中央仓库在服务器上占用的资源是有限的,稍有不慎将一些无用的大体积文件上传到服务器都会造成很大的问题。我这里总结一些经验:

   1.尽量少使用git add -A

   2.每次add和commit前后都要注意检查是否有没必要提交的内容

   3.本地commit时要做好code-review

   4.提交代码,慎用push -f

   5.遇事不决先建个分支,这样不管出什么问题起码不会影响到别人

  6.执行commit时填写的 commit信息 一定要规范

  7.分支名很重要,不能乱起

  8.不用的、弃用的、开发完的一些分支,该删的删,留到后面管理会比较乱

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

推荐阅读更多精彩内容

  • 我们在研发工作中,不可避免的会使用到git作为团队的仓库管理工具。当我们的团队有一定的规模或者出于对仓库安全性或简...
    掉了眼的猫阅读 2,618评论 0 4
  • 理解Git操作 git工作图解 开始写代码前,可以在本地新建一个仓库,编写代码后提交远程服务器;也可以从git服务...
    Kake阅读 637评论 0 9
  • 将本地的某个文件夹初始化为git仓库 时刻准备查看git的状态 显示该仓库的分支信息,当前在master分枝上(默...
    程序员白泽阅读 370评论 0 0
  • 1. 下载代码库 2. 配置 显示当前git配置$ git config --listcore.symlinks=...
    yandaren阅读 397评论 0 0
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,475评论 16 22