(译)如何在XCode 8中使用Git (进行中)

<p>原文地址:https://www.raywenderlich.com/153084/use-git-source-control-xcode-8</p>

无论你是一个独自工作的开发人员或者在团队里工作,如果你没有在使用源代码控制管理你的项目,你应该开始去用了。源代码控制是惊人的,因为它可以帮助您更容易地恢复到旧版本的代码,无风险的为已经工作的应用程序添加新功能。还可以看到你的代码随着时间的推移如何改变,并作为一个团队工作。最好的源代码控制系统之一已经被内建到Xcode中了–它就是Git!

Git是一个分布式的版本控制系统,最初由Linus Torvalds开发,他是Linux内核开发背后的主要力量。Git的好处是,不必有任何中央存储库--每个人都可以拥有自己的代码视图,并从其他源中提取更改。

在本教程中,你会得到Git的操作经验t和学习如何直接在Xcode中使用它。

使用Git初步

在这里我们会上手实践,而不是漫谈关于Git的理论。您将创建一个新的Xcode项目来尝试一些使用Git进行代码管理每天要做的典型任务。
打开Xcode,创建一个新的单一视图的应用程序项目。

按下图填写模版选项:

<li>产品名称:gituseexample
<li>团队:你的苹果开发团队
<li>机构名称:你的名字
<li>组织标识符:顾名思义,它是你组织的标识符。没有就随便填一个。
<li>语言:Swift
<li>设备系列:iPhone
<li>使用Core Data,包括单元测试,包括UI测试:都不选

<p>现在单击下一步。下面的对话框允许您选择保存项目的地点。选择一个位置,并确保选择了在我的Mac上创建Git库。这样做以后,点击创建。

<pre>注意:如果您没有看到这个选项,单击选项按钮。</pre>
Xcode将创建一个新的项目以及Git仓库。

所有源代码控制系统,包括Git,将它们的数据存储到存储库中,以便它们可以管理项目版本并跟踪整个开发周期的变化。将库作为版本的数据库。

在您的项目的工作过程中,您将添加文件,修改代码,并更改您的项目多次。
当你做了一系列的改变,你的项目处于一个“已知的好”状态(通常是每天一次或多次),这是一个好主意,检查你的变化到仓库。这给你一个记录的“已知好”的状态,你可以随时返回。
但是,由项目模板创建的代码呢?
您的项目仍然只包含模板文件。有什么你愿意因为Xcode也为你当你创建你的项目。:]
要检查该选项,请从菜单中选择源代码管理\历史记录。
源控制历史菜单
在下拉窗口中,注意到有一个提交,以及一些关于它的信息,包括提交标识符,日期和时间,人的承诺,文件更改,并提交消息。
gituseexample历史
注:通常,您可以单击“显示修改文件”按钮以查看有关提交内容的更多信息。不幸的是,由于在Xcode的一个bug,这只是工作一段时间。您将学习一个不同的,更可靠的方式来看到下面的信息。
现在,对你的项目做一些修改。Open AppDelegate.swift和改变方法的应用(:didfinishlaunchingwithoptions:)以下:
功能:
应用(应用程序,
didfinishlaunchingwithoptions launchoptions:uiapplicationlaunchoptionskey:[任何]?)-> Bool {
打印(“应用程序完成发射”)
返回true
}
在你保存文件,你会注意到,appdelegate.swift现在有一个“M”标志旁边的文件名:
改性appdelegate.swift文件
“M”徽章代表“修改”,这意味着您修改了文件,但尚未对本地Git库进行更改。
接下来,ViewController.swift和viewdidload()开放后添加以下代码:
“ibaction func buttonClicked(_发件人:UIButton){
打印(“这是Git教程”)
}
现在,从对象库打开Main.storyboard和按钮拖到屏幕。更改按钮显示的文本到任何你想要的,如下面的截图所示。

