如何从其他repo添加git子模块并将其与本地文件夹合并

时间:2017-04-19 10:49:06

标签: git git-submodules

我有一个特定的情况,我没有在堆栈上找到与之匹配的答案 我有一个root_project是基础应用程序目录,与它的远程仓库同步。

现在我有一个文件夹,名为oscar。我之前已经下载了压缩oscar并将其复制到我的root_project,之后我已经在我需要的位置进行了自定义。 之后我注意到,如果我需要从远程oscar获得更新,我会遇到麻烦。

基本的想法是使用git submodule,但实际上无法弄清楚如何使其适应我的需要,因为我不想让我的项目崩溃并回购实验。

另外一个具体的部分是我只需要来自oscar repo的src/oscar,这实际上是在root_project中,并且可以合并我在本地{{1}中的更改文件夹,没有丢失我已在本地完成的事情。

对于如何在当前情况下正确使用oscar,我将不胜感激,如果可能的话,我也希望看到我必须采取的步骤来实现预期的结果

1 个答案:

答案 0 :(得分:1)

  

[...]因为我不想让我的项目崩溃并回复试验。

首先,您不应该害怕在本地存储库中尝试。只要您保留本地副本并且发布实验性更​​改,您就可以随时删除整个内容并从远程重新克隆它。如果你只是尝试一下,这是学习东西的一种非常好的方式,特别是当你打破一切正在进行的时候。不要犹豫!

回答你的问题:我认为oscar作为远程存储库存在。 Git子模块确实是管理需要偶尔更新的子存储库的好方法。您可以找到有关如何使用子模块here的良好文档。如果您通过oscar直接从远程克隆git submodule add而不是先下载和解压缩zip文件,将会更容易。这个新克隆的子模块当然不会包含您对oscar的本地更改,但您可以按照described here的步骤轻松导入它们。

  

另外一个具体的部分是我只需要来自oscar repo的src / oscar,这实际上是在我的root_project中,并且可以与我在本地oscar文件夹中的更改合并,而不会丢失我已经在本地完成的事情。

我不明白这一部分。您是否只想添加oscar子文件夹作为子模块?

编辑:所以你希望你的子模块只包含oscar存储库的子文件夹。您可以在使用

克隆整个存储库(通过git submodule add)后执行此操作
git filter-branch --prune-empty --subdirectory-filter FOLDER-NAME  BRANCH-NAME 

该过程描述为here,尽管只有第5点对您感兴趣。请注意,您必须在子模块中执行此操作,即您必须cd进入子模块文件夹。