对于个人开发者来说,版本控制系统并不是必需的,但是我们仍然强烈推荐开发者使用它,因为它可以使代码方便的在有错误的版本和可以工作的版本之间转换。事实上,很多开发者从来不使用类似的工具,他们会在项目添加新的功能时手动保存原先的项目。这其实是一个很不好的习惯,因为版本控制软件可以更好更高效地完成这项任务。
Git是一个常见的版本控制系统,它最开始是由Liunx之父Linus Torvalds开发的,Git使用虚拟目录,又称为repositories,来管理一切事物。Git可以通过命令行调用,也有专门为它设计的桌面应用软件。如果Git对你来说很陌生,我建议你在网上查看一些它的相关信息。关于Git更深层次的内容都不在本文的讨论范围之内。
从Xcode5开始引入了使用git的一些新特性。它将git的各项功能整合到一个菜单中,并提供子菜单来进行软件合并的控制。在接下来的阅读中你会发现,使用git来进行版本控制相当的简单快捷。
创建一个Git源(Creating a Git repository)
1、为新项目创建Git源
每次在Xcode中创建新工程的时候,都会提示开发者是否将项目作为一个本地的git源。在创建工程的最后一步Xcode会有一个复选框,如果选择了它,git源就会被添加到工程目录中。通常这个选项会被忽视,或是被认为是Xcode的另外一个没用的功能,尤其是从未用过git的开发者,或是编程新手。
如何为新项目创建Git源:
这步非常关键:默认情况下,这个选项是被选上的,如果你不想使用git,你可以取消它,但是我不建议这么做。本教程中,你需要将它勾选上,然后点击创建按钮。
查看Git源相关数据
创建完项目之后,打开Finder找到项目存储的目录,在目录中有一个.git的子目录,是Xcode为存储git源相关数据自动创建的。如果你看不到.git目录,你需要让隐藏的文件可见。
显示隐藏文件
打开一个Terminal窗口,输入以下命令:
defaults write com.apple.finder AppleShowAllFiles TRUE (OSX 10.9之后)
//defaults write com.apple.Finder AppleShowAllFiles TRUE (OSX 10.9之后)
然后重启Finder应用
killall Finder
2、为已有项目创建Git源
显然使用Xcode创建一个git源毫不费力,然而,如果你在项目创建时未创建git源,之后又想加上这个功能怎么办呢?
1)首先通过Xcode下载Command Line Tools。Xcode>Preferences>Download>Components区,点击Commond Line Tools右边下载按钮。(如果没有说明你已经下载过了)
2)打开Terminal窗口,依次执行如下命令
cd /Users/Mac的用户名/Desktop/项目名称 //换到新项目的目录
git init //初始化一个空的源
git add . //当前目录所有的内容就被添加到源里面
git commit -m 'Initial commit'
接下来会出现一个本地git源所执行的改变列表,如下图所示:
3)重启Xcode
如果你再次打开Source Control菜单,你会发现所有的选项已经可以使用了,就像一开始勾选上创建git源一样。
提交更改(Committing Changes)
1、提交初始状态
默认情况下,Xcode在项目创建之初会提交一次更改,这是为了保存项目初始状态。如果你在项目创建时没有添加git源,但是之后你手动添加了,你可以通过我们先前使用过的命令来进行提交:git commit -m ‘Initial commit’
2、查看提交记录
去Source Control>History…菜单,你就会看到初次提交更改的记录,以后每次提交更改,都会在这里有所记录。
3、修改代码
修改了ViewController.m中的代码,在Project navigator面板ViewController.m文件旁边会出现了一个M字母,表示有未提交的更改
4、如何提交更改?
只需要打开Source Control>Commit菜单,下面窗口就会出现
选择要提交的被更改文件
标1的区域:列出了所有被更改的文件。注意:文件前有选择框,默认情况下是被选中的,如果你取消它,这个文件的更改就不会被提交。
选择要提交的代码段
标4的区域:在数字旁边,默认情况下有一个小对勾,表示本更改会被提交,如果你点击右边的小箭头,会弹出一个选项菜单,你可以选择不提交这个更改或是忽略它。
选择了Don’t Commit:表示这项更改就不会提交
选择了Discard Change:表示所做的更改会被恢复,并且无法取消这个操作。
添加更改的简短描述
书写有意义的提交信息非常有用,尤其是当你频繁提交的时候。因此,把它当做一个必要的步骤。
版本之间的比较(Comparing Versions)
当你提交了同一工程的不同版本之后,在他们之间比较,追踪修改信息就会非常方便。当新添加的代码不能运行时,这时与之间版本进行比较就非常重要了,你可以看出新版本相比上个稳定版有了哪些更改。
比较同一个文件的两个版本,使用View>Version Editor>Show version editor
编辑器下面的那个小时钟图标,可以选择之前已经提交的版本进行比较。
究竟是谁的错?(Who’s Got the Blame)
除了比较文件的版本外,Xcode还可以让你追踪文件的提交者,以及是谁改变了哪一部分代码。在一个多人的团队中,这非常有用。
点击View > Version Editor > Show Blame View
当前文件依据不同的提交被水平线分成几段,每个代码段的作者,以及提交信息和其他信息显示在窗口右边的一个特殊面板中。
分支(Branches)
试想一下,你现在的工程有一个即将发布的版本,或是已经发布的版本,你突然想添加一些新的特性,如何防止这些新添加的代码让整个项目陷入瘫痪呢?答案很简单:你需要使用分支。
关于分支,你必须记住以下两点:
1、提交到App Store或客户的最终产品必须是项目中的master分支(主分支)项目。
2、任何在第二分支中实现的代码或者功能最终都必须合并到master分支,这样正式发布的应用程序才是完整的。(以后再讲这一点)
1、创建一个分支
点击Source Control > GitDemo-master > New Brance
2、查看活动分支
打开Source Control菜单,你就可以轻松地找出活动分支是哪一个:它就在项目名字的旁边。
3、提交分支(与提交更改相同)
4、比较分支
打开Version Editor(menu View > Version Editor > Show Version Editor),找到右边编辑面板下面的工具栏,你会看到被选中的分支是AnotherBranch,点击它,你会看到这个分支和master分支同时出现,从master分支中选择任意版本,Xcode都会高亮显示两者之间的区别。通过这样,你可以方便地跟踪所有分支间代码的改变。
5、切换分支
切换到另一个分支,或是master分支,你可以点击Source Control > GitDemo –AnotherBranch > Switch to Branch…菜单。
合并分支(Merging Branches)
注意:在合并之前,先提交更改
合并的方式
关于把两个不同的分支合并成一个,你有两种选择
1、 从分支合并:与你选择的分支相关的任何改变都会被合并到现在活动分支中。
2、合并到分支:当前活动分支的任何改变都会被合并到你选择的分支中。
这两种方式你都可以在Source Control > GitDemo 菜单中找到。注意:当你的活动分支是master分支时,第二个选项是不可选的。
合并
首先,确保当前活跃分支是master分支。
然后,打开Source Control > GitDemo – master > Merge From Branch…菜单,选择AnotherBranch然后点击Merge按钮。
完事后就点击Merge按钮。
忽略更改(Discarding Changes)
相关阅读
在Xcode中使用Git进行源码版本控制:点击这里链接内容
常见问题
xcode提交版本时提示The working copy “MyPro” failed to commit files.
* Please tell me who you are.
Run
git config –global user.email “you@example.com”
git config –global user.name “Your Name”
to set your account’s default identity.
Omit –global to set the identity only in this repository.
fatal: unable to auto-detect email address
解决办法:
打开终端,进入自己的项目下,有个.git目录
cd ~/MyPro/.git
vi config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
添加以下三行:
[user]
email = yourname@me.com
name = yourname