理解 XCode 中的 Git 版本控制(4)

在主分支以外的分支上工作,这在执行状态中是很好的习惯。然而,如果任何代码的添加或者修改都意味着要在应用程序下一个版本中出现的话,这就必须放到主分支上,所以在这一部分,我们将会看如何完成这项任务。正如标题所总结的一样,我们谈论的这部分功能就叫合并,以及Xcode提供的一种快速合并两个分支版本的方法。

让我们做一个小实验来看看如何合并工作。首先要确定你现在处在主分支上。如果不是,请到资源控制器Source Control > GitDemo – AnotherBranch > 切换到另一个分支Switch To Branch…菜单中,并在弹出窗口里选择主分支。

接着,用资源控制器Source Control > GitDemo – master > 新建分支New Branch… 菜单创建一个新的分支,取名为LastBranch

Xcode Version Control - Last Branch

给Xcode一点时间去准备。现在,在ViewController.m文件中创建一个或多个假的私有方法,并声明它:

1
2
3
4
5
6
7
8

 

@interface ViewController ()

...


-(void)sayByeBye;

@end

 

然后实现它:

1
2
3

 

-(void)sayByeBye{
NSLog("Bye - Bye");
}

 

最后,在viewDidLoad方法中调用它:

1
2
3
4
5
6

 

- (void)viewDidLoad
{
...

[self sayByeBye];
}

 

在合并之前,该分支上做的修改必须先提交到本地仓库。因此,在资源控制器Source Control > 提交Commit...去执行提交。

言归正传。合并两个不同的分支到一个分支上,你有两种选择:

从分支上合并Merge From Branch: 你可以选择在分支上做过的任何修改来合并到当前工作的分支上。

合并到分支上Merge Into Branch: 你可以选择在当前工作的分支上做过的任何修改合并到分支上。

这两种选择你都可以在资源控制Source Control > GitDemo菜单里找到。注意,当你当前活跃的分支是主分支的话,第二个选择是不可用的。

现在假设有一个开发者在我们之前创建的AnotherBranch分支上开发并在上面实现了sayHello的方法,而另一个开发者在LastBranch上开发并实现了sayByeBye的方法,而你的任务就是把这两个新增的都添加到应用程序中下一个稳定版本。你打算怎么做?简单来说,当具备主分支活跃,你得先从其他两个分支进行如下合并:

首先,确保你工作的是主分支,如果不是要先切换到主分支上。

然后,打开资源控制器Source Control > GitDemo - master > 从分支合并Merge From Branch...,然后从窗口打开并选择AnotherBranch分支并点击合并Merge按钮。

Xcode Version Control - Merge Branch

一个版本比较的窗口将会出现,在那里就会有机会再合并代码前重新审查所有代码修改过的地方。如果你需要,我们可以快速浏览一下,当你准备好了,就可以再次点击合并Merge按钮。

Xcode Version Control - Merge Branch

当Xcode询问你有关该项目快照的事,点击启用按钮继续。稍等片刻,瞧!AnotherBranche分支已经合并到主分支上了。

按照同样的方法,从LastBranch分支中合并过来。你就会发现如果你没有提交本次版本修改过的文件,Xcode不会让你再次合并。所以,唯一的方法只有,先提交。提交完了再尝试从LastBranche分支上合并。在版本比较的窗口中你会发现一些红色的区域,表示这些修改的地方会在合并之后代替蓝色那部分。这意味着要合并过来的分支上的代码将会代替当前正在工作的主分支上的相同行数的代码,如下图所示:

如果你使用编辑窗口下的工具栏按钮,你可以很容易避免这种情况,并保持现有的和新增的代码。在选择的区域内,点击圆形上面带箭头的按钮,可以使用所有按钮来查看他们的效果。在下面的截图中,我选了第一个按钮,意味着存在在主分支上的代码将会置于从其他分支合并过来的代码的前面:

Xcode Version Control - Merge Line

仔细检查所有修改过的地方,确认任何分支里的代码都没有被排除在外。一旦你完成了,你要确认所有代码都在的,然后就点击合并Merge按钮。

