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
叫钩子,主要是用于控制commit
、push
等操作动作,若需要深入了解,可百度,这个东西也是有很深的学问的。-
objects
是存储所有的git
对象,关于这个也可以百度阅读相关文章,内容也很多。 -
branches
自然是分支的意思,用于管理分支,里面会有所有的分支。 -
description
自然是描述信息 -
info
这个目录就不清楚具体是干嘛用了 -
refs
这个目录有heads
和tags
,前者不清楚其用意,后者就是标签,比如我们支持cocoapods
的开源库中升级就需要设置tag
,对应版本。
用git init
初始化的版本库,用户可在该目录下执行所有git
操作,但别的用户在将push
上来的时候容易出现冲突。因此,实际中会将远程服务器端创建一个仓库时,才会使用--bare
,而我们个别用户在创建仓库时,不使用--bare
。