前言

在公司新进入的一些小伙伴们,对于代码管理并不是很清楚,甚至有的觉得做不做管理都可以。在我面试的一些开发者,很多说是知道Github,了解Git,再追问一两个简单的问题,就基本答不出来了。所以,我想写篇文章,来结合实际情况以及我的理解,简单的介绍一下代码管理的基础知识点。

在正式开始之前,让我们来思考一个问题,「为什么要做代码管理」?我的答案是可以安全的,可溯历史的进行独立或者协同的代码开发,维护。举个类似的栗子,回想一下,在毕业的时候,我周围就有很多人,换着花样的保存各个版本的「毕业论文」。有的人还因为电脑或者U盘的意外事故,导致一两个月的工作白费,凭着记忆恢复。个人的能力和精力毕竟有限,完全可以把版本管理交给工具管理,即安全也容易看到每一版的变化。

代码的管理工具

目前主流的两种方式SVNGit。SVN由于是集中式的管理方式,分支开销比较大,逐渐的被一些人放弃。转而投入Git的怀抱。说起来Git的出现也是梦幻,Linus Torvalds觉得没有称手的代码管理工具,然后就自己写了一个,大牛都是缺什么自己造什么。,。Git是一个开源的分布式版本管理工具,可以高效敏捷的管理项目代码。分布式的好处不用多言,每个节点都有一份记录完整的仓库信息。Git是把内容按照元数据的方式存储的,而SVN是通过文件的形式。

所以,我还是比较推荐使用Git。

假如现在我们本地有一个Git项目的文件夹叫做testGit。在开始之前我想说几个简单的Git概念:

  • 工作区(Working Directory):即电脑实际可见的文件目录testGit
  • 暂存区(Staging Directory):一般称作Stage,存放在testGit/.git/index
  • 版本库(Repository):testGit/.git即为版本库

常用的Git命令

Git提供了丰富的CLI(Commmand-line interface),通过这些命令可以完成日常的一些代码维护工作。下面就介绍几个比较常用的命令:

  • git add filename:添加文件到暂存区
  • git status:查看当前目录中文件的状态
  • git commit -m “commit message”:提交暂存区文件到本地的仓库,并添加一条提交信息
  • git push origin master:将本地仓库的改动push到远程仓库的地址中
  • git fetch origin master:获取远程仓库的最新代码
  • git pull --rebase:拉取远程仓库的代码(注意这里的rebase参数,可以避免产生没有必要的Merge commit,可以让Commit log变得线性。详细信息可以参考第二个Ref)
  • git merge A:合并当前分支到A
  • git cherry-pick commitAFromAnotherBranch:将某个分支的某条提交,合并到当前分支当中

GUI工具

命令行虽然很好用,但是对于新手不友好,另外在产生冲突或者比较文件的时候,看起来比较吃力。所以就有非常多优秀的GUI工具的出现。建议大家可以先从这些工具入手去使用Git。

  • SourceTree:Bitbucket家出的跨平台的Git图形化管理工具。界面稍微有点复杂但是友好,首推
  • Github:Github家出的跨平台的Git图形化管理工具,界面简单,操作简单但是够用
  • Tower:Mac下比较老牌的Git GUI软件之一,现在也有了Windows版,价格不是太便宜

上面两种方式,没有熟好熟坏,没有谁高谁低。我一向都认为,适合当前的自己才最重要,入门的时候先用GUI了解和掌握Git的基础知识,等到有一定的经验之后在尝试命令行的方式,可能成长的会更好。

托管平台选择

国内和国外目前都有很多的Git仓库的托管平台。国内的诸如Gitee,Coding,阿里云这些,免费版的私有仓库的协作者最多只能有5人,优点是国内访问速度很快。国外比较知名的有Github,Bitbucket,Gitlab。

如果有自建需求的,可以考虑Gitlab ce,这也是三者中唯一有中文版的软件。切记代码一定要做好备份,或者镜像到另一个源上,抵抗风险。如果没有自建Git服务器的需求的话,目前最值得选择的,当然是Github,Team和Personal都拥有无线数量的私有仓库,并且支持无线数量的协作者,果然有钱的爸爸就是好爸爸。


REF:

  1.  Understanding Git — Index 
  2.  简单对比git pull和git pull --rebase的使用 
  3.  聊下git pull --rebase