这件事发生在我们所有人身上:我们更改了代码,突然之间,一切似乎都“坏了”。 如果您知道如何使用版本控制,那么这就是福音。 在本教程中,我们将从命令行学习如何使用Git。
关于版本控制
在开始之前,我们应该仔细检查什么是版本控制。 版本控制系统是一种软件解决方案,可以轻松地保存代码和其他数据的修订版,以便您可以回滚到以前的版本,查看已进行的更改以及与协作者共享更新。
版本控制有很多优点和用例。 例如,通过查看对项目的更改(“ commits ”),您可以确定谁编写了任何特定的代码以及原因。 您还可以回滚发现错误或破坏功能的所有更改。
今天最常用的版本控制系统是Git,因此我们将在本文中介绍它。 请注意,还有其他广泛使用的系统,例如SVN和Mercurial。
关键术语和概念
- 仓库或回购所有-包含单个项目的代码,每个文件的全部修改历史记录。
- 工作目录 -编辑代码时,您正在更改工作目录。 如果要将这些更改保存到仓库中,则需要进行commit 。 如果工作目录中的所有更改都已提交给仓库,则工作目录为clean 。
- 提交 -对源文件的一组更改。 通常,将这些更改分组在一起,以便每个提交都与单个错误修复或功能有关。
- 分支机构 –项目的工作可以组织为分支机构。 这样一来,一个开发人员或一组开发人员就可以处理一个功能,而另一名开发人员可以处理另一个功能。
- 合并 -将两个分支中的更改集中在一起。 通常,这可以由Git自动完成,但是如果发生冲突 ,则可能必须手动告诉Git如何合并文件。
仓库管理服务
使用版本控制时,将创建一个存储库或repo ,最常见的是将此存储库托管在Repository Management Service上。 就本教程而言,我们不会在任何地方托管我们的存储库,因此您可以专注于实际使用版本控制。 但是,如果需要,您可以阅读这些存储库管理服务,并且可以根据需要将这些知识应用于它们。
GitHub,Bitbucket,GitLab和Coding就是其中的一些例子,它们被全世界的开发人员广泛使用。 我和其他许多人都使用GitHub,因为它托管了大量的开源项目。 GitHub仓库在默认情况下是公开的,但是您可以按月创建私有仓库。
入门
创建一个应用程序
首先,您需要在Xcode中创建一个新的应用程序。 对于此应用程序,您可以使用所需的任何模板,如果当前应用程序具有Git存储库,则在本教程中也可以使用它。
这是在最终创建项目之前(需要确定存储项目的位置时)IDE的外观:
![图1创建一个应用程序](https://i-blog.csdnimg.cn/blog_migrate/b18c18fb33f6b418197a1976cf06b71b.png)
确保选中“ 在Mac上创建Git存储库”复选框,因为这将确保您的项目在内部具有存储库。 以后,如果您选择使用存储库管理系统,则可以推送所有这些代码,并且您所做的每一次提交都会显示出来。
打开终端
要进入命令行,您需要打开终端。 您可以通过以下两种方式之一来执行此操作。 您可以打开Launchpad ,然后在Launchpad第一页的Other文件夹中找到Terminal图标。 或者,您可以点击键盘上的Command-Space并在Spotlight中搜索Terminal 。
打开终端后,您应该会看到类似以下的内容。
![图2空白的终端窗口](https://i-blog.csdnimg.cn/blog_migrate/b868af9ea3682c1035c5b9a43715060e.png)
这称为“命令提示符”,您将看到当前目录,然后是用户名,后跟$
。
行! 现在,您准备学习如何在终端上使用版本控制。
终端命令备忘单
以下是我在有关Terminal入门的教程中编写的一些基本命令。 您需要了解这些内容才能有效使用终端。
救命
-
help
-顾名思义,您可以在终端中键入此命令以获取不同命令的列表。 -
man <command name>
-与上一个命令相似,此命令可准确告诉您命令的功能(并提供完整的文档),而无需您在Google上搜索。
文件管理
-
ls
-列出所有的当前目录的内容。 如果您不想使用Finder浏览文件,则此命令非常有用-您可以在终端中使用此命令简单列出它们。 -
cd <directory name>
-此命令用于更改目录。 如果仅编写cd
,则将移出当前目录。 使用ls
(查看目录)后,您可以输入要输入的目录的名称。
更改偏好
-
defaults <setting to change>
-此命令用于修改默认系统设置,其中某些不能不使用终端进行更改。 -
caffeinate
顾名思义,此命令用于防止Mac变暗,关闭或Hibernate。 要结束此操作,只需按Control-C即可 。
文字编辑
-
vim <file name>
-这是我的最爱之一。 您可以使用默认的TextEdit(或任何基于GUI的编辑器)来编辑文本文件,但是vim
是一个命令行文本编辑器-也就是说,它完全在终端中工作。
联网
-
ping <URL or IP Address>
-此命令允许您检查指定URL或IP地址的服务器响应时间。 这可能对每个开发人员都不有用,但是很高兴知道。
管理员
-
sudo <action to perform>
-一种覆盖用户权限并成为计算机超级用户的方法。 使用时将提示您输入管理员密码。
不同的Git命令
既然您已经看到了一些基本的终端命令,那么让我们了解一下Git可以执行的不同操作。 我不会全部介绍它们,但是我会教您有关日常开发中将使用的主要知识。 如果您需要更多信息,可以在终端中运行git help
以获得详细信息,如果还不够,请参阅man git
以获得完整的文档,以获取完整的文档。
帮助页面如下所示:
![图3帮助页面](https://i-blog.csdnimg.cn/blog_migrate/7272f1770a57c8c602d481b2cd3fd3eb.png)
创建一个项目
-
git clone {remote-repo-link}
-如果要从存储库管理服务克隆存储库,则可以将此命令与URL一起使用,以在计算机上获取本地副本。 -
git init
—如果要从现有文件夹创建新的存储库,则可以使用此命令。 它将当前文件夹初始化为一个新的仓库。 通常,您将在首次创建项目时执行此操作。
提交变更
-
git status
status-告诉您工作目录中的哪些文件已更改。 如果您更改了文件,则可能是时候提交了! -
git commit -am "{helpful commit message}"
-对项目进行了某些更改(例如,当您完成一个简单的功能或进行了错误修复后),您应该提交更改。 确保提供简洁明了的提交信息,因为这将帮助其他开发人员了解您所做的工作以及原因。 -
git add {filename}
或git add --all
—如果您将新文件添加到您的仓库中,则必须在提交之前将其添加到仓库中。 使用add
命令。
仓库分支
-
git branch {branch-name?}
-使用此命令,您可以列出当前分支或创建一个新分支。
-
git merge {branch-name}
-将当前分支与指示的分支合并。 这会将当前分支中的代码与命名分支合并。
-
git checkout {branch-name}
切换到指定的分支。 这将简单地将当前分支放在一边,并使另一个分支处于活动状态。
仓库管理系统
-
git push
push-更新存储库管理系统中的存储库。 完成更改并确保代码运行良好后,可以推送代码,以便其他成员可以看到并拉出代码。 -
git pull
更新您的存储库的本地工作副本,以反映已推送到存储库管理系统的最新更新。 如果您在团队中工作,最好在进行任何更改之前执行此操作。
这些是您将在版本控制中开始使用的一些主要命令,但是在结束本教程之前,让我们深入了解一下我们先前创建的Xcode项目中的一些命令。
在Xcode项目中使用Git的示例
现在,让我们看一些如何在本教程前面创建的Xcode项目中使用命令行Git的示例。 请注意,我们将使用上面的终端命令,因此请确保继续引用或记住它们。
导航到项目目录
在开始之前,您需要使用上面提到的命令导航到项目目录(提示:使用cd
和ls
命令)。 到达那里后,运行ls
并确保您具有以下内容:
![图4文件导航](https://i-blog.csdnimg.cn/blog_migrate/62e11af8198a1b4caccdb01f9d590b4d.png)
- 现在,您在项目目录中,并准备对项目进行任何操作。 只需遵循我们的提交和分支。
承诺
提交代码是您在编程中最常做的事情。 进行有效更改后,最佳做法是将其与详细评论一起提交。
做出改变
首先,请更改Xcode项目。 对于我来说,我将在我的viewDidLoad()
方法中添加以下伪代码行:
let foobar = "foo"
获取状态
完成添加(或减去)一行或两行代码后,您就可以检查项目的状态了。 为此,将以下命令(减去$
提示符)粘贴到“终端”窗口中:
$ git status
您会看到以下内容:
![图6修改后的文件](https://i-blog.csdnimg.cn/blog_migrate/18a8f810c2cb127606f83cc7dfb89e48.png)
您修改的文件以红色突出显示,表明您尚未提交更改。
将文件添加到暂存区
如果只想提交某些文件,则可以使用“暂存区”来进行提交,在该“暂存区”中仅提交那些文件。 要将所有修改后的文件添加到“临时区域”,您需要做的是运行以下代码行:
$ git add -A
您看到的-A
标志意味着将添加所有已修改的文件( -A
适用于所有文件,您还可以编写git add --all
)。
要查看您的文件已准备好提交,只需再次运行以下命令:
$ git status
您会看到以下内容:
![图7暂存区文件](https://cms-assets.tutsplus.com/uploads/users/1856/posts/30358/image/tutsplus_06.jpg)
看到? 相同的红色文件现在变成绿色,这表示您已经成功准备提交该文件。
提交代码
最后,要最终提交代码,只需在终端中运行以下命令,然后在引号之间添加一条消息即可。
$ git commit -m "My very first commit."
-m
标志告诉终端您要向文件中添加一条消息,因此务必清楚此消息。 这些消息对于跟踪项目更改至关重要。
现在,您已经进行了第一次提交! 您在使代码更轻松,更安全的正确道路上。
分行
作为开发人员,您要做的第二件事是创建,合并和使用分支来整理代码并隔离功能,然后再将其发布给客户。
创建一个新分支
默认情况下,您位于我们所谓的“主”分支中。 那是最终应该放到所有内容的主要分支。最佳实践(尤其是与团队合作)是在自己的分支中研究新的主要功能,这些新功能将在完成后合并回master。
要练习使用分支,让我们创建一个新分支。 为此,请运行以下命令:
$ git branch my-first-branch
您可以根据需要命名分支。
要查看新分支,可以键入:
$ git branch
运行该命令时,您将看到类似以下内容的内容:
![图8分支](https://i-blog.csdnimg.cn/blog_migrate/86feef5bf4a402da9057c5553377e1f7.png)
注意,您可以看到两个分支: master
和my-first-branch
(或您命名的分支)。 此外,您会看到master
分支旁边有一个星号,表明您当前在该分支中。
签出当前分支
如果需要切换到另一个现有分支,则需要checkout
该分支。 执行此操作时,您将离开当前分支,并且其所有代码将保持不变(以及本地更改),但是将使用您签出的分支中的代码填充您的工作目录。
使用以下命令尝试一下:
$ git checkout my-first-branch
您应该得到一个类似于以下内容的确认:
![图9交换分支](https://i-blog.csdnimg.cn/blog_migrate/42cc5dc5c25d3136567704cbf0786abe.png)
现在,您已切换到该分支,它应该是干净的。 要确认这一点,请运行git status
来检查是否存在任何已修改的文件。
合并分支
完成更改后,通常将分支合并到master分支。 我们尚未进行任何更改,因此在合并两个分支之前,现在就进行更改。
对Xcode项目进行另一个更改。 对于我来说,我将在我的viewDidLoad()
方法中添加以下伪代码行:
let gooey = "fooey"
您可以进行任何喜欢的更改。 只要确保您知道什么文件和进行了什么更改即可。
完成之后,再次运行以下代码行:
$ git status
现在,您应该看到文件名显示为红色,并且您需要先提交,然后再将此更改合并回您的主分支。 我相信您知道该怎么做,所以让我们跳到下一步。 仔细检查提交是否成功,并带有git status
。
到现在为止,您应该已经提交了代码,因此让我们准备好合并两个分支。 首先,运行以下命令:
$ git checkout master
此命令切换到master
分支以准备与我们创建的另一个分支合并。 最后,要合并,请运行以下命令:
$ git merge my-first-branch
您应该获得如下确认信息:
![图11与Master合并](https://i-blog.csdnimg.cn/blog_migrate/2f269d1695231e6952ef4a24f26c0792.png)
现在,您对Feature分支所做的更改已被合并回master。 如果自创建分支以来master分支已更改,则Git将尝试自动将您的Feature分支更改与master合并。 如果无法自动执行此操作,它将提示您手动解决任何冲突。
现在,您知道如何合并分支,创建分支以及仅使用终端在它们之间切换!
结论
如您所见,对您的项目进行版本控制并不是很困难,而且回报是值得的。 版本控制是核心开发的最佳实践,如果您想在专业环境中工作,则应该熟悉它。
翻译自: https://code.tutsplus.com/tutorials/git-version-control-on-the-command-line--cms-30358