将现有的 Git 存储库导入 GitHub 的这些方法有何区别?

6
我在我的服务器上有一个本地Git仓库,我想将其导入GitHub。我查找了如何做到这一点,并找到了两种不同的方法,都是由GitHub提供的。
根据GitHub帮助页面 导入外部Git仓库,将现有的Git仓库导入GitHub的方法是创建原始仓库的临时裸克隆,然后使用“镜像”选项将其推送到GitHub。该页面提供以下命令序列:
git clone --bare https://githost.org/extuser/repo.git

cd repo.git
git push --mirror https://github.com/ghuser/repo.git

cd ..
rm -rf repo.git

然而,每当您在GitHub上创建一个新仓库时,空的仓库页面会提供一组不同的指令来导入现有的仓库。它建议简单地将原始仓库推送到GitHub。该页面提供以下命令序列。
git remote add origin git@github.com:ghuser/repo.git
git push -u origin master

在这两种情况下,在执行给定的命令之前,空的repo ghuser/repo 应该已经存在于GitHub上。我看到这两种方法之间唯一的区别是第一种方法没有为GitHub repo添加远程。我尝试了这两种方法来测试它们,它们都有效。这两个存储库看起来完全相同。这两种方法有什么区别?如果这两种方法具有相同的效果,那么为什么GitHub帮助页面会增加创建裸克隆和使用镜像选项的额外步骤呢?
1个回答

2
大概意思是,如果你刚创建了一个新的仓库,它没有任何与之相关联的现有数据(引用、标签等),因此只需将(相对)空的仓库推送到 GitHub 就可以了。
git push -u origin master

然而,如果您导入的是一个已经存在一段时间的现有存储库,您可能希望推送其具有的任何现有数据(标签等),这需要使用--tags--mirror选项,否则git push默认不会执行此操作。 push --mirror 引用自Pro Git book Chapter 2.6 Git Basics - Tagging § Sharing Tags(强调我的部分):
默认情况下,git push命令不会将标签传输到远程服务器。您必须在创建标签后明确地将它们推送到共享服务器...如果您有很多要一次性推送的标签,可以使用--tags选项来执行git push命令。这将传输所有未在远程服务器上的标签。
您好,这段文本的翻译如下:
GitHub帮助页面导入外部Git存储库解释了您自己引用的--mirror选项的目的,如下所示(重点是我的):

使用“镜像”选项将本地克隆的存储库推送到GitHub,确保所有引用(即分支、标签等)都被复制到导入的存储库中

您还可以在git-push(1)中了解更多关于--tags--mirror选项的信息。 clone --bare选项的目的可能与您导入的旧存储库已经存在一段时间并且已经有数据的事实有关,而不是新存储库。导入外部Git存储库解释了它的作用。
将外部克隆URL用于“裸”克隆存储库(即完全复制数据,但没有用于编辑文件的工作目录)。这确保了所有旧数据的干净,新鲜的导出。这是从git-clone(1)中解释git clone --bare的内容:
“...在远程的分支头直接复制到相应的本地分支头,而不将它们映射到refs/remotes/origin/。使用此选项时,既不创建远程跟踪分支,也不创建相关的配置变量。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接