最后要做的是将动作连接到按钮。单击视图控制器场景中的黄色视图控制器图标。从连接检验员(右边最后一个标签栏),单击“下一步”开路:buttonClicked在接收动作面板拖动到故事板中的编辑按钮。从弹出菜单中选择触摸。
连接按钮操作
如果您检查项目导航器,您会注意到您编辑的所有三个文件都有一个“M”标记。
修改项目导航文件
建设和运行,以确保项目工作。验证当单击该按钮时,您会看到“这是一个Git教程”的消息登录到控制台。
按钮操作控制台日志
哇–代码是在一个“好”的状态!是时候作出承诺。
做一些承诺
提交文件很容易!从菜单中选择源代码管理\提交。
承诺
一个新窗口将显示,类似于以下:
提交窗格
正如你所看到的,屏幕被分成两个窗格。左窗格显示当前状态中的文件,以及上次提交后所做的所有更改。由于这是您的第一次提交,您将看到自项目创建以来所做的所有更改。
右窗格在更改之前显示该文件。
注释将窗格
看看什么礼物在Xcode提交窗口。
左侧面板(1)显示项目中未提交更改的所有文件。默认情况下,Xcode假定您要包括在这个提交和检查他们的箱子都。如果你想排除一个文件从这个承诺,取消它。正如您将在一瞬间看到的,您还可以决定文件中包含哪些个人更改以包含在此提交中。
注意代码窗格中的蓝色突出。这些表明你做出的改变。任何更改,即使它只添加或删除空白,将被跟踪,并将与这些蓝色突出标记。
自己试试看。请单击“取消”按钮,打开viewcontroller.swift,并添加在文件的末尾几条新路线。现在选择源代码管理\再次提交。你的结果应该类似以下:
修改的部分
正如您所看到的,Git仔细跟踪您在开发周期中所做的每一个更改。
在该地区的两源窗格之间,你所有的变化都是列举的Xcode(标记为“2”以上)。
每次更改默认检查。排除特定的变化从这个承诺,取消它。
例如,更改3是不重要的,因为它只包含前面添加的空行。选中它,这个改变不是承诺。
排除变化
请注意指示器已变为灰色,以使此更改不再包含在提交中。
排除个人更改的另一种方法是单击“更改编号”旁边的箭头。两个选项将出现:不提交(或提交的情况下,更改未选中)和丢弃更改。在这种情况下,选择不要提交。
不要提交/丢弃更改
在你完成一个承诺,Xcode需要你输入提交信息在屏幕的底部(标记为“3”以上)。这些信息帮助您更好地了解每一次提交的目的。
提交信息
现在点击提交4文件。恭喜,你有了你的第一个承诺!如果返回历史窗格,则将在日志中看到新的提交:

这个简单的改变和提交的过程就是你90%的时间所做的事情。相当容易,对不对?现在你没有理由不去做!:]
注:鹰眼读者会想“我只改变了3个文件。我为什么要提交4个文件?“跟踪每一个文件在你的项目目录包括所有文件Xcode使用幕后。通常,这正是你想要的。稍后您将看到如何在需要时更改此行为。
分支
Git支持Xcode的另一个特点是提交更改到一个特定的分支的能力。
但是等等,什么是分支?
分支是保持一组提交在一起的方法。通过在不同的分支上工作,你可以保持特征分离,减少你完全破坏你的项目的风险。
信不信由你,你已经在使用分支了。当第一个库被创建时,Git也在该库中创建一个名为“主”的分支。到目前为止,你所有的工作都在主部门。
主分支应始终保留项目的主要副本。您使用其他分支作为一种方法来存储工作正在进行中,尚未准备释放。您还可以使用它们来存储实验,可能永远不会释放。
例如,假设你在应用程序中添加了一个新的地图功能,但它还没有完全准备好生产。为了进行模拟,创建一个新的派生类从NSObject的名字mapforitinerary。在这一点上你的项目可能看起来像这样:
添加一个文件
注意状态”的“新文件mapforitinerary.swift。这表明这是一个尚未提交到存储库的新文件。
从菜单中选择源代码管理\提交。
提交新文件
如果你选择与身份的文件,你会注意到Xcode不提供任何以前版本的比较。这是因为文件还没有被提交到存储库,所以没有什么可以比较它。
添加地图功能到您的应用程序代表一个大的变化在您的代码。这是一个完美的情况下使用一个分支。这将有助于隔离风险的情况下,有问题与您的新的地图代码。
单击“取消”代替“提交3文件”按钮。从菜单中选择源控制gituseexample \新的分支。注意,当前的分支-主人-显示在菜单中。
新的分支
Xcode问你命名你的新分支。
新分支名称窗格
名称的分支map_feature单击创建。
Xcode创建新分支,切换到它。您可以通过打开源代码管理菜单来验证这一点。
显示当前分支的源代码控制菜单
选择源代码管理\提交…,输入一个提交消息,然后点击提交3文件。
mapforitinerary提交信息
请注意,在项目导航器中的文件旁边的所有状态字母已被清除。这意味着您不再有任何未提交的更改。
没有未提交更改的项目导航器
看到你的分支,从菜单中选择源控制gituseexample \配置gituseexample。
Git项目配置
在结果窗格中选择分支选项卡。

