克隆存储库而不使其成为远程源

时间:2010-02-12 01:08:58

标签: git git-clone

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

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

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

5 个答案:

答案 0 :(得分:22)

没有必要使原始存储库成为克隆主分支的“origin”远程。

在新计算机上,创建一个新存储库:

git init foo

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

cd foo
git pull <reference to old repository>

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

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

答案 1 :(得分:7)

首先,您可以使用git clone

--origin <name>选项
  

- origin&lt; name&gt; -o&lt; name&gt;

     
    

使用&lt; name&gt; ,而不是使用远程名称 origin 来跟踪上游存储库。

  

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


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

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

但是这不会保留配置(包括遥控器),工作树状态,reflogs等。为此,您需要将整个存储库复制为Jess Bowers said

答案 2 :(得分:3)

处理此类转移的一般方法是 git bundle 。请参阅Backup of github repo

来自您的第二个(新)桌面:

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

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

注意: file:///协议将支持UNC(通用命名约定)Windows路径,其余路径使用“/”代替“{{1 }}”。请参阅Git on a Windows Lan

答案 3 :(得分:2)

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

答案 4 :(得分:2)

远程仓库是否拥有比主人更多的分支?如果它这样做会更棘手;你需要制作所有分支的本地副本,因为当你删除遥控器时,所有的远程/原始分支都会消失。 (我刚试了!)

所以,你可以这样做:

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>

然后从中创建新的克隆。