codecamp

GitHub 复刻仓库

复刻是仓库的副本。 通过复刻仓库,您可以自由地尝试更改而不会影响原始项目。

复刻最常见的用法是对其他人的项目提出更改或将其他人的项目用作自己创意的起点。

对其他人的项目提出更改

例如,可以使用复刻提出与修复 Bug 相关的更改。 无需为您发现的漏洞创建议题,您可以:

  • 复刻仓库
  • 进行修复
  • 向项目所有者提交拉取请求。

将其他人的项目用作自己创意的起点。

开源软件的理念是通过共享代码,可以开发出更好、更可靠的软件。 更多信息请参阅 Open Source Initiative(开源倡议)上的“关于开源倡议”。

从其他人的项目复刻创建公共仓库时,请确保包含许可文件以确定您希望与其他人共享项目。 更多信息请参阅 choosealicense 上的“选择开源许可”。

为深入了解开源,特别是如何创建和发展开源项目,我们制作了开源指南,它将推荐关于创建和维护开源项目仓库的最佳实践,帮助您培养一个健康发展的开源社区。 您还可以免费学习关于维护开源社区的 GitHub Learning Lab 课程。

:您可以使用 GitHub Desktop 复刻仓库。 更多信息请参阅“从 GitHub Desktop 克隆和复刻仓库”。

复刻示例仓库

复刻仓库是一个简单的两步过程。 我们创建了一个供您练习的仓库。

  1. 在 GitHub 上,导航到 octocat/Spoon-Knife 仓库。

  1. 在页面的右上角,单击 Fork(复刻)

复刻按钮

让复刻保持同步

您可能为了对上游或原始仓库提议更改而复刻项目。 在这种情况下,最好定期将您的复刻与上游仓库同步。 为此,您需要在命令行上使用 Git。 您可以使用刚才复刻的 octocat/Spoon-Knife 仓库练习设置上游仓库。

第 1 步:设置 Git

如果尚未设置 Git,您应该先设置它。 不要忘记从 Git 设置向 GitHub 验证

第 2 步:创建复刻的本地克隆

现在,您有了 Spoon-Knife 仓库的复刻,但您的计算机上还没有该仓库中的文件。 让我们在计算机上本地创建复刻的克隆。

1.在 GitHub 上,导航到 Spoon-Knife 仓库的复刻

2.在文件列表上方,单击icon Code.

3.要使用 HTTPS 克隆仓库,在“Clone with HTTPS(使用 HTTPS 克隆)”下单击 save 。要使用SSH密钥(包括组织的SSH证书颁发机构颁发的证书)克隆存储库,请单击“UseSSH”,然后单击 save .

The clipboard icon for copying the URL to clone a repository

4.打开 Terminal(终端)。

5.将当前的工作目录更改为您想要存储克隆目录的位置。

6.键入 git clone,然后粘贴先前复制的 URL。 它将如下所示,使用您的 GitHub 用户名替换 YOUR-USERNAME

   $ git clone https://github.com/YOUR-USERNAME/Spoon-Knife

7.按 Enter 键。 将创建您的本地克隆。

   $ git clone https://github.com/YOUR-USERNAME/Spoon-Knife
   > Cloning into `Spoon-Knife`...
   > remote: Counting objects: 10, done.
   > remote: Compressing objects: 100% (8/8), done.
   > remove: Total 10 (delta 1), reused 10 (delta 1)
   > Unpacking objects: 100% (10/10), done.

现在,您有了 Spoon-Knife 仓库复刻的本地副本。

第 3 步:配置 Git 以将您的复刻与原始 Spoon-Knife 仓库同步

为了对原始仓库提议更改而复刻项目时,您可以配置 Git 以将更改从原始或上游仓库拉取到复刻的本地克隆。

1.在 GitHub 上,导航到 octocat/Spoon-Knife 仓库。

2.Above the list of files, click icon Code.

3.要使用 HTTPS 克隆仓库,在“Clone with HTTPS(使用 HTTPS 克隆)”下单击 。 To clone the repository using an SSH key , including a certificate issued by your organization's SSH certificate authority, click Use SSH, then click .

The clipboard icon for copying the URL to clone a repository

4.打开 Terminal(终端)。

5.将目录更改为您在 第 2 步:创建复刻的本地克隆 中克隆复刻的位置。

  • 要转到主目录,请只键入 cd,不要键入其他文本。
  • 要列出当前目录中的文件和文件夹,请键入 ls
  • 要进入列出的某个目录,请键入 cd your_listed_directory
  • 要回到上一个目录,请键入 cd ..

6.键入 git remote -v,然后按 Enter 键。 您将看到当前为复刻配置的远程仓库。

   $ git remote -v
   > origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
   > origin  https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)

7.键入 git remote add upstream,然后粘贴您在第 2 步中复制的 URL 并按 Enter 键。 它将如下所示:

   $ git remote add upstream https://github.com/octocat/Spoon-Knife.git

8.要验证为复刻指定的新上游仓库,请再次键入 git remote -v。 您应该看到复刻的 URL 为 origin,原始仓库的 URL 为 upstream

   $ git remote -v
   > origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (fetch)
   > origin    https://github.com/YOUR_USERNAME/YOUR_FORK.git (push)
   > upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (fetch)
   > upstream  https://github.com/ORIGINAL_OWNER/ORIGINAL_REPOSITORY.git (push)

现在,您可以使用一些 Git 命令使您的复刻与上游仓库保持同步。 更多信息请参阅“同步复刻”。

后续步骤

您可以对复刻进行任何更改,包括:

  • 创建分支:分支允许您在不影响主项目的情况下构建新功能或测试创意。
  • 打开拉取请求:如果您希望回馈原始仓库,您可以通过提交拉取请求请求原作者将您的复刻拉取到他们的仓库。

另找一个仓库进行复刻

复刻仓库,开始参与项目。 您可以将任何公共仓库复刻到您的用户帐户或任何您拥有仓库创建权限的组织。 更多信息请参阅“组织的权限级别”。

您可以将您具有访问权限的任何私有仓库复刻到您的用户帐户,以及 GitHub Team 或 GitHub Enterprise 上您拥有仓库创建权限的任何组织。 无法将私有仓库复刻到使用 GitHub Free 的组织。 更多信息请参阅“GitHub 的产品”。

您可以浏览 Explore 以查找项目并开始参与开源仓库。 更多信息请参阅“寻找在 GitHub 上参与开源项目的方法”。

祝贺

您现在已经复刻了仓库、练习了克隆复刻并配置了上游仓库。 接下来您要做什么?

GitHub 创建仓库
GitHub 社交化
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

GitHub 身份验证

在 GitHub 上管理订阅和通知

在 GitHub 上管理活动的订阅

GitHub 组织和团队

GitHub 管理对组织仓库的 Git 访问

GitHub 计费和付款

GitHub 使用议题和拉取请求进行协作

GitHub 在具有代码质量功能的仓库上进行协作

管理在 GitHub 上的工作

GitHub 建立强大的社区

GitHub 管理仓库

GitHub 自定义 GitHub 工作流程

在 GitHub Marketplace 中购买并安装应用程序

通过 GitHub Jobs 寻找人才

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }