iOS 开发(准备) Git 使用篇

183 阅读7分钟

一、Git 是什么?

  • 维基百科这样解释: Git
  • 分布式版本控制软件,最初目的是为更好地管理Linux内核开发而设计,后来逐步发展成为可以独立地用作版本控制的软件,很多大型软件都使用 git 进行版本管理控制

二、Git VS SVN(Subversion)

  • 主要简述两者之间的不同,注意的是版本控制器不仅仅只有这两种,这是目前使用量比较多的是这两者,所以主要简述这两种版本控制软件
  • 首先要明确,Git 是分布式版本控制软件,但是 Git 也有集中式版本库或服务器,只是更加倾向于分布式版本管理 , Svn 不是。
  • Git把内容按元数据方式存储,而SVN是按文件,.git 目录是位于你机器上面的远程仓库的克隆版本,这里请良好理解克隆的含义,就是说本地仓库与远程仓库完全相同
  • Git 没有全局的版本号,而 Svn 有,这算是目前 git 的缺陷。但是可以对 git 添加 tag ,弥补这一缺陷。我在工程项目中的处理方式的,项目进行测试的时候,我commit 一次,版本号+Test 进行提交,项目整体回归测试完成,准备提交审核上线时,再进行一次提交。提交信息仅为版本号。方法可能不是很好,但是能够一目了然。
  • Git的内容的完整性要优于SVN: GIT的内容存储使用的是SHA-1哈希算法,这样能够确保代码的完整性,不受损坏
  • Git 在Offline(离线)状态下,能够查看所有的 log,只需要在Terminal 中输入 git log 即可
  • 还有很多,不在赘述,网上大部分资料齐全,就算不知道两者之间的区别,在使用的过程中,慢慢也会知道的,天下无难事,只怕有心人...

三、初级使用

  • 如果感觉本文讲述的并不是很容易理解,可以移步这里Git 使用
  • git clone + 远程仓库地址:克隆远程仓库至本地,全部都克隆下来了。
  • 分支(branch):你可以想象一棵树,主干就是主分支,枝干就是分支,你可以随意的创建分支,分支在整个项目开发进程中尤为重要。
    • git branch -r :查看远程仓库的分支
    • git branch -a: 查看全部的分支
    • 我参与开发的项目的分支一直都是按照这样的规则进行创建的: master 分支(主分支,无论什么情况下,都要保证主分支的正常运行) developer 分支(处于开发阶段的分支,正常来说,此分支的的功能要多于 master 分支) 开发人员姓名分支比如我的分支就是 sunxu ,每次在本地进行开发的时候,切换到我自己的分支上进行开发,开发完成、测试完成之后,提交分支到远程仓库,直接进行与 developer 分支的合并,其他人同样如此,都是提交分支到 developer 分支,合并到 developer 分支,最后与 master 分支进行合并
  • 因为这样的好处是一旦我提交(commit)之后与他人的代码冲突,我可以直接回滚,是在解决不了回滚的问题,我还可以让其他的开发人员进行一次强制的提交,这样远程仓库的代码能够运行,并且不影响别人的代码,只是增加了自己的工作量,你想一想如果因为你的原因,让你的同事加班,你同事愿意,你自己良心能够过得去吗,所以尽量别给别人制造麻烦
  • status (状态): git status 检查本地文件的状态、状况。我养成的习惯是每次 commit 之前都去检查一下本地文件状态。
    • git status 命令: 会罗列车所有改变的文件状态,增删改查文件的状态都是显示,单词都是很简单,只要会英文的人一眼就能看的明白
  • git add :经过 status 之后,检出的文件的状态,发现全部正确,可以直接使用 [git add . ] 命令,直接将全部的待提交文件全部添加进入,千万不要git add + 文件名,这样一个一个来添加了,看着感觉很傻(我开始就这样)
  • commit(提交) : 添加完成之后,需要在本地进行提交,执行完这个命令之后,只是在本地有了一次提交,并没有对远程仓库有任何操作,这时候可以 git status 来看到提示你本地有几次没有 push 的 commit。仅仅是本地增加了一个快照。
    • git commit 会跳转至添加提交信息的界面,vim 简单的使用,信息可以填写也可以不填写,但是我建议全部填写,因为每一次的提交都是都有意义的,为了让自己和别人都看懂也要写,中英文都可以,但是我习惯于使用英文
  • git commit -m "提交信息示例:The database to read and write ",直接使用这样的命令就可以添加信息,免去来回跳转的麻烦,注意都是半角符号
  • git push (推送): 将本地分支的更行,推送到远程的服务器,代码自动合并,如果有冲突,会提示,并且提交不会成功,这个时候可以寻找最近一次提交的同事,两者之间应该是更改了相同位置的代码,多数情况下不会这样
  • 至此,一次完整的更改,提交、推送全部完成,很简单,一天的时间完全可以上手使用

四、使用经验

  • Git 有图形操作软件客户端,对于不喜欢命令行的同学,可以直接下载:SourceTree。但是我认为作为程序员,多少都要会命令行,毕竟对于不懂的妹子来说,这是绝佳的撩妹技巧
  • iOS 开发使用 SB 进行团队开发的时候,请尽量将每个人的 SB 文件分开,不要放在一起,放在一起很容易导致冲突。就算这个 SB 文件你只是简单的打开查看一眼,git 也会跟踪他,并且是更改的状态。所以尽量分开。如果你需要查看别人的 SB 文件,查看完之后,可以执行 git status ,列出刚才被查看的 SB 文件,执行 git checkout + 文件名,直接将刚才查看的文件切换回原来的状态就好了
  • 拉取合并分支:我不习惯于使用 git pull ,pull执行的拉取并且合并,但是有的时候容易出现问题,所以我尽量为了避免出现问题使用:
    • 拉取:git fetch origin develop

    • 合并:git merge origin/develop

  • 回滚:回滚本地没有 push 的代码的时候,无所谓,毕竟不会影响线上,可以使用 reset ,但是回滚线上的代码的时候,我更加倾向于使用 git revert 这样的好处是,revert 相当于又做了一次 commit,将你想要的那个版本又提交上去,接着执行 push 就可以了。你可以想象一棵树长了一个树叶,你感觉这个不好看,想要让他从新生长,reset 就相当于直接把树叶树叶拔掉,而 revert 就相当于,这个我不在生长了,我从他的父类那里再生长出来,跳过他,在和父类合并,其实效果都是一样的,但是我感觉 revert 更好。

PS

  • 团队合作,尽量不要给同事制造麻烦,你可以不会,可以出错,但是要勇于承担错误,多说谢谢
  • 三人行,必有我师。无论是代码还是逻辑不明确的时候,不要想着绕过他,留给别人解决。这样你只能不会的越来越多,技术的成长源于死磕和踩坑数量的多少。
  • 你不会的可能GoogleStack Overflow早有遇见的,自己试着去解决,收获无穷
  • 如果你说你不能访问Google,可以看看我前面写的文章 2017 科学上网