【问题标题】:Cloning a repository without making it the origin remote克隆存储库而不使其成为远程源
【发布时间】:2022-04-21 21:11:14
【问题描述】:

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

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

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

【问题讨论】:

    标签: git git-clone


    【解决方案1】:

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

    在新机器上,新建一个仓库:

    git init foo
    

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

    cd foo
    git pull <reference to old repository>
    

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

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

    【讨论】:

    • 太棒了,我不知道你能做到这一点。你也可以这样克隆非主分支吗?
    • 如果应用后者,不要将非 FAT32 的内容复制到 FAT32 分区然后再复制回来。 stackoverflow.com/questions/1754108/…
    • 您是否会在有或没有file:/// 的情况下使用前者,即使用git pull /home/username/blahgit pull file:///home/username/blah
    • 如果是本地仓库,可以使用 /home/username/blah
    • 是的,ebneter,您也可以通过这种方式克隆非分支。像这样:git pull 。例如: git pull /home/jess/bar-repository my_alternate_branch
    【解决方案2】:

    首先,你可以使用git clone--origin &lt;name&gt;选项

    --origin , -o

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

    其次,您可以使用git remote add 将要从中提取的存储库添加到现有存储库(因此您可以使用git init,然后使用git remote add &lt;name&gt; &lt;url&gt;)。


    如果你想创建repository的镜像,refs/heads/*在clone中进入refs/heads/*,你可以initrepository,设置合适的refspec,然后fetch...

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

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

    【讨论】:

    • 使用--origin 的问题是你必须指定一个原始远程,对吗?我正在尝试找到一种简单的克隆(或有效克隆)方法,以便克隆没有配置任何远程别名。当然,您总是可以使用git remote rm origin,但我希望找到可以一步完成的方法。
    • @Cupcake:不幸的是(据我所知)没有一步到位的解决方案。您可以克隆 (1) 然后删除“来源”远程信息 (2),或者初始化存储库 (1) 并使用 URL 而不是远程名称 (2) 获取所有分支和标签。
    • 您的答案与所问的问题不同。
    • @JasonS:要么我误读了原始问题,要么(更有可能)它同时被更改和澄清。
    • History of the OP shows the original meaning of the question didn't change
    【解决方案3】:

    处理此类转移的一般方式是git bundle。见Backup of github repo

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

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

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

    注意:file:/// 协议将支持 UNC(通用命名约定)Windows 路径,路径的其余部分使用“/”而不是“\”。见Git on a Windows Lan

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 如果你想让它命名别的,你可以做 git clone -o not_origin
      • 问题是当你删除远程(不是远程分支)时,你也删除了所有远程/ 分支。
      • @ebneter:“删除远程(不是远程分支)”是什么意思?
      • @Andrew Grimm:“远程”是由“git remote”配置的;我认为“远程分支”是远程仓库上的相应分支。也就是说,您可以使用 'git push origin :branch' 删除的内容,它实际上会删除远程分支上的分支。 git 的术语在这方面有点混乱。
      【解决方案5】:

      远程仓库是否有比 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>
      

      然后从中制作新的克隆。

      【讨论】:

        猜你喜欢
        • 2011-10-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 2020-01-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多