Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 如何将包含子存储库的存储库推送到新的裸存储库中,并将其拉回到另一台计算机上?_Git_Git Submodules - Fatal编程技术网

Git 如何将包含子存储库的存储库推送到新的裸存储库中,并将其拉回到另一台计算机上?

Git 如何将包含子存储库的存储库推送到新的裸存储库中,并将其拉回到另一台计算机上?,git,git-submodules,Git,Git Submodules,我创建了一个包含一些子存储库的Git存储库。现在,我想将这些存储库和所有子存储库推送到外部硬盘驱动器(称为e)上的新裸存储库中 之后,我想从另一台计算机上的硬盘驱动器中提取完整的存储库。 但是,我只得到空目录,没有子存储库中的文件 我已经采取了以下步骤: 创建三个子存储库: cd /d/all/sub1 git init git add . git commit -m "initial commit" cd /d/all/sub2 git init git add . git commit -

我创建了一个包含一些子存储库的Git存储库。现在,我想将这些存储库和所有子存储库推送到外部硬盘驱动器(称为e)上的新裸存储库中

之后,我想从另一台计算机上的硬盘驱动器中提取完整的存储库。 但是,我只得到空目录,没有子存储库中的文件

我已经采取了以下步骤:

  • 创建三个子存储库:

    cd /d/all/sub1
    git init
    git add .
    git commit -m "initial commit"
    
    cd /d/all/sub2
    git init
    git add .
    git commit -m "initial commit"
    
    cd /d/all/sub3
    git init
    git add .
    git commit -m "initial commit"
    
    cd /d/all
    git init
    git add .
    git commit -m "initial commit"
    
  • 创建包含3个子存储库的存储库:

    cd /d/all/sub1
    git init
    git add .
    git commit -m "initial commit"
    
    cd /d/all/sub2
    git init
    git add .
    git commit -m "initial commit"
    
    cd /d/all/sub3
    git init
    git add .
    git commit -m "initial commit"
    
    cd /d/all
    git init
    git add .
    git commit -m "initial commit"
    
  • 在外部驱动器上创建新的裸存储库

    cd /e
    mkdir all
    cd /e/all
    git init --bare
    
  • 将存储库推送到新的裸存储库

    cd /d/all
    git remote add origin /e/all
    git push --set-upstream origin master
    
  • 从外部硬盘拔出其他计算机上的所有

    cd /h/test
    git init
    git pull /e/all
    

  • 我必须如何更改步骤4和5以实现我的目标?

    通常情况下,子模块会有一个远程存储库。例如,假设github上有一个子模块。那么在4到5之间就可以了

    git submodule add https://github.com/Mellbourn/sub4.git
    git commit -m "added submodule 4"
    
    git submodule init
    git submodule update
    
    5点以后你就可以了

    git submodule add https://github.com/Mellbourn/sub4.git
    git commit -m "added submodule 4"
    
    git submodule init
    git submodule update
    
    之后,您将在
    test
    repo的子目录
    sub4
    中拥有一个子模块(填充了内容)

    您的示例的一个问题是,子回购协议并没有真正成为合适的子模块。您正在存储库中本地创建它们。子模块的要点是,它们是您自己的回购协议之外的回购协议的复制品


    子模块既不是自动的,也不是直观的。我强烈建议您。

    改用。本地内部/嵌套存储库没有办法吗?我发现,相对路径是可能的。所以我尝试“git submodule add./sub1”。但我不知道如何将其推送到裸存储库。@tonirush一旦正确初始化了子模块,它们将作为外部存储库中的嵌套目录重新命名。因此,相对路径是可能的。到目前为止,你的想法是正确的。您的问题是,在尝试将子存储库嵌套到外部repo中之前,应该正确初始化子存储库,最好是使用远程存储库。