xcode source control commit for为什么是灰色

管理代码的地方主要有:Github(国外流荇)、CocoaChina、Cocoa4App、中国开源社区、CSDN、博客园、简书等等、、、、、

现在主要介绍如何使用Github托管自己的项目代码

尊重原创,特地说明接下面的介绍轉载自简书:

注意: 此教程只针对iOS项目,其他项目请参考此网站 

管理代码的地方主要有:Github(国外流荇)、CocoaChina、Cocoa4App、中国开源社区、CSDN、博客园、简书等等、、、、、

现在主要介绍如何使用Github托管自己的项目代码

尊重原创,特地说明接下面的介绍轉载自简书:

注意: 此教程只针对iOS项目,其他项目请参考此网站 

1.首先进入github官网注册一个帐号

2.注册完账号之后创建一个项目

3.设置创建项目的信息

4.創建项目完之后复制项目的地址以供后面下载项目使用

现在地址位置:这是我创建项目后显示的地址

5.在桌面创建一个文件夹,用来存储項目并进行管理

6.打开终端,按照步骤输入指令,下载速度可能很慢,要保证你的网速够快,毕竟是外网.

7.下载成功之后打开文件夹会发现有.gitignore readme 文件,就代表可以使用Xcode创建项目了

8.下面使用xcode创建项目

10.此时可以先提交项目

11.提交项目所要输入的说明, 如果仅仅是上传自己的项目就勾选push ,push是将本地服务器嘚代码上传到远程服务器

13.进入github网站,刷新一下界面,你就会发现成功了! 然后就可以在项目中尽情写自己的代码了. 写完代码继续提交项目就可以叻

以前没有使用过Github今天特地按照上述步骤走,我初次创建的贝塞尔曲线绘制图表的项目成功托管到了Github上截图如下:

欢迎关注我的github:

本文翻译自 (译者)欢迎您加入峩们的翻译小组

在应用程序开发过程中,很重要的一部分工作就是如何进行源码的版本控制当代码出现问题时,我们就需要将代码恢複到原先正常的版本如果是多个人共同开发一个项目,那么代码的控制就会非常复杂幸运的是,开发者不需要自己控制这些因为有專门的软件来负责,叫做版本控制系统


版本控制系统,或者说修改控制系统实际上是一种检测源文件的改变并将其保存留作以后参考使用的机制(软件)。此外它还能记录其他有用信息,比如是哪个开发者修改了代码何时修改的,修改了哪一部分以及其他历史信息。版本控制系统可以比较不同版本代码的不同有必要时能恢复整个项目到以前的版本,追踪有害代码从而减少产品的错误

通过版本控制系统,开发者可以在一个项目的不同分支上工作当项目的各个部分开发完备时,将它们放到一起形成最终的版本这个过程被称为匼并。事实上这种做法再团队和软件公司中相当常见:每个人负责项目的一部分,最终所有部分被整合到一起形成最终产品

对于个人開发者来说,版本控制系统并不是必需的但是我们仍然强烈推荐开发者使用它,因为它可以使代码方便的在有错误的版本和可以工作的蝂本之间转换事实上,很多开发者从来不使用类似的工具他们会在项目添加新的功能时手动保存原先的项目。这其实是一个很不好的習惯因为版本控制软件可以更好更高效地完成这项任务。

Git是一个常见的版本控制系统它最开始是由Liunx之父Linus Torvalds开发的,Git使用虚拟目录又称為repositories,来管理一切事物Git可以通过命令行调用,也有专门为它设计的桌面应用软件如果Git对你来说很陌生,我建议你在网上查看一些它的相關信息关于Git更深层次的内容都不在本文的讨论范围之内。

从Xcode5开始引入了使用git的一些新特性它将git的各项功能整合到一个菜单中,并提供孓菜单来进行软件合并的控制在接下来的阅读中你会发现,使用git来进行版本控制相当的简单快捷

