2.克隆一个Repo
¶
上一章给你上了一堂Git
的基础速成课,让你开始使用Git
的基本机制:克隆一个repo
,创建分支,切换到分支,提交你的修改,把这些修改推送回远程,在GitHub
上打开一个拉取请求,让你的修改被审核。
这说明了Git
的方面,但是,如果你用Git
工作过一段时间(或者根本没有用过Git
),你会知道方面是不够的。了解Git
的"为什么"是很重要的,这样不仅可以更好地理解引擎盖下发生的事情,还可以了解当你的仓库进入一个奇怪的状态时,如何解决这些问题。
所以,首先,你将从Git
最基本的方面开始:通过cloning
将仓库复制到你的本地系统。
什么是克隆?¶
克隆就是它听起来的样子:创建一个仓库的副本,或者说克隆。Git
仓库没有什么特别之处;它只是一个包含代码、文本或其他资产的目录,可以追踪自己的历史。然后在这个目录前面有一个安全的文件传输魔法,让你同步更改。就是这样。
Git
仓库通过一个隐藏的.git
目录来追踪仓库内所有变化的历史,你通常不必去管它--它只是静静地追踪仓库内发生的一切。在本书的后面,你会了解更多关于隐藏的.git
目录的结构和功能。
因此,由于Git
仓库只是一个特殊的目录,理论上,你可以通过压缩朋友或同事工作站上的仓库中的所有文件,然后用电子邮件发送给自己,来实现一个相当便宜和肮脏的克隆操作。当你解压缩文件的内容时,你的电脑上就会有一个版本库的精确拷贝。
然而,用电子邮件发送东西可能(而且确实)会变得很混乱。相反,许多组织利用在线资源库主机,如GitHub
、GitLab
、BitBucket
或其他。有些组织甚至选择自我托管仓库,但这已经超出了本书的范围。现在,你将坚持使用在线主机--在这个例子中是GitHub
。
使用GitHub
¶
GitHub
,从最基本的层面来看,其实只是一个大型的云端仓库解决方案,其中夹杂着账户和访问管理以及一些协作工具。但你不需要了解GitHub
的所有功能,就可以开始使用托管在GitHub
上的仓库,正如前一章的Git
速成课程所展示的。
从在线仓库克隆是一个相当简单的操作。要开始使用,你只需具备以下条件:
- 在你的本地系统上安装一个可以工作的
Git
。 - 你想克隆的仓库的远程
URL
。 - 在线主机的任何凭证。
Note
一般来说,不使用证书也可以克隆存储库,但你将无法将你在本地副本上所做的修改传播到在线主机上。
GitHub
仓库的主页¶
在GitHub
上已经建立了一个供你克隆的仓库,所以你首先需要获得该仓库的远程URL
。
要开始,请浏览https://github.com/raywenderlich/ideas
,用你的GitHub
用户名和密码登录。如果你还没有建立一个账户,现在就可以了。
一旦你到了版本库的主页,看看页面上列出的文件和目录列表。这些列表和目录代表版本库的内容,它们是你要克隆到本地系统的文件。
但你从哪里找到仓库的远程URL
来克隆它呢?就像Git
中的许多事情一样(以及一般的计算机),克隆一个仓库有多种方法。在本章中,你将使用最简单和最常见的克隆方法,它从GitHub
仓库主页开始。
找到仓库的克隆URL
¶
在仓库主页上寻找并点击 Code
按钮。
弹出的小对话框给了你几个选项,让你把版本库克隆到你的本地系统:
- 这是版本库的主
HTTPS URL
。这是你在本章中使用的URL,用于从命令行git
客户端克隆。 - 你也可以使用
SSH
来克隆版本库。点击这个链接可以让你在使用SSH
和HTTPS
之间进行切换,以使用版本库。 - 如果你安装了
GitHub
桌面应用程序,你可以使用Open in Desktop
按钮来启动GitHub
桌面并一步到位地克隆该仓库。 - 如果你只想得到一份仓库中的压缩拷贝(但不是仓库本身的全部内容),
Download ZIP
按钮会让你做到这一点。
现在,通过URL
右边的小剪贴板图标按钮,复制你在对话框中看到的HTTPS URL
。这将在你的剪贴板上复制HTTPS URL
,这样你就可以在以后的命令行中粘贴它。
在命令行上克隆¶
现在,转到你的命令提示符。切换到一个合适的目录,你想把你的仓库放在那里。在本例中,我将在我的主目录下创建一个名为GitApprentice
的目录,我想把本书的所有版本存放在这里。
执行下面的命令来创建这个新目录:
mkdir GitApprentice
现在,执行下面的命令,看看目录中的文件清单(你的文件将与下面显示的不同)。
ls
我看到我的系统上有以下目录,还有我的新GitApprentice
目录:
~ $ ls
Applications Downloads Music
Dropbox Pictures Library
Public Desktop GitApprentice
Documents Movies
执行下面的命令,导航到新的目录:
cd GitApprentice
现在你已经准备好使用命令行来克隆版本库了。
输入以下命令,但先不要按Enter
键或Return
键:
git clone
现在,按Space bar
添加一个空格字符,并粘贴你先前复制的URL
,所以你的命令看起来如下:
git clone https://github.com/raywenderlich/ideas.git
现在,你可以按Enter
或Return
来执行命令。
你会看到下面关于Git
正在做什么的简短总结:
~/GitApprentice $ git clone https://github.com/raywenderlich/ideas.git
Cloning into 'ideas'...
remote: Enumerating objects: 52, done.
remote: Counting objects: 100% (3/3), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 52 (delta 0), reused 2 (delta 0), pack-reused 49
Receiving objects: 100% (52/52), 6.26 KiB | 173.00 KiB/s, done.
Resolving deltas: 100% (22/22), done.
执行ls
命令,查看你的GitApprentice
目录的新内容:
~/GitApprentice $ ls
ideas
使用cd
命令,然后是ls
命令,导航到新的ideas
目录,看看里面有什么:
~/GitApprentice $ cd ideas
~/GitApprentice/ideas $ ls
LICENSE README.md articles books videos
这就是存储库的内容。好吧,至少是可见的内容。再次运行ls
命令,使用a
选项,显示前面讨论的隐藏的.git
目录:
~/GitApprentice/ideas $ ls -a
. .git README.md books
.. LICENSE articles videos
啊哈--这就是那个神奇的.git
隐藏目录。来看看里面有什么吧。
探索.git
目录¶
使用cd
命令导航到.git
目录:
cd .git
再次执行ls
命令,看看这个目录里有什么黑魔法。这一次,使用-F
选项,这样你就可以知道哪些实体是文件,哪些是目录:
ls -F
你会看到以下内容:
~/GitApprentice/ideas/.git $ ls -F
HEAD config hooks/ info/ objects/ refs/
branches/ description index logs/ packed-refs
所以我承认,这并不是什么黑暗艺术。但这里的是一些重要的文件和目录,它们跟踪和控制着你本地Git
仓库的各个方面。在这一点上,大部分内容可能对你来说没有什么意义,这很好。随着本书的深入,你会了解到这些东西的作用。
不过现在,让一切保持原样;很少有理由在版本库的这一层工作。几乎所有你做的事情都应该发生在你的工作目录中,而不是在.git
子文件夹中。
所以,用cd
命令回溯到你的版本库的工作目录一级:
cd ..
你现在回到了相对安全的版本库的顶层。现在,只要知道.git
目录在哪里就够了,而且你现在真的没有理由去处理那里的任何东西。
分叉¶
你成功地克隆了ideas
仓库,但是尽管ideas
是一个公共仓库,ideas
仓库目前属于raywenderlich
组织。由于你不是raywenderlich
组织的成员,ideas
仓库的访问控制设置意味着你无法将任何本地修改推送回服务器。遗憾的是。
但对于大多数公共资源库,如ideas
,你可以在服务器上的个人用户空间创建一个资源库的远程拷贝。你或你授权的任何人都可以在本地克隆该副本,进行修改并将这些修改推送到服务器上的远程副本。创建一个版本库的远程克隆被称为forking
。
首先,你需要把你的机器从现有的本地克隆的ideas
版本库中删除。在目前的状态下,它对你来说没有什么用处,所以把它处理掉就可以了。
首先,从你的工作目录往上走一级,执行下面的命令:
cd ..
你应该回到主GitApprentice
目录:
~/GitApprentice $
现在,用rm
命令摆脱本地克隆,并使用-rf
选项来递归删除所有子目录和文件,并强制删除所有文件:
rm -rf ideas
执行ls
以确定该目录已经消失:
~/GitApprentice $ ls
~/GitApprentice $
看起来不错。你已经准备好创建raywenderlich ideas
仓库的分叉了......这让你看到了本章的挑战!
挑战¶
挑战:在GitHub
上分叉并创建本地克隆¶
这个挑战的目标有两个:
- 在你自己的用户账户下,在GitHub上创建一个
ideas
仓库的分叉。 - 将分叉的仓库克隆到你的本地系统。
导航到https://github.com/raywenderlich/ideas ideas
仓库的主页。在页面的右上角,你会看到Fork
按钮。这是你的起点。
这一挑战的步骤是:
- 在你的个人用户账户下分叉
ideas
资源库。 - 找到你新分叉的版本库的克隆
URL
。 - 克隆分叉的
ideas
版本库到你的本地系统。 - 验证本地克隆是否成功创建。
- 奖励:证明你克隆的是分叉的版本库,而不是原始版本库。
如果你被卡住了,你可以在本书下载的资料中的本章projects/challenge
文件夹下找到这个挑战的解决方案。
关键点¶
Cloning
创建一个远程Git
仓库的本地副本。- 使用
git clone
和远程仓库的克隆URL
来创建一个仓库的本地拷贝。 - 克隆一个仓库会自动创建一个隐藏的
.git
目录,追踪本地仓库的活动。 Forking
在你的个人用户空间下创建一个版本库的远程拷贝。
接下来去哪里?¶
一旦你成功地完成了本章的挑战,就可以进入下一章,在那里你将学习到status
、diff
、add
和commit
命令。你还会学到一些关于Git
是如何跟踪你在本地仓库所做的修改的。