Git 和 GitHub:完整指南 - 第 7 章:Forking 和 Cloning

今天我们将复制我们GitHub账户上“其他人”的仓库,并学习如何将其克隆到本地计算机。我们将学习GitHub中的fork和clone操作。
这两个选项使我们能够访问 GitHub 上提供的任何开源代码库,使我们能够对其进行开发、进行一些更改、更新文件,并将这些更新贡献给项目的原始维护者/所有者。
本文将涵盖以下内容:
- 分叉
- 克隆
- 为原项目做出贡献
分叉
要跟随教程操作,您需要在 GitHub 上创建第二个帐户。
注册新账号后,我们需要搜索之前一直在进行的项目,也就是我们的第一个账号。
一般来说,我们可以搜索和使用 GitHub 上任何可用的开源代码库。
我们需要查找之前帐户的用户名,因为如果我们只搜索项目名称(在本例中为)gitProject,我们会得到大量的结果。
要查找上一个项目的用户名,我们输入:
iFieryGodME
我的用户名是iFieryGodME,但你的用户名会不一样!
搜索完成后,我们会看到一个列表。列表底部有一个名为“用户名”的标签Users,点击该标签即可看到我们之前账户的用户名。
点击帐户后,我们将进入帐户概览页面,在那里我们将看到我们正在处理的存储库以及我们帐户的一些其他特定内容。
我们点击仓库,在右上角应该会看到一个写着“fork”的按钮fork。点击这个fork按钮就可以开始fork过程了。
该过程需要几秒钟才能完成,完成后,我们将看到整个存储库已复制到我们的新帐户。🍴
现在我们拥有了与原始仓库完全相同的副本,所有源文件以及迄今为止的所有提交记录都在这里。GitHub 的 fork 功能允许我们将原始仓库复制到我们的帐户中。
如果我们回到原始仓库,在右上角,fork按钮后面会显示fork的数量。点击这个数字,就能看到原始仓库的所有者和fork该仓库的用户用户名。
克隆
首先,让我们打开 VS-CODE 的终端,在桌面目录下创建一个新文件夹,开始克隆。
由于我们当前位于项目目录中,我们需要运行以下命令返回上一级目录:
cd ..
然后我们需要创建文件夹,并git-project-clone通过运行以下命令来调用它:
mkdir git-project-clone
文件夹创建完成后,我们可以通过运行以下命令进入该文件夹:
cd git-project-clone
太棒了,我们今天就到这里啦!💪
现在我们需要回到 GitHub 帐户,打开我们的原始项目,然后点击写着“复制”的绿色按钮Code,会出现一个下拉菜单,我们会看到一个链接,点击链接copy icon右侧的“复制”按钮即可复制该链接。
复制链接后,返回终端并运行以下命令:
git clone
此命令后跟我们从 GitHub 复制的链接。例如:
git clone https://github.com/iFieryGodME/gitProject.git
您的链接将与我的不同,因为它的帐户名或用户名不同。
干得漂亮!我们刚刚把远程仓库克隆到了我们创建的本地文件夹里。👥
我们可以通过运行以下命令来验证这一点:
ls
此命令将显示我们目录中的文件和文件夹。
我们会看到一个以原始项目名称命名的文件夹,进入该文件夹并查看其内容,就能看到所有源文件。此外,运行历史记录也能看到我们在原始仓库中执行的所有提交。
为原项目做出贡献
让我们来探讨一下如何为开源仓库做贡献。如今,GitHub 上有海量的开源项目,许多不同的开发者都在参与其中。他们复制这些仓库,进行更新,然后向项目所有者提交 pull request。
另一方面,所有者会收到贡献者的拉取请求,他们会考虑这些更改,如果他们满意,就会将更新合并到原始存储库中。
这个过程称为贡献,这也是目前各种库和框架更新的方式。
我们将模拟捐款的场景。
git-project-clone我们从克隆原始仓库的目录开始。
现在我们可以通过修改 index.html 文件和 style.css 文件来更新这个存储库。
修改完成后,我们会像往常一样保存并将其提交到历史记录中。
我们现在应该很熟悉这个过程了,因为我们在之前的章节中已经多次进行过这个过程。
将文件提交到历史记录后,我们需要将更改推送到主分支,也就是我们创建的新 GitHub 帐户。
您在尝试将更改推送到新帐户时可能会遇到问题,请记住我们之前已设置了 Git 和 GitHub 凭据。我们需要获得权限才能将更改推送到我们的新帐户。
根据您使用的是 Windows 系统还是 Mac 系统,有很多方法可以实现这种功能。
在 Mac 上,在终端中运行以下命令来移除当前源的远程连接:
git remote rm origin
接下来,您需要添加一个新的源。运行此命令需要 SSH 密钥。如果您没有 SSH 密钥,或者不确定是否已生成,可以在终端中运行以下命令进行查找:
ls -al ~/.ssh
如果收到“”之类的回复no such file exists,则需要生成 SSH 密钥。为此,您需要运行以下命令,并将邮件地址替换为您自己的邮箱地址:
ssh-keygen -t ed25519 -C "your_email@example.com"
您将收到以下消息:> Generating public/private ed25519 key pair.
接下来,系统会提示您“输入要保存密钥的文件”,只需按回车键即可。然后在提示符处,输入一个安全的密码短语并再次确认。
太棒了👌
现在你需要将你的公钥复制到剪贴板,你可以通过运行该命令来完成此操作。
pbcopy < ~/.ssh/id_ed25519.pub
如果您的id_ed25519不同,则需要指定该 id,您可以通过运行cd ~/.ssh来找到该 id,然后使用ls显示文件夹的内容。
现在登录你的 GitHub 账号,进入设置菜单,在下拉菜单中点击“密钥” SSH and GPG Keys。给你的密钥起个标题,然后在密钥字段中粘贴你的公钥,然后点击“添加密钥”add ssh key按钮。
系统将提示您确认您的GitHub帐户密码。
完成后,返回GitHub上的项目,点击绿色按钮Code。选择SSH选项,现在你会看到一个可用的SSH密钥,点击最右侧即可将SSH密钥复制到剪贴板。
现在回到终端,运行以下命令:
git remote add origin
此命令后需输入您的 SSH 密钥,运行此命令后,您就可以将更改推送到新的 GitHub 帐户。
如果仍然遇到问题,可以前往 GitHub 官方文档查看说明。GitHub文档
如果您使用的是 Windows 系统,可以通过点击
manage windows credentials“凭据管理器”并找到 GitHub 链接来更改您的 GitHub 登录信息。如有任何问题,请随时提问。
回到贡献环节……当我们回到新的 GitHub 帐户时,应该就能看到我们刚刚从本地仓库提交的代码了。
要将这些更改发送给原所有者,我们需要创建一个新的拉取请求。
正如你所见,当我们创建一个新的拉取请求时,GitHub 会将原所有者 origin/master 与我们新账户的 origin/master 进行比较。在本例中,我们没有合并冲突。
接下来我们需要添加描述。在实际应用中,你需要向所有者清晰详尽地解释你在描述中所做的更改。然后我们点击标有“.”的绿色按钮create pull request。
接下来,GitHub 会检查我们是否可以与仓库所有者的仓库合并。请注意,我们无法自行执行合并操作,因为是否接受合并取决于仓库所有者的决定。
现在我们去查看原项目所有者的 GitHub 账号。你会注意到所有者的仓库里有一个pull request。我们可以点击它。
这里您将看到来自第二个帐户的拉取请求及其提交记录和更改。我们可以查看其他用户所做的提交以及对项目所做的更改。绿色背景表示新增的更改。
如果我们对修改满意,就可以合并分支。我们还可以给贡献者留言。
点击merge pull request绿色按钮后,分支将会合并,更改将反映在所有者的仓库中。
这就是我们在 GitHub 上为开源项目做贡献的方式。
让我们考虑一下如果遇到合并冲突会发生什么情况。
通常情况下,当双方试图编辑同一文件的同一行时,就会发生合并冲突。我们可以模拟这样一个场景:作为贡献者,我们尝试修改 style.css 文件,但在我们创建拉取请求之前,文件所有者正在编辑同一文件的同一行。
当我们提交更改并创建拉取请求时,会发现存在合并冲突,但您仍然可以创建拉取请求。
在这里,我们可以选择自己解决冲突,或者我们可以让所有者解决冲突,因为与仓库存在冲突,拉取请求已经发送给所有者了。
当你访问所有者账户时,你会看到一个拉取请求,该请求存在冲突。作为所有者,我们可以通过决定保留哪些代码来解决此问题。
确认无误后,我们可以点击marked as resolve,然后点击commit merge,你会看到 GitHub 警告我们此操作将提交到 master 分支。我们确认理解。
最后,我们将拉取请求合并到主分支。查看提交历史记录,我们可以看到两个账户的所有提交以及合并提交。
关于如何为原始开源仓库做贡献,以上就是全部内容,希望对您有所帮助。接下来,让我们进入下一章,也是最后一章……
文章来源:https://dev.to/ifierygod/git-and-github-the-complete-guides-chapter-7-forking-and-cloning-25gl