我们接下来的任务就是学习如何在Xcode中使用git,以及Xcode是如何整合Git的各项功能如果你觉得对这些很陌生,我建议你先上网搜索一下相关的内容在接下来的教程中,我会假定你已經了解了版本控制系统和git是什么并将注意力集中在Xcode如何管理它上。

与其他教程中的demo app不同这次我们不会去实现一个应用来演示某一项iOS SDK特性,最终我们也不会产生一个示例产品实际上,我们会新建一个demo工程写几行代码,然后利用这个工程来演示Xcode提供的版本管理功能换呴话说,我们会集中注意里于IDE上而不是iOS本身。

我建议你跟着我一起一步一步实现这个实例项目在相应的地方手动添加代码,不用担心代码量不是很多。跟着教程的步骤我们将执行多种重复的版本控制相关的操作,并且我们必须实时看到结果如果我只是提供了一个具备所有操作的的应用,那么你无法体会到这些改变

好了,废话不多说了让我们仔细看看使用Xcode进行版本控制的要点吧。

每次在Xcode中创建噺工程的时候都会提示开发者是否将项目作为一个本地的git源。在创建工程的最后一步Xcode会有一个复选框如果选择了它,git源就会被添加到笁程目录中通常这个选项会被忽视,或是被认为是Xcode的另外一个没用的功能尤其是从未用过git的开发者,或是编程新手

点击下一步,也僦是最后一个步骤在这里先选择一个要保持工程的目录,然后在窗口底部选上Create git repository on (My Mac ):

默认情况下这个选项是被选上的,如果你不想使用git你鈳以取消它,但是我不建议这么做本教程中,你需要将它勾选上然后点击创建按钮。

创建完项目之后打开Finder,找到项目存储的目录茬目录中,有一个.git的子目录时Xcode为存储git源相关数据自动创建的。

如果你看不到.git目录你需要让隐藏的文件可见。具体做法就是打开一个Terminal窗ロ输入以下命令:

 

对于以前的OS X版本,

 

为了重启Finder应用输入

 

这就是本项目在本地git源保存的位置。实际上如果你选上了相应的选项,这个目录就会被创建相应地,在你创建新应用时.git子目录也会一同被创建。

显然使用Xcode创建一个git源毫不费力然而,如果你在项目创建时未创建git源之后又想加上这个功能怎么办呢?好吧其实你可以在任何时候为你的项目创建源,但是不是使用Xcode尽管这种情况很少发生,我还昰会告诉你该怎么做

如果你愿意的话,你可以直接跳到本教程的下一部分我建议你接着读下去,因为接下来这些信息还是很有用的

茬进行演示前,你需要首先通过Xcode下载Command Line Tools因为我们要在Terminal下操作,并且需要一些额外的工具如果你还没有下载,那就去Xcode>Preferences…菜单选择Download选项卡,展开Components区点击Commond Line Tools右边下载按钮。下载完成后一个对勾符号会取代下载按钮。

现在为这个例子再创建一个工程,完事后可以删了它在創建时取消那个创建git源的选项。这次我们不想让Xcode为我们准备一个源把这个工程命名为NoGitExample,保存到桌面然后你可以跟我接下来输入的命令┅样。

一切准备妥当后打开Terminal窗口(如果你之前打开了一个,那就先关掉它再重启从而使我们安装的命令行工具生效)。下面切换到新項目的目录:

 

别忘了在上边命令中设置Mac的用户名接下来,输入:

 

 这会初始化一个空的源如果你在Finder里面查看或是输入ls命令,你会看到.git子目录已经被创建很好,接下来输入:

 

这样当前目录所有的内容就被添加到源里面去了,最后输入以下命令:

 

接下来会出现一个本地git源所执行的改变列表,如下图所示:

现在git源就建好了但是如果你回到Xcode,打开Source Control菜单你会发现一切仍然是被禁用。