支持
你正在研究你的项目的最新版本,建立最新的酷功能。你休息一下,吃点点心,然后突然灵机一动,找到一种更好的方法来建造它。在这一点上,您可能希望从源代码管理恢复最后一次修订,并开始新。
badstableversion
Git让它变得微不足道!:]
Open Main.storyboard将新的视图控制器到画布上的对象库。
两个视图控制器
Open MapForItinerary.swift和添加方法sayhello()。
mapforitinerary NSObject类:{
功能sayhello() {
打印(“从mapforitinerary“你好)
}
}
注意,修改后的文件的状态已更改为“m”,这意味着文件已在本地修改并等待提交。
此时,您可以有选择地放弃对项目所做的更改。选择在项目导航main.storyboard然后选择源控制\丢弃的变化“主要从菜单。故事”。
放弃更改菜单
Xcode将提示你确认你真的要放弃在该文件中的所有更改。
丢弃的提示
单击丢弃更改。您应该看到视图控制器(和黄色警告图标),您刚刚添加消失!这可能是非常有用的,当你添加了一些变化,但他们不工作,你想回到最后一个已知的良好状态。
除了丢弃整个文件的更改外,还可以丢弃个别更改。
mapforitinerary.swift至今仍有“M”徽章。从菜单中选择源代码管理\提交。单击“更改编号”旁边的向下箭头并选择“放弃更改”:
选择性丢弃
噗!你的改变消失了。由于没有剩余的提交,请单击“取消”关闭提交窗口。
现在,您已经尝试了放弃更改,您可能会想知道之间的区别是什么和不提交选项,您选择较早。
虽然这两个选项都会导致存储库中没有被记录的更改,但确实存在很大的差异:
不要提交让您跳过更改,这样它就不会被其他更改提交,但是它将保留在本地源代码中。
丢弃更改不仅跳过更改,还将从本地源代码中删除更改。
时间旅行
丢弃更改是恢复工作代码并节省时间的好方法。然而,在某些情况下,它可以是一个小的限制。
Git允许您保存项目的多个修订,其中每个修订都有特定的更改。这些都存储到由Git管理的存储库中。
如果选择放弃对文件的更改,Git将恢复文件的最后一个提交版本,并且只保留最后一个。那就是限制的所在。
随着时间的推移,您的项目库将包含反映您开发历史的多次修订。假设您希望还原到特定文件的第一个或第二个版本。没有办法,只是通过丢弃变化。不要绝望,然而,随着Xcode和Git做容易做的。
选择在项目导航viewcontroller.swift。现在从菜单中选择查看\版本编辑器\显示比较视图。或者,你可以点击第三个按钮在编辑部在Xcode窗口右上方的工具栏。
编辑选择按钮
版本编辑器分为两个窗格,如下所示:
比较论
这允许您比较选定文件的两个修改,并与提交窗口中的比较视图完全一致。默认情况下,您当前的源文件显示在左边,而最近的修订存储在存储库- Git调用这个头-显示在右边。
若要从存储库中显示早期版本,请单击右窗格底部的时钟图标(红色下方标记),然后选择较早的修订版本。
修改列表图标
选择修订之前的头修订如下所示。你看到的确切信息将不同于截图。
以前版本的列表
现在,返回到该文件版本,只需单击箭头旁边的更改号码在比较窗格和选择丢弃更改。这很容易!:]
放弃改变
一旦你恢复到早期版本,你将需要提交这个“新”版本的文件作为最新的。现在就去做。
你怎么知道哪一个早期的提交是你想要的?虽然你可以使用你先前学到的历史命令,但有一个更好的方法。单击并按住“版本编辑器”按钮并选择日志。还可以从菜单中选择“查看\版本编辑器\显示日志视图”。
选择日志查看
Xcode将名单提交包含更改到当前文件。注意每个提交的列表包含提交标识符。
修订历史
这些标识符与在较早使用的修订历史列表中所示的匹配。
注释修订历史列表
您也可以点击显示修改文件

