【发布时间】:2022-04-21 21:11:14
【问题描述】:
我正在从一台将要被擦除的计算机上克隆一个 git 存储库。
是否可以在不创建原始存储库origin/master 的情况下克隆存储库?或者我需要克隆它,然后删除远程分支(使用git remote rm origin完成)?
编辑:仓库只有一个分支,没有标签。
【问题讨论】:
我正在从一台将要被擦除的计算机上克隆一个 git 存储库。
是否可以在不创建原始存储库origin/master 的情况下克隆存储库?或者我需要克隆它,然后删除远程分支(使用git remote rm origin完成)?
编辑:仓库只有一个分支,没有标签。
【问题讨论】:
不必将原始存储库设为“源”远程以克隆主分支。
在新机器上,新建一个仓库:
git init foo
然后将旧存储库拉入新存储库,无需创建远程:
cd foo
git pull <reference to old repository>
但是,应该注意的是,保存存储库的最简单方法是将存储库的目录压缩并将文件移动到新机器。这将保留所有遥控器、标签等。
如下所述,在复制存储库时,从区分大小写的文件系统(例如 Linux、Mac、NTFS)到不区分大小写的文件系统(例如 Fat32)时要小心。
【讨论】:
file:/// 的情况下使用前者,即使用git pull /home/username/blah 与git pull file:///home/username/blah?
首先,你可以使用git clone的--origin <name>选项
--origin
, -o 不要使用远程名称 origin 来跟踪上游存储库,而是使用
。
其次,您可以使用git remote add 将要从中提取的存储库添加到现有存储库(因此您可以使用git init,然后使用git remote add <name> <url>)。
如果你想创建repository的镜像,refs/heads/*在clone中进入refs/heads/*,你可以initrepository,设置合适的refspec,然后fetch...
或者您可以使用 git clone --mirror,它应该回答当前版本的 OP 问题。
但是,这不会保留配置(包括远程)、工作树状态、引用日志等。为此,您需要复制整个存储库,如 Jess Bowers said。
【讨论】:
--origin 的问题是你必须指定一个原始远程,对吗?我正在尝试找到一种简单的克隆(或有效克隆)方法,以便克隆没有配置任何远程别名。当然,您总是可以使用git remote rm origin,但我希望找到可以一步完成的方法。
处理此类转移的一般方式是git bundle。见Backup of github repo。
从您的第二个(新)桌面:
git bundle create file:///\\oldDesktop/share/myGitRepo --all
创建一个本地文件,您可以从中克隆本地 git 存储库。
注意:file:/// 协议将支持 UNC(通用命名约定)Windows 路径,路径的其余部分使用“/”而不是“\”。见Git on a Windows Lan。
【讨论】:
我相信你需要删除远程分支。
【讨论】:
远程仓库是否有比 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>
然后从中制作新的克隆。
【讨论】: