Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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_Github_Repository_Git Submodules - Fatal编程技术网

Git:从现有存储库中创建Git子模块,并将父级更改反映到子存储库中

Git:从现有存储库中创建Git子模块,并将父级更改反映到子存储库中,git,github,repository,git-submodules,Git,Github,Repository,Git Submodules,请注意,我是Git的新手 我有两份回购协议: 主存储库是Libgdx-REPO,我所有的工作都放在这个存储库中,主要是在。由于我希望gdx sqlite项目显示为一个单独的存储库,我所做的是: 在GitHub上创建了一个新的repo(gdx sqlite repo) 在我的计算机上创建了本地repo(嵌套在本地libgdx repo中) 将本地嵌套repo的所有代码推送到远程gdx sqlite repo 这导致了所有问题,我认为嵌套存储库是罪魁祸首。后来我删除了本地嵌套存储库并恢复到以前的

请注意,我是Git的新手

我有两份回购协议:

  • 主存储库是Libgdx-REPO,我所有的工作都放在这个存储库中,主要是在。由于我希望gdx sqlite项目显示为一个单独的存储库,我所做的是:

  • 在GitHub上创建了一个新的repo(gdx sqlite repo)
  • 在我的计算机上创建了本地repo(嵌套在本地libgdx repo中)
  • 将本地嵌套repo的所有代码推送到远程gdx sqlite repo
  • 这导致了所有问题,我认为嵌套存储库是罪魁祸首。后来我删除了本地嵌套存储库并恢复到以前的提交。我发现解决这类问题的方法是Git子模块,但我完全不知道我要实现什么,如下所示

    现在,根据以下内容,我应该如何实现这一目标:

  • 我想创建一个位于“gdx sqlite repo”的新repo,该repo应始终反映我对位于“”的项目所做的更改
  • 任何向“gdx sqlite REPO”发送请求的人都应该能够提取所有依赖项(即完整的libgdx REPO),以便能够立即处理该扩展

  • 这怎么可能呢?

    你说得对。对于这种情况,最好的方法是使用。这是在Git中处理依赖关系的最佳方法

    作为主项目的扩展,您可以通过以下方式将其添加为子模块:

    git clone git@github.com:mrafayaleem/libgdx.git libgdx
    cd libgdx
    # remove the old directory
    rm -rf extensions/gdx-sqlite
    git add extensions/gdx-sqlite
    # add the submodule (note the read-only URL)
    git submodule add git://github.com:mrafayaleem/gdx-sqlite.git extensions/gdx-sqlite
    # commit the changes
    git commit -m 'Add submodule for the gdx-sqlite extension'
    
    然后要克隆项目(及其所有子模块):

    或为您(具有写访问权限):

    你应该看一看。 这允许您添加一个或多个git存储库作为子树

    缺点之一是,你需要认真对待你的承诺。如果使用不同子树中的文件提交多个更改,则所有存储库的历史记录中都会有此提交。如果你试图在一个回购协议中确定一个变更,却找不到日志中提到的文件,因为该文件从未属于该回购协议,那么这可能会非常糟糕。解决方案是将提交拆分到不同的存储库

    这对我很有用:

    git ls-files --stage | grep $160000
    

    基于这篇伟大的文章:

    子模块并不是他想要的。他希望子模块中的更改也反映在超级模块中。只有当他同时对两份回购协议进行变更时,才会出现这种情况。一个用于子模块中的更改,另一个用于更新“super”项目中的修订标记。它不像svn中的外部程序那样工作。还有其他类似的解决方案,但它们也有其他缺点。这里引用了一句话:“这是子模块的一个重要方面:您将它们记录为它们所处的确切提交状态。您不能在master或其他符号引用中记录子模块。”您在另一个问题上发布了这篇文章,在那里它或多或少起作用,但在这里,这似乎真的不相关。
    git clone --recursive git@github.com:mrafayaleem/libgdx.git
    
    git ls-files --stage | grep $160000