我已经看到这个问题不止一次出现在这里或另一种形式,这就是让我选择这条路线的原因。所以我有一个小项目(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子模块进行了更改 - 不确定这是否有问题。
答案 0 :(得分:0)
首先,A
和SUB
是两个与自己生活不同的回购。
从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的引用)所以这个命令没有任何意义。 (您无法合并文件或目录)