gpt4 book ai didi

git - 这些将现有 Git 存储库导入 GitHub 的方法有何不同?

转载 作者:太空狗 更新时间:2023-10-29 13:15:19 25 4
gpt4 key购买 nike

我的服务器上有一个本地 Git 存储库,我想将其导入 GitHub。我四处寻找如何执行此操作,并遇到了两种不同的方法,这两种方法均由 GitHub 提供。

根据 GitHub 帮助页面 Importing an external Git repository ,将现有 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 存储库添加远程。

我尝试了两种方法来测试它们,它们都有效。这两个存储库看起来完全一样。这两种方法有什么区别?如果这两种方法具有相同的效果,为什么 GitHub 帮助页面添加了创建存储库的裸克隆和使用镜像选项的额外步骤?

最佳答案

大概的区别在于,如果您刚刚创建了一个新的存储库,您没有任何现有数据(引用、标签等)与其相关联,因此只需推送(相对)空 repo 到 GitHub 像这样:

git push -u origin master

但是,如果您要导入已经存在一段时间的现有存储库,您可能希望推送它拥有的任何现有数据(标签等),如果没有 --tags--mirror 选项,默认情况下 git push 不会执行此操作。

推 --mirror

来自Pro Git book Chapter 2.6 Git Basics - Tagging § Sharing Tags (强调我的):

By default, the git push command doesn’t transfer tags to remote servers. You will have to explicitly push tags to a shared server after you have created them...If you have a lot of tags that you want to push up at once, you can...use the --tags option to the git push command. This will transfer all of your tags to the remote server that are not already there.

GitHub 帮助页面 Importing an external Git repository您自己引用的内容解释了 --mirror 选项的目的,就像这样(强调我的):

Push the local cloned repository to GitHub using the "mirror" option, which ensures that all references (i.e. branches, tags, etc.) are copied to the imported repository.

您还可以在 git-push(1) 阅读有关 --tags--mirror 选项的更多信息.

clone --bare

至于 clone --bare 选项的目的,它可能再次与以下事实有关:您可能正在导入一个已经存在了一段时间并且已经存在的较旧的现有存储库与新的 repo 协议(protocol)相比,其中有数据。 Importing an external Git repository解释如下:

Make a "bare" clone of the repository (i.e. a full copy of the data, but without a working directory for editing files) using the external clone URL. This ensures a clean, fresh export of all the old data.

这是来自git-clone(1)git clone --bare的解释:

...the branch heads at the remote are copied directly to corresponding local branch heads, without mapping them to refs/remotes/origin/. When this option is used, neither remote-tracking branches nor the related configuration variables are created.

关于git - 这些将现有 Git 存储库导入 GitHub 的方法有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17517864/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com