提交更改(Committing Changes)
提交更改指的是储存一个包含所有更改的新版本。一般来说,当我们做了一些有意义的工作,并且项目处于某一个稳定状态时,就可以提交一次更改。然而具体什么时候提交更改并没有硬性的规定。我的建议是:从上次提交更改之后,如果你怕花费大量时间和精力做的新工作被误删很难恢复,你就需要提交更改了。
默认情况下,Xcode在项目创建之初会提交一次更改,这是为了保存项目初始状态。这项工作会在后台完成,不会打扰你或者要求你进行确认。如果你在项目创建时没有添加git源,但是之后你手动添加了,你可以通过我们先前使用过的命令来进行提交:git commit -m ‘Initial commit’
实际上,你如果去Source Control>History…菜单,你就会看到初次提交更改的记录,以后每次提交更改,都会在这里有所记录。
接下来让我们小幅修改一下我们的工程,在ViewController.m文件中,添加以下属性声明:
- @interface ViewController ()
- @property (nonatomic) int sum;
- @end
接下来,像下面这样修改viewDidLoad方法:
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- int a = 5;
- int b = 10;
- self.sum = a + b;
- NSLog("The result is: %d", self.sum);
- }
看一下Project navigator面板,你会发现在ViewController.m文件旁边,添加了一个M字母,像下面这样:
这意味着那个文件已经被修改,相比上一次提交更改,文件有所改变。一般来说,你每次改变文件,都会出现这个M字母,提醒你有未提交的更改。
下面看看如何提交更改,其实非常简单,只需要打开Source Control>Commit菜单,下面窗口就会出现:
让我们一步步看看它告诉我们了什么。在左边(标1的区域),列出了所有被更改的文件,在这个例子中,只有ViewController.m这个文件被改变,因此列表中只有它被显示。如果你仔细观察,你会发现文件左边有一个选择框,默认情况下是被选中的,如果你取消它,这个文件的更改就不会被提交。
在窗口的中间区域,有两个预览窗口,左边那个是文件当前版本,右边是文件上一次提交更改的版本。因为我们目前只是创建时提交过一次更改,因此右边显示的是文件的初始状态。
左边窗口蓝色区域标出的就是更改的内容,这样的表示让我们可以清楚地看出所有的修改。如果你仔细看,会发现在两个窗口之间还有一个带数字的小标签,这个数字一一表示了各项更改。在数字旁边,默认情况下有一个小对勾,表示本更改会被提交,如果你点击右边的小箭头,会弹出一个选项菜单,你可以选择不提交这个更改或是忽略它。
如果你选择了Don’t Commit这个选项,小对勾就会被一个停止标志取代,这项更改就不会被保存到源中。
如果你选择了Discard Change这个选项,会弹出一个确认窗口,提示你所做的更改会被恢复,并且无法取消这个操作。
如果你点击了OK按钮,所选区域的改变就会消失,就像他们从未出现过一样。
如果你仔细观察上面这个提交窗口,你会看到你所做的所有修改都会被Xcode看做改变,即使是一个空行。实际上空行相当于回车,在屏幕上是不可见的,因此作为改变也是理所当然的。
在本例子中,你不用忽略任何修改,而是允许提交所有更改,因此所有的改变标签旁边必须都是小对勾。
在两个窗口下面是一个空白的区域,中间显示了提交更改的信息。这个地方可以添加一些关于此次更改的简短描述,点击它,加入如下内容:
书写有意义的提交信息非常有用,尤其是当你频繁提交的时候。因此,把它当做一个必要的步骤。
现在这个窗口的基本信息看的差不多了,是时候做我们第一次的提交了。在这个窗口的右下脚,有一个按钮上面写着:Commit 1 file。
这个按钮会显示需要提交的文件总数。点击它之后你的第一次提交就完成了!打开Source control > History,你会发现它会被显示在列表中。
从上图中可以看出,我们编写的信息以及更改的文件数量会被显示出来。Xcode执行初始提交,所有文件都会被提交一下,而这次只有我们修改的那个文件被提交。
另外,关闭历史窗口,看一下Project Navigator,你会发现ViewController.m旁边的M符号已经消失了。
现在,让我们准备下一次提交。这次,我们给工程添加一些新的文件。添加文件最好的方式就是创建个新类,因此,按下Command+N组合键,添加一个Objective-C类。让这个类继承NSObject类,取名叫TestClass,然后添加到工程中。
完成之后,注意一下Project Navigator,你会发现两个新的类文件旁边有个A的字母标识,这意味着这些文件已经被添加到项目中,当然,他们还没有被提交。
打开ViewController.h文件,导入我们的新类:
- #import "TestClass.h"
下一步,打开ViewController.m文件,像下面一样声明一个私有属性:
- @interface ViewController ()
- @property (nonatomic) int sum;
- @property (nonatomic, strong) TestClass *testClass;
- @end
看一下项目导航栏,这次有四个文件有待提交。让我们打开Source Control > Commit菜单,将它们提交。
需要提交的一共有5个文件。除了之前修改的四个之外,还有一个项目配置文件。Xcode会在新类被添加到项目中之后自动修改这个文件。如果你你打开TestClass.h或TestClass.m文件,左边的窗口没有任何显示,如下图所示。
这是因为在这个文件在之前没有被提交的记录,因此没有一个可以比较的版本,在右边只显示了File was added。
在消息区写上这样一个描述:TestClass was added to project.. 之后点击Commit 5 files按钮即可。
这样第二次手动提交就成功了。你可以到Source Control > History 菜单查看提交的记录。