这是因为当我们使用命囹行工具创建git源时Xcode并未被通知,下面点击Xcode>Quit Xcode然后重新启动它,在NoGitExample项目中如果你再次打开Source Control菜单,你会发现所有的选项已经被使能了就潒一开始勾选上创建git源一样。

现在这个项目的使命已经结束你可以在桌面上删除它。


现在你知道如何为你所有的项目添加git源了即使你茬创建时没有添加,你也可以在以后任何时候为它手动添加源

Changes)提交更改指的是储存一个包含所有更改的新版本。一般来说当我们做叻一些有意义的工作,并且项目处于某一个稳定状态时就可以提交一次更改。然而具体什么时候提交更改并没有硬性的规定我的建议昰:从上次提交更改之后,如果你怕花费大量时间和精力做的新工作被误删很难恢复你就需要提交更改了。

默认情况下Xcode在项目创建之初会提交一次更改,这是为了保存项目初始状态这项工作会在后台完成,不会打扰你或者要求你进行确认如果你在项目创建时没有添加git源,但是之后你手动添加了你可以通过我们先前使用过的命令来进行提交:git commit for -m ‘Initial commit for’


实际上,你如果去Source Control>History…菜单你就会看到初次提交更改嘚记录,以后每次提交更改都会在这里有所记录。

接下来让我们小幅修改一下我们的工程在ViewController.m文件中,添加以下属性声明:

 

接下来像丅面这样修改viewDidLoad方法:

 

这意味着那个文件已经被修改,相比上一次提交更改文件有所改变。一般来说你每次改变文件,都会出现这个M字毋提醒你有未提交的更改。

下面看看如何提交更改其实非常简单,只需要打开Source Control>commit for菜单下面窗口就会出现:

让我们一步步看看它告诉我們了什么。在左边(标1的区域)列出了所有被更改的文件,在这个例子中只有ViewController.m这个文件被改变,因此列表中只有它被显示如果你仔細观察,你会发现文件左边有一个选择框默认情况下是被选中的,如果你取消它这个文件的更改就不会被提交。

在窗口的中间区域囿两个预览窗口,左边那个是文件当前版本右边是文件上一次提交更改的版本。因为我们目前只是创建时提交过一次更改因此右边显礻的是文件的初始状态。


左边窗口蓝色区域标出的就是更改的内容这样的表示让我们可以清楚地看出所有的修改。如果你仔细看会发現在两个窗口之间还有一个带数字的小标签,这个数字一一表示了各项更改在数字旁边,默认情况下有一个小对勾表示本更改会被提茭,如果你点击右边的小箭头会弹出一个选项菜单,你可以选择不提交这个更改或是忽略它

如果你选择了Don’t commit for这个选项,小对勾就会被┅个停止标志取代这项更改就不会被保存到源中。

如果你选择了Discard Change这个选项会弹出一个确认窗口,提示你所做的更改会被恢复并且无法取消这个操作。

如果你点击了OK按钮所选区域的改变就会消失,就像他们从未出现过一样

如果你仔细观察上面这个提交窗口,你会看箌你所做的所有修改都会被Xcode看做改变即使是一个空行。实际上空行相当于回车在屏幕上是不可见的,因此作为改变也是理所当然的

茬本例子中,你不用忽略任何修改而是允许提交所有更改,因此所有的改变标签旁边必须都是小对勾

在两个窗口下面是一个空白的区域,中间显示了提交更改的信息这个地方可以添加一些关于此次更改的简短描述,点击它加入如下内容:

书写有意义的提交信息非常囿用,尤其是当你频繁提交的时候因此,把它当做一个必要的步骤

现在这个窗口的基本信息看的差不多了,是时候做我们第一次的提茭了在这个窗口的右下脚,有一个按钮上面写着:commit for 1 file

这个按钮会显示需要提交的文件总数。点击它之后你的第一次提交就完成了!打开Source control > History你会发现它会被显示在列表中。

从上图中可以看出我们编写的信息以及更改的文件数量会被显示出来。Xcode执行初始提交所有文件都会被提交一下,而这次只有我们修改的那个文件被提交


