31

我正在从一台将要被擦除的计算机上克隆一个 git 存储库。

是否可以在不创建原始存储库的情况下克隆存储库origin/master?还是我需要克隆它,然后删除远程分支(用 完成git remote rm origin)?

编辑:存储库只有一个分支,没有标签。

4

5 回答 5

28

不必将原始存储库设为“源”远程以克隆主分支。

在新机器上,创建一个新的存储库:

git init foo

然后将旧存储库拉入新存储库,而不创建远程:

cd foo
git pull <reference to old repository>

但是,应该注意的是,保存存储库的最简单方法是将存储库的目录压缩并将文件移动到新机器。这将保留所有遥控器、标签等。

如下所述,在复制存储库时,从区分大小写的文件系统(例如 Linux、Mac、NTFS)到不区分大小写的文件系统(例如 Fat32)时要小心。

于 2010-02-12T04:31:59.993 回答
10

首先,您可以使用--origin <name>选项git clone

--origin <名称> , -o <名称>

不要使用远程名称origin来跟踪上游存储库,而是使用<name>

其次,您可以使用git remote add添加存储库以从现有存储库中获取(因此您可以使用git init, then git remote add <name> <url>)。


如果要创建存储库的镜像,refs/heads/*进入refs/heads/*克隆,您可以init存储库,设置适当的 refspec,然后fetch...

或者您可以使用git clone --mirror,它应该回答当前版本的 OP 问题。

但是,这不会保留配置(包括远程)、工作树状态、引用日志等。为此,您需要复制整个存储库,正如Jess Bowers 所说

于 2010-02-12T13:07:13.197 回答
4

处理此类转移的一般方法是git bundle. 请参阅github repo 的备份

从您的第二个(新)桌面:

git bundle create file:///\\oldDesktop/share/myGitRepo --all

创建一个本地文件,您可以从中克隆本地 git 存储库。

注意:file:///协议将支持 UNC(通用命名约定)Windows 路径,路径的其余部分使用 ' /' 而不是 ' \'。请参阅Windows 局域网上的 Git

于 2010-02-12T08:02:18.460 回答
2

我相信你需要删除远程分支。

于 2010-02-12T01:12:13.250 回答
2

远程仓库是否有比 master 更多的分支?如果确实如此,那就更棘手了;您还需要制作所有分支的本地副本,因为当您删除远程时,所有远程/原始分支都会消失。(我刚试过!)

因此,您可以执行以下操作:

git clone <remote_url>
cd <repo>
for b in $(git branch -r | grep -v HEAD | grep -v master);do
    git branch $(basename $b) $b
done
git remote rm origin

当然,正如 Jess Bowers 所说,如果您可以访问机器来执行此操作,只需将其 tar 或压缩并移动文件就更容易了。

你也可以只做一个裸克隆:

git clone --bare <remote_url>

然后从中制作新的克隆。

于 2010-02-12T05:00:05.367 回答