Git在iOS开发中的使用


iOS开发中,很多公司对项目的版本控制管理都使用了git,当然也有部分公司使用的是svn。当年我最初接触的是svn,觉得使用起来挺方便的,但是每次切分支都需要下载一份新的代码起来,这实在太麻烦了,而且公司的网络下载一个项目的所有资源起来也有数百M,这还用工作么?

当年,第一次听说github的时候,就听说是使用git来管理的,可是那时的我感觉好复杂,不知道如何入手。如今,对git的使用可以说是很熟练了,不管是使用命令操作还是直接使用GUI界面工具操作。

就让我带着还不会使用git的同志,跨过那些我曾经走过的坑…

创建新仓库


如果我们在本机上想要创建一个新的git仓库,可以直接使用下面的命令:

git init

还有一种命令可以创建仓库:

git init --bare

我相信大家一定会疑问,这两者有什么区别呢?从字面上看,bare就是赤裸裸的意思,也就是说生成用于记录版本库历史记录的.git目录下面的文件而不会包含实际项目源文件的拷贝。进入版本目录,会发现只有.git目录下的文件。这个版本库里面的文件都是.git目录下面的文件,把原本在.git目录里面的文件放在版本库的根目录下面;换句话说,不使用--bare选项时,会生成.git目录以及其下的版本历史记录文件,这些版本历史记录文件就存放在.git目录下;而使用--bare选项时,不再生成.git目录,而是只生成.git目录下面的版本历史记录文件,这些版本历史记录文件也不再存放在.git目录下面,而是直接存放在版本库的根目录下面。

这么多说明是不是头晕了?我们来来测试一下:

cd Desktop/
mkdir testgit1
cd testgit1 
git init
ls
cd .git
ls

这里在桌面创建一个目录叫testgit1,进入到testgit1目录下,然后执行git init来初始化一个仓库。然后,就会生成一个.git目录,然后查看当前目录是否有文件?第一个ls命令是不是什么也没有?是的,默认.git目录是隐藏的。我们进入到.git目录下,查看:

HEAD        config      hooks       objects
branches    description info        refs

下面简单说明一下这几个东东分别干嘛用:

  • HEAD是个头指针,在处理版本切换时,就是这个指针前移、后移等,因此只会生成快照而已,不会重新下载完整的一份代码,所以切换只需要几秒钟就可以在不同的分支上开发了。是不是很方便?
  • config是配置文件,想要看看内部有什么东西,可以直接vi config查看。
  • hooks叫钩子,主要是用于控制commitpush等操作动作,若需要深入了解,可百度,这个东西也是有很深的学问的。
  • objects是存储所有的git对象,关于这个也可以百度阅读相关文章,内容也很多。
  • branches自然是分支的意思,用于管理分支,里面会有所有的分支。
  • description自然是描述信息
  • info这个目录就不清楚具体是干嘛用了
  • refs这个目录有headstags,前者不清楚其用意,后者就是标签,比如我们支持cocoapods的开源库中升级就需要设置tag,对应版本。

git init初始化的版本库,用户可在该目录下执行所有git操作,但别的用户在将push上来的时候容易出现冲突。因此,实际中会将远程服务器端创建一个仓库时,才会使用--bare,而我们个别用户在创建仓库时,不使用--bare