现在,让我们准备下一次提交这次,我们给工程添加一些新的文件添加文件最恏的方式就是创建个新类,因此按下Command+N组合键,添加一个Objective-C类让这个类继承NSObject类,取名叫TestClass然后添加到工程中。


完成之后注意一下Project Navigator,你会發现两个新的类文件旁边有个A的字母标识这意味着这些文件已经被添加到项目中,当然他们还没有被提交。

 

下一步打开ViewController.m文件,像下媔一样声明一个私有属性:

 

看一下项目导航栏这次有四个文件有待提交。让我们打开Source Control > commit for菜单将它们提交。

需要提交的一共有5个文件除叻之前修改的四个之外,还有一个项目配置文件Xcode会在新类被添加到项目中之后自动修改这个文件。如果你你打开TestClass.h或TestClass.m文件左边的窗口没囿任何显示,如下图所示

这是因为在这个文件在之前没有被提交的记录,因此没有一个可以比较的版本在右边只显示了File was added。

版本之间的仳较(Comparing Versions)当你提交了同一工程的不同版本之后在他们之间比较,追踪修改信息就会非常方便当新添加的代码不能运行时,这时与之间蝂本进行比较就非常重要了你可以看出新版本相比上个稳定版有了哪些更改。

点击之后编辑器会分为两栏。最初两栏会显示相同的內容,点击编辑器下面的那个小时钟图标可以选择之前已经提交的版本进行比较。

点击之后两个版本的区别会在编辑器中显示出来。通常左边显示的是当前版本的文件,右边显示的是之前的版本蓝色高亮的区域显示了被更改的代码,因此比较代码的变化非常容易繼续选择任何此前的版本,并观察两栏的区别

你可能会注意到,在两个编辑器中间还有在提交窗口看到的小标签。点击向下的按钮可鉯跳出让你忽略更改的选项如果你点击了忽略更改,Xcode会提示你是否同意如果你同意忽略,这些被忽略的代码将会永远消失无法再找囙来。所以要注意不要无意中忽略任何代码

除了上面说到的方法,还有一种你回到之前版本的方法如果你仔细观察两个编辑器下面的笁具栏,在中间有个带箭头的时钟图标:

点击它之后两个面板之间的纵列内容就发生了改变,变成了一系列表示之前更改的时间戳注意并不是所有的都代表实际提交。代表先前版本的圆角矩形的数量取决于提交的次数在这个例子中,只有两个这样的图形代表了两次提交。

在这一列的下面有两个箭头。左边的那个属于左边的面板右边的箭头属于右边的面板。将箭头移动到任意之前的版本你会看箌在相应面板中的改变。如果你想比较当前版本和之前任意版本的区别让一个箭头指向local行,然后移动第二个箭头时间戳从底部到顶部玳表了从新到旧的代码。在base行你会看到上一次提交的内容。继续向上移动你会看到最初的提交,如下图所示:

现在你知道如何比较版夲之间的区别了再继续深入之前,把前面学习的练习一下玩玩吧


究竟是谁的错?(Who’s Got the Blame)除了比较文件的版本外Xcode还可以让你追踪文件嘚提交者,以及是谁改变了哪一部分代码在一个多人的团队中,这非常有用要使用这个功能,点击View > Version Editor > Show Blame View菜单或是讲鼠标放在工具栏的Version editor 按鈕上,选择Blame选项一个与上面类似的窗口将会出现:

正如你看到的,当前文件依据不同的提交被水平线分成几段每个代码段的作者,以及提交信息和其他信息显示在窗口右边的一个特殊面板中

如果你还没有做过,那自己动手打开这个blame视图注意一下Xcode展现代码段作者的方式。在这个视图中可以方便地找到某一代码在何时被谁提交以及其他你想要的信息。将鼠标放在blame面板上将会显示修改的一些其他信息。當指针停在提交段上时一个带图片的小按钮就会出现在它的右边。点击选中该段代码就会弹出一个附带提交信息窗口。在这个窗口中你还可以跳转到比较窗口(indication

除了比较视图和blame试图,其实还有一个日志视图(Log view)你可以通过View > Version Editor > Show Log View来打开它。或者如果你在这里就不在详细说它叻你可以自己去看看,毕竟这个用起来也没那么复杂


分支(Branches)试想一下,你现在的工程有一个即将发布的版本或是已经发布的版本,你突然想添加一些新的特性如何防止这些新添加的代码让整个项目陷入瘫痪呢?答案很简单:你需要使用分支


如何简单的理解分支呢?你可以把你的项目想象成一棵树稳定版本就是树的主干。任何添加新功能的版本都必须是树干的一部分分支,就像是树的枝干咜从树干生长出来,向不同的方向生长在git中,你可以通过创建分支来为你的代码设置一个新的路径来实现新特性而不用担心在开发中破坏主干。

实际上在git中默认都会有一个分支,叫做masterXcode自动执行的第一次提交中就发生在这个分支中。通常单独的开发者只在master这个分支開发,这其实不是一个好习惯无论你是单打独斗还是组团合作,我认为在对项目作出重大改变或添加重大功能时使用分支是十分重要嘚,它会为你避免很多麻烦当然,在团队项目中为你自己负责部分的代码搞一个分支几乎是必须的。

关于分支你必须记住以下两点:
2. 任何在第二分支中实现的代码或者功能最终都必须合并到master分支,这样正式发布的应用程序才是完整的(以后再讲这一点)

当你开始一個新分支时,你实际上是以当前工作状态作为起点即使你有任何未提交的更改。从这个时候起所有的改变都会只体现在分支中。

为这個分支起一个名字我就把它起名为AnotherBranch好了。现在你怎么给它起名其实都无所谓点击OK按钮,等一下新的分支就会被创建而当前的代码也會复制到新分支中去。

打开Source Control菜单你就可以轻松地找出活动分支是哪一个:它就在项目名字的旁边。

现在让我们做一次新的分支的提交。在这之前让我们添加一些新的代码。打开类文件在私有属性区添加以下方法声明:


 

 

 

现在,点击Source Control > commit for菜单版本比较窗口将会出现,你会看到只有一个被修改过的文件--ViewController.m文件新添加的部分会被高亮显示。

Editor)找到右边编辑面板下面的工具栏,你会看到被选中的分支是AnotherBranch点击它,你会看到这个分支和master分支同时出现从master分支中选择任意版本,Xcode都会高亮显示两者之间的区别通过这样,你可以方便地跟踪所有分支间玳码的改变

从这个窗口你可以选择想要跳转的分支,在这里让我们跳回master分支:

选择它并点击Switch按钮master分支就会成为当然活动分支。你会发現在AnotherBranch中做出的改变并没有出现在master分支很好,我们在管理工程推进的同时却没有修改稳定版本。

合并分支(Merging Branches)在分支中进行开发是一种恏习惯然而,如果代码改变要体现在发行版中那么分支就必须被合并到master分支中。这一节我们将会告诉你怎样合并它们在Xcode里,将两个汾支合并成一个非常简单

先让Xcode飞一会,然后到ViewController.m文件中,再创建一个私有方法首先声明它:


 

 

 

终于还是来到这一步,关于把两个不同的汾支合并成一个你有两种选择“
1. 从分支合并:与你选择的分支相关的任何改变都会被合并到现在活动分支中。
2. 合并到分支:当前活动分支的任何改变都会被合并到你选择的分支中

这两种方式你都可以在Source Control > GitDemo 菜单中找到。注意当你的活动分支是master分支时第二个选项是不可选的。

假设一个开发者在Anotherbranch分支实现一个sayHello方法另外一个开发者在LastBranch中创建实现了sayByeBye方法,现在你需要将两个人的工作合并到下一个稳定版本中想┅想你需要怎么做?很简单按以下方法将改变从两个分支中合并进来:

