在一些其他项目中使用较小的项目作为git子模块 - 无法使其工作

时间:2016-10-26 09:21:49

标签: git git-submodules

我已经看到这个问题不止一次出现在这里或另一种形式,这就是让我选择这条路线的原因。所以我有一个小项目(web的东西),它有自己的gruntfile和git存储库,正在积极开发中。我想在其他几个项目中使用该开发的结果,也就是说,我不想要或不需要gruntfile或sass文件等。但是,如果有的话在这个共享项目中的更新,我希望能够将这些更新拉入并合并到当前项目的文件中。我还想对这些文件进行修改,使其适应当前项目的需求。

我理解它的方式是,我应该在任何其他项目中使这个git子模块我想拥有这些文件。我必须说我对git相当新,到目前为止我一直在用它来做一些个人项目 - 而且喜欢它 - 但是没有任何协作(所以没有拉动和合并),我觉得我还是没有#39;我真的很了解它。

无论如何,我添加了共享项目(让我们称之为SUB)作为我目前正在处理的项目中的子模块(让我们称之为A)。因此,SUB现在作为A中的文件夹存在,git status现在将此文件夹列为modified。执行git add SUB/不会改变这一点。做git merge SUB/只需给我一个merge: SUB/ - not something we can merge。 ??如何将SUB中的更新文件更新为A?或者我是以错误的方式来做这件事的?我也在某个地方找到了SO的子树合并策略,也许那会更合适?

我使用的是git v2.1.4,但是在v 2.10.1中对git子模块进行了更改 - 不确定这是否有问题。

1 个答案:

答案 0 :(得分:0)

首先,ASUB是两个与自己生活不同的回购。

A的角度来看,SUB只是SUB中特定提交的参考/链接。
因此,当您在SUB中更改内容时,您需要提交以下更改:

$ cd SUB/
$ git commit -a -m "Improve SUB framework loading times"
[master f78dc91] Improve SUB framework loading times"
 10 files changed, 228 insertions(+), 28 deletions(-)
$ git push

现在您已向f78dc91添加了新提交(SUB),您可以返回A并输入:

$ cd ..
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   SUB (new commits)

您需要git add这些SUB更改(即对新提交f78dc91的引用):

$ git add SUB
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

    modified:   SUB

然后提交:

$ git commit -m "A now uses a new version of SUB improving loading times."
$ git push

正如您所见,在SUB中提交和推送更改,并在A中集成这些更改是您需要执行的两个独立操作A变化。

其他评论

  

git merge SUB /

你只能合并引用,这意味着提交,分支和标签(显然只有A repo的引用)所以这个命令没有任何意义。 (您无法合并文件或目录)