恭喜!你已经成功从多个分支中合并代码到一个分支上了,现在你知道如何用Xcode处理类似的事情了。

放弃修改

这个选项是对放弃那些在工程中不想被修改的文件非常有用的,因为只需要点击一下鼠标就可以撤销所有自上次提交到目前所做的操作。当实现的方式不是预期的方向,而你想从上次提交的版本重新开始工作,这时候就非常有用。注意,放弃所有改变的操作是不可恢复的选项,因此,如果你不小心做了这个操作,你将没有任何机会恢复到你刚刚所做的工作。所以,要谨慎。

在此前,当我们讨论版本对比的时候,我们第一次看到了如何通过在编辑器窗口之间使用每个标记区域的小菜单按钮来放弃指定代码段的修改。这里,我们将看到如何在整个项目中执行放弃操作,并瞬间恢复到上次提交的版本。

测试这部分的目的,打开ViewController.h文件,添加一个公共方法声明:

@interface ViewController : UIViewController

-(void)aVeryCoolMethod;

@end

现在,在ViewController.m 文件添加一小段这个方法的实现:

-(void)aVeryCoolMethod{
    NSLog("I'm feeling that you'll discard me... Really?");
}

如果你注意到了项目导航栏,M标志旁已经添加了我们创建的两个文件。这正是我们想要的看到的,如果取消了变化,所有修改的文件将会受影响并恢复到先前的状态。

这里有个很重要的细节需要提一下:你可以放弃所有文件之前所做的修改,也可以放弃部分指定文件修改。这个决定在于你,如果你想选择性放弃,那么请首先确保选的文件是你想放弃修改的。为了让后面可以看得清楚点,如果你只选择ViewController.m文件然后打开资源控制(Source Control)菜单,你会发现在ViewController.m会有个标题为“放弃修改(Discard Changes)”的选项。同样的,如果你只选择ViewController.h文件并打开相同的菜单,你也会在ViewController.h中发现放弃修改(Discard Changes)的选项。不过,如果你想同时放弃这两个文件的修改(并假设这里面会有超过两处的修改),只需在项目浏览器(Project Navigator)选择他们并再次打开资源控制器(Source Control)菜单。相应的指令变成放弃这两个文件的修改……如下图所示:

Xcode Version Control - Discard File

 

轩骐
翻译于 5天前

1人顶

 

翻译的不错哦!

 

在这个例子中,我们不打算使用这个选项,用放弃所有改变(Discard All Changes)来代替。通过点击它,屏幕上就会出现确认的提示窗口,这是Xcode防止你误操作的方式。

Xcode Version Control - Discard File

点击放弃所有改变(Discard All Changes...)提示框的按钮,公共方法就会恢复到原来的样子。正如你所见,放弃所有改变仅仅是点击几下就会远离你现在的状态,所以我再次提醒你,当你想放弃之前操作的时候要非常小心,尤其是你通常都使用资源控制器(Source Control)菜单。

 
总结

在本次教程中,我努力深入细致地把如何使用Xcode管理版本和资源控制讲述给大家。在幕后,真正工作的其实是git,一个非常流行和非常有用的版本控制系统。你或许发现文中并没有提及到GitHub或者任何有关Xcode功能的地方,但是���这么做的目的,是想完全关注在通过Xcode进行的git管理上,除此之外,如果你知道如何处理版本控制,你也可以直接使用GitHub。进一步说,正如我在教程开始时候经常提到的,如果你是团队中的一员,那么用版本控制系统来工作是强制性的。如果你是个人工作而且你之前没用这个的话,那么也强烈地建议、鼓励你现在开始使用Xcode的版本控制。这是一种保证你不会对现成的工作造成任何的损害,也不会增加工作量的方式,除此之外,当添加新的功能来拓展你的应用程序时也变得非常容易。最后,我希望前面所展示的例子是有帮助的,以及使用Xcode来管理版本是能够有效地节省工作时间的。

和往常一样,你可以随时留下评论来分享你的看法。

GitLab 的详细介绍请点这里
GitLab 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/167efa4ce7f2db7faf0afe8744ce6ed3.html