首先,确保当前活跃分支是master分支

接下来会出现一个比较窗口,茬里面你会看到合并之后代码的更改看一眼,感觉差不多了就再点击Merge按钮

Xcode会询问你是否保存项目的快照,点击Enable按钮让Xcode飞一会,然后僦好啦AnotherBranch里面添加的内容已经合并到master分支中。

使用同样的方法来合并LastBranch你会发现如果你不提交更改,Xcode不会让你再次合并于是,我们只好先提交一下在比较窗口你会发现一个红色的区域显示合并之后的更改,而不是之前的蓝色这意味着分支中的代码将会替换原先活动分支中的代码。

你可以轻松地避免这种现象的发生在编辑面板的下面有几个小按钮,你可以试试他们都有什么作用我选了第一个,它的意思是master分支的代码会被放在上面另一个分支的代码会跟在它后面。

处理接下来所有需要更改的代码不要有遗漏。完事后就点击Merge按钮


恭喜你!你已经成功的学会从多个分支合并了代码,类似的情形你也应该会了

忽略更改(Discarding Changes)放弃不想要的代码更改功能非常有用,只需輕轻一点自从上一次提交之后的更改都会被放弃。当你在开发过程中发现出了大乱子你想从上一个稳定状态重新开始时,这个功能就派上用场啦注意放弃更改这个功能没有回头路,点完之后你就没有办法再撤销这个操作所以,要小心使用啊!

之前当我们在讨论版夲比较时,我们学会了如何忽略某一部分更改的方法下面,我们要学一下如何一下忽略自从上一次提交之后的所有更改

为了测试这个功能,首先写一些代码打开ViewController.h 添加一个公共方法声明:


 

现在,让我们在ViewController.m中添加一个这个方法的实现简单点就行:


 

如果你注意到Project Navigator,我们刚剛更改的文件旁边有了一个M标识很好,我们想看看如果忽略这些更改这些文件是否会回到更改之前的状态。

这里有一个重要的细节:伱可以选择忽略所有文件的更改也可以选择忽略单个文件的更改,这完全取决于你如果你想忽略一个文件的更改,首先选定这个文件在这个例子里,如果你只选择ViewController.m文件然后打开Source Control菜单你会在ViewController.m中发现Didcard Changes这个选项。类似的如果你只选择ViewController.h也是一个道理。然而如果你想忽视這两个文件的更改(这里假定有两个以上的更改),就在Project Navigator中选中它们然后再打开Source Control菜单。相应的位置就会显示Discard Changes in 2 Files像下面这样:

然而,这次峩们不会使用这个按钮我们要用Discard All Changes。点击它之后一个确定提示框就会出现,这是这部分Xcode防止你误删代码的唯一措施

点击Discard All Changes, 那你刚才写的那个公共方法就永远属于过去了。看到了吧只需几步就可以让你从当前工作状态恢复到之前的提交,所以我再一次提醒你要在使用Source Control 中小惢点别误点了这个按钮。

总结通过这篇教程我尽力详述了在Xcode中进行版本控制的方法。其实在幕后真正起作用的是git----地球上应用最多的蝂本控制系统。你可能注意到我在教程中并没有过多的提到GitHub或者任何Xcode的一些功能----其实我是故意这样的我想把注意力集中在使用Xcode进行git管理嘚内容上。只有当你懂得了如何进行版本控制之后才能真正的使用GitHub。我想再重申一下如果你是一个团队在工作,使用版本控制工具是必须的!如果你是单打独斗使用版本控制工具也是很有必要的,它可以为你花大量时间和精力所做的工作提供保障并且在你添加新功能时可简单地进行扩展。这个工具就像有些人说的那样一旦用了,就再也回不去了!最后我希望这个教程会对你有用。

我要回帖

更多关于 commit for 的文章

 

随机推荐