练习 - 将项目上传到 GitHub
可以使用 GitHub 导入工具、命令行或外部迁移工具将存储库导入 GitHub。
关于 GitHub 导入工具
如果您在 Subversion、Mercurial、Team Foundation Version Control (TFVC) 或其他 Git 仓库中有源代码,可使用 GitHub 导入工具将其移至 GitHub。 GitHub 导入工具是一种可快速将源代码仓库(包括提交和修订记录)导入 GitHub 的工具。
在导入期间,根据要从中导入的版本控制系统,可以执行以下一些任务。 使用远程存储库进行身份验证、更新提交作者归属、使用大型文件导入存储库,或者如果不想使用 Git 大型文件存储,请删除大型文件。
导入操作 | Subversion | Mercurial | TFVC | Git |
---|---|---|---|---|
向远程仓库进行身份验证 | X | X | X | X |
更新提交作者属性 | X | X | X | |
将大型文件移动到 Git 大型文件存储 | X | X | X | |
从仓库删除大文件 | X | X | X |
使用 GitHub 导入工具导入仓库
如果你在其他版本控制系统上托管了某个项目,可以使用 GitHub 导入工具将其自动导入到 GitHub。 GitHub 导入工具不适用于所有导入。 例如,如果现有代码托管在专用网络上,则我们的工具无法访问它。 在这些情况下,我们建议对 Git 存储库使用命令行导入,或者对从其他版本控制系统导入的项目使用源代码迁移工具。
如果要在导入期间将存储库中的提交与作者的 GitHub 用户帐户匹配。 首先,在开始导入之前,请确保存储库的每个参与者都有 GitHub 帐户。
存储库和单个文件受大小限制。 有关详细信息,请查看关于 GitHub 上的大型文件。
按照以下步骤导入存储库:
在任何页面的右上角,选择 +,然后选择“导入存储库”。
在 "Your old repository's clone URL"(旧存储库的克隆 URL)下,输入要导入的项目的 URL。
选择拥有存储库的用户帐户或组织,然后在 GitHub 上键入存储库的名称。
指定新存储库是“公共”还是“专用” 。 有关详细信息,请查看设置存储库可见性。
检查你输入的信息,然后选择“开始导入”。
如果旧项目受密码保护,请输入该项目的登录信息,然后选择“提交”。
如果有多个项目托管在旧项目的克隆 URL 上,请选择要导入的项目,然后选择“提交”。
如果项目包含超过 100 MB 的文件,请选择是否使用 Git 大型文件存储导入大型文件,然后选择“继续”。
完全导入存储库后,会收到一封电子邮件。
使用 GitHub 导入工具更新提交作者归属
导入期间,您可以将仓库中的提交匹配提交作者的 GitHub 帐户。 GitHub 导入工具查找其电子邮件地址匹配您所导入仓库中提交作者的 GitHub 用户。 然后,您可以使用其电子邮件地址或作者的 GitHub 用户名将提交连接到其作者。
更新提交作者
按照以下步骤更新提交作者:
导入存储库后,在导入状态页面上,选择“匹配作者”。
在要更新其信息的作者旁边,选择“连接”。
键入作者的电子邮件地址或 GitHub 用户名,然后按“Enter”。
将提交归于具有公共电子邮件地址的 GitHub 用户
如果导入存储库中的提交作者具有与用于创作提交的电子邮件地址关联的 GitHub 帐户,并且不会 将其提交电子邮件地址设置为专用。 然后,GitHub 导入工具将电子邮件地址(与提交到关联的公共电子邮件地址关联)与其 GitHub 帐户匹配,并将提交归因于其 GitHub 帐户。
将提交归于没有公共电子邮件地址的 GitHub 用户
如果导入存储库中的提交作者未在其 GitHub 配置文件上设置公共电子邮件地址,或者将其提交电子邮件地址设置为专用。 然后,GitHub 导入工具可能无法将与提交关联的电子邮件地址与其 GitHub 帐户匹配。
提交作者可以将其电子邮件地址设置为专用地址以解决此问题。 然后,其提交归因于<username>@users.noreply.github.com
,导入的提交与其 GitHub 帐户相关联。
使用电子邮件地址归属提交
如果作者的电子邮件地址与其 GitHub 帐户不关联,他们可以在导入后将地址添加到帐户,届时,提交将正确属性化。
如果作者没有 GitHub 帐户,GitHub 导入工具 会将其提交归因于与提交关联的电子邮件地址。
使用命令行导入 GitHub 存储库
如果GitHub 导入工具不符合用途(例如,如果现有代码托管在专用网络上),建议使用命令行导入。
在开始之前,请确保您知道:
- GitHub 用户名
- 外部存储库的克隆 URL,例如
https://external-host.com/user/repo.git
或git://external-host.com/user/repo.git
(可能external-host.com
域名前面是user@
)
为了进行演示,我们使用:
- 名为ext-user的外部帐户
- 外部 Git 主机
https://external-host.com
- 名为 ghuser 的 GitHub 个人用户帐户
- GitHub.com 上名为 repo.git 的存储库
按照以下步骤导入外部存储库:
在 GitHub 上创建一个新存储库。 将外部 Git 存储库导入到此新存储库。
在命令行上,使用外部克隆 URL 创建仓库的“裸”克隆。 此命令会创建数据的完整副本,但不创建用于编辑文件的工作目录,并确保所有旧数据的全新导出。
$ git clone --bare https://external-host.com/ext-user/repo.git #Makes a bare clone of the external repository in a local directory
使用“镜像”选项将本地克隆的存储库推送到 GitHub,这可确保将所有引用(例如分支和标签)复制到导入的存储库。
$ cd repo.git $ git push --mirror https://github.com/ghuser/repo.git #Pushes the mirror to the new repository on GitHub.com
删除临时本地仓库。
$ cd .. $ rm -rf repo.git
将本地托管代码添加到 GitHub
如果计算机或专用网络上已有本地存储的源代码或存储库,可以通过在终端中键入命令来将其添加到 GitHub 中。 直接键入 Git 命令或使用 GitHub CLI。
GitHub CLI 是一种用于从计算机的命令行使用 GitHub 的开放源代码工具。 GitHub CLI 可以简化使用命令行向 GitHub 添加现有项目的过程。 若要详细了解 GitHub CLI,请查看关于 GitHub CLI。
使用 GitHub CLI 将本地存储库添加到 GitHub
按照以下步骤使用 GitHub CLI 添加本地存储库:
在命令行中,导航到项目的根目录。
将本地目录初始化为 Git 仓库。
git init -b main
暂存并提交项目中的所有文件。
git add . && git commit -m "initial commit"
若要在 GitHub 上为项目创建存储库,请使用
gh repo create subcommand
。 出现提示时,选择“将现有本地存储库推送到 GitHub”,并输入存储库所需的名称。 如果希望项目属于某个组织而不是你的用户帐户,请使用organization-name/project-name
指定组织名称和项目名称。按照交互式提示进行操作。 要添加远程并推送存储库,请在被要求添加远程并将提交推送到当前分支时确认“是”。
或者,若要跳过提示,请使用
--source
标志提供存储库的路径,并传递可见性标志(--public
、--private
或--internal
)。 例如gh repo create --source=. --public
。 使用--remote
标志指定远程。 要推送提交,请传递--push
标志。 有关可能参数的详细信息,请参阅 GitHub CLI 手册。
使用 Git 将本地存储库添加到 GitHub
按照以下步骤使用 Git 添加本地存储库:
在 GitHub.com 上新建存储库。 为避免错误,请勿使用 README、许可证或
gitignore files
将新存储库初始化。 可以在将项目推送到 GitHub 后添加这些文件。打开 Git Bash。
将当前工作目录更改为您的本地仓库。
将本地目录初始化为 Git 仓库。
$ git init -b main
在新的本地仓库中添加文件。 此命令还会将它们暂存以进行第一次提交。
$ git add . # Adds the files in the local repository and stages them for commit. To unstage a file, use 'git reset HEAD YOUR-FILE'.
提交在本地存储库中暂存的文件。
$ git commit -m "First commit" # Commits the tracked changes and prepares them to be pushed to a remote repository. To remove this commit and modify the file, use 'git reset --soft HEAD~1' and commit and add the file again.
在 GitHub.com 快速设置页面上的存储库顶部,选择“复制”按钮以复制远程存储库 URL。
在命令提示符下,添加远程存储库的 URL。 本地存储库被推送到此位置。
$ git remote add origin <REMOTE_URL> # Sets the new remote $ git remote -v # Verifies the new remote URL
将本地存储库中的更改推送到 GitHub.com。
$ git push origin main # Pushes the changes in your local repository up to the remote repository you specified as the origin
源代码迁移工具
您可以使用外部工具将项目移动到 GitHub。 我们建议使用 GitHub 导入工具从 Subversion、Mercurial、Team Foundation Version Control (TFVC) 或其他 Git 存储库导入项目。 您还可以使用这些外部工具将项目转换为 Git。
从 Subversion 导入
在典型 Subversion 环境中,多个项目存储在一个根仓库中。 在 GitHub 上,这些项目中的每一个通常都会映射到用户帐户或组织的单独 Git 存储库。 以下情况时,我们建议将 Subversion 仓库的每一部分导入到单独的 GitHub 仓库:
- 协作者需要检出或提交到独立于项目其他部分的部分
- 您想要不同的部分有其自己的访问权限
我们建议使用以下工具将 Subversion 仓库转换为 Git:
从 Mercurial 导入
建议使用 hg-fast-export 将 Mercurial 存储库转换为 Git。
从 TFVC 导入
建议使用 git-tfs 在 TFVC 和 Git 之间移动更改。
有关从 TFVC(集中式版本控制系统)迁移到 Git 的详细信息,请参阅从集中式版本控制迁移到 Git。