Git:将本地分支复制到另一个本地目录

8

非常抱歉问这个愚蠢的问题。

我想将我的仓库(本地)复制到另一个本地目录中。如果我只是使用 CMD + cCMD + v 复制我的仓库,我实际上会复制我本地仓库的所有分支。如何只复制一个分支?

谢谢。


你真正想要复制什么?尝试将一个分支从一个存储库复制到另一个存储库是没有意义的。 - NiVeR
我在“桌面”上有一个仓库存储。 我想将其复制到另一个目录中,比如“我的文档”。@NiVeR - user3222184
如果您已经将代码库复制到一个新目录中,只需在该新目录中检出要使用的分支即可。当然,您正在尝试做的事情并不是 Git 的正常用途,所以请注意这不是最佳解决方案。 - Andrew Fan
你想要克隆整个代码库吗? - NiVeR
仅仅是整个代码库中的一个分支。 - user3222184
3个回答

24

当我们将代码库迁移到新服务器时,我也遇到了同样的问题。

我只需要从旧的代码库中执行以下操作:

git push <path_to_new_local_repo> <branch_name>

这很完美地解决了问题。


3
这个答案被低估了。 - Ellen Spertus
哇,它的运行完美。 - ibrust
1
非常方便,谢谢 :) 另外只有 git push <path_to_new_local_repo> 命令才会推送当前所在的分支。 - Ignacio Garcia
你能否从新的仓库中执行 git pull <path_to_old_local_repo> 的逆操作? - mars8
如果你遇到错误 error: 默认情况下,非裸仓库禁止更新当前分支 remote: ,请确保将新的本地仓库初始化为裸仓库 git init --bare - mars8

7
每个Git仓库都包含整个Git提交树,因此您无法通过复制和粘贴Git文件夹来获取仅带有单个分支的Git仓库。
但是`git worktree`是为这种情况设计的。
只需在原始Git仓库中键入此命令。
git worktree add -b <your-new-branch-name> <your-new-directory> <your-base-branch>

这个命令的意思是在路径your-new-directory下创建一个新的文件夹,然后基于your-base-branch分支创建一个名为your-new-branch-name的新分支。
例如,您可以输入以下内容来创建一个名为MyAnotherFolder的文件夹,并创建一个基于master分支的新分支temp/my-copy
git worktree add -b temp/my-copy ../MyAnotherFolder master

如果你想在将来删除该文件夹,可以输入以下命令以删除工作树引用。
git worktree prune

1
如果您不想让原目录中的分支与新目录中的分支不同,则可以省略 -b new-branch。不过这会导致一个副作用,即您需要先 cd 到新目录以检出该分支。 - Fuseteam

1
似乎您想要的是在第二个目录中创建一个新的仓库,其中只包含一个分支。虽然可以做到,但这有点不寻常,我想知道这是否真的是您尝试完成任务的最佳方式...
无论如何,在大多数情况下,如果您想要复制一个仓库,最好使用git clone而不是使用外部工具来复制文件。在这种情况下,您可以这样说
git clone --single-branch --branch <branch_name> file://localhost/path/to/existing/repo

这将初始化一个新的仓库,并获取命名为<branch_name>的分支所需的历史记录和对象。新的仓库将引用现有的本地仓库作为名为origin的远程仓库。如果需要,您可以通过进入新的仓库并输入cd来撤消此操作。
git remote remove origin

如果您的本地仓库有一个远程仓库,并且您希望新的仓库也使用该远程仓库作为其origin,那么从远程仓库克隆可能比从本地副本更容易。请注意保留HTML标记。

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