我正在尝试设置一个脚本,以自动将更改从开发分支更改为包含Maven子模块的分支。
此项目的设置方式是,开发分支包含父模块。所有更改都将转到该模块,因此将合并到开发分支。为了使子模块获得这些优势,必须将其重新开发。子模块本身绝不能在重新配置中被修改。
[当我尝试使用脚本将子分支重新建立到开发基础时,发生冲突,指出子模块已在开发分支上删除。这是有道理的,因为该模块在开发中不存在。我需要rebase来忽略与子模块有关的任何事情,因此我在项目的.gitignore中添加了这一行:
*_module/
每个子模块的命名约定在末尾都有'_module',因此使用*,则每个分支都应该能够忽略所讨论的子模块,而不管其名称如何。但是,这没有用。我还没有找到有关此用例的任何信息,并且想知道是否有人对如何进行使用有任何建议。
这是开发分支的常规文件结构:
project+
|
+-src+ #parent module
| |
| +-main #where changes to the code occure
|
+.gitattributes
|
+.gitignore
|
+pom.xml
这是带有子模块的分支的结构:
project+
|
+-test1_module+ #child module in maven. Need to ignore this in .gitignore, or some equivalent
| |
| +-src+
| |
| +-assembly
| |
| +-main
|
+-src+ #parent module
| |
| +-assembly
| |
| +-main
|
+.gitattributes
|
+.gitignore
|
+pom.xml
编辑:需要明确的是,我不想从git存储库中删除此子模块;我只是想忽略或跳过重新设置期间对其所做的任何更改。
[.gitignore
只能忽略未跟踪的内容。
所以每个分支都需要:
git rm -r --cached test*_module
echo "*_module/">>.gitignore
然后添加并提交。这样,重新设置将不会产生任何冲突。
但是:这不是OP所追求的,这意味着.gitignore仍然不是解决方案。
在这种情况下,rebase脚本应该在发生冲突时(对于子模块),
git checkout -- theirs -- test1Module
)。git add .; git rebase --continue
)假定可以通过maven依赖关系自动获取maven模块,这意味着不必在父存储库中对其进行版本控制。