合并分支
早些时候你知道Git允许你在多个被称为分支的修改流上工作。您还了解到,在主分支以外的分支上完成所有的开发是很好的做法。那么,当你完成一个功能的开发并想发布它时,你会做什么?简单的!将开发分支合并到主分支中。
您的新地图功能尚未完成,但您的设计器要求在主界面上添加另一个标签。为了实现这一点,你将需要离开你的背后map_feature分支现在创建一个新的分支从“好”的状态,是你的主分支。
从菜单中选择源控制gituseexample \开关分。
切换到分支
从可用分支的列表中,选择“主控”和“按一下”开关。
切换到主
重要的是要确保你从正确的“已知好”状态开始你的新分支。
现在,从菜单中选择源控制gituseexample \新的分支。
创建新的分支
名称的分支new_label单击创建。
名称new_label分支
您可以验证您的工作对new_label分支通过单击源控制和看在工作副本分支的名字。
验证您的分支
现在,是时候添加新的标签,您的设计师要求。
切换到标准编辑视图,选择main.storyboard,并拖动一个UILabel在主视图。
我的新标签
建立和运行,以确保所有是确定的,然后提交您的更改库。一定要添加一个提交消息。
现在切换到主分支,再次运行应用程序。正如预期的那样,新加入的分支UILabel中你是不是有。最后的工作是将新分支合并回主。
选择源控制gituseexample \合并分支…从菜单。
合并分支
从可用的分支机构名单,选择new_label点击合并。
选择合并源
将出现合并窗口,允许您控制合并过程。合并源(“从”分支合并)将出现在右边。您的当前源,如由合并修改的,将出现在左侧。使用屏幕底部的按钮来控制合并的方向。一个简单的合并,例如这一个,Xcode的默认设置将是正确的。
合并窗口
最后,单击合并按钮启动进程:
如果一切顺利的话,你应该看到变化(的UILabel)从新的分支出现在用户界面,当你点击main.storyboard或当你运行你的应用程序。现在您的更改是在主分支,因为合并!使用一个方法查看您的提交历史,您学会验证此更改出现在历史中。
日志视图提交历史
忽视生成的文件
回来的路上,在你第一次把你看到的,除了你的源文件,跟踪修订由Xcode的文件。这很重要,因为这些文件与你的源文件一样是你的项目所必需的。你需要他们重建你的应用程序或与他人合作。
然而,作为它的工作,还产生了其他文件,改变各建。它不是拯救这些Xcode重要可以自动恢复。事实上,保存它们会使Git做不必要的工作,并使您更难在提交历史中发现重大变化。
Git提供了一种机制,忽略这些文件:适当命名的。gitignore文件。在其名字初使MacOS视它为一个隐藏文件,所以一般不会出现当你看在Xcode或查找你的项目。但是,不要害怕,因为Git会发现并使用它没有问题。
而不是为自己的一切放在你的。gitignore文件,你可以下载一个gitignore.io。
首先,打开一个终端窗口并输入以下命令。你只需要做这一步一次,而不是每一个项目。
$ git config --全球alias.ignore”!gi() {卷曲我的https:/ / www.gitignore。IO / API / $”;};GI”
现在,对于任何使用Git的项目,在终端窗口中执行以下操作:
存储项目所在地的< <目录>
Git忽略斯威夫特,MacOS gitignore >。
gitignore git add。
git commit -m“添加”。gitignore文件”
这下载最新的。写银行代码在MacOS gitignore配置。您的终端会话应该看起来类似:
gitignore文件添加。
注意你说的。gitignore文件到您的库Git跟踪由于过滤了也是你项目的一个重要组成部分。
Xcode和GitHub
到目前为止,您所做的所有工作都使用了您的计算机上保存的本地存储库。GitHub网站允许你发布你的项目到一个远程存储库保存在Github服务器。这是伟大的,因为它允许您轻松地与他人共享您的代码和工作作为一个项目组。
如果你不已经有一个Github帐号,去GitHub和报名。
一旦这样做,创建一个重新

从这里去哪里?
雪人手持视频
想学得更快?节省时间与我们
视频课程
恭喜你,你现在知道如何使用Xcode,Git源控制使用分支、合并分支,与GitHub,和更多!
在这一点上你最需要的工具在日常的基础上用Xcode的Git源控制工作。如果你想了解更多,这里有一个伟大的资源清单退房:
维基百科Git的文章
维基百科GitHub的文章
官方Git文档
我希望你喜欢这个教程,我期待你的评论!:]
团队
每个教程在www.raywenderlich.com团队是由专门的开发商,它符合我们的高质量标准的建立。本教程工作的团队成员是:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容