问题引入
这是在创建子App时引出的问题,目前公司的项目需要分支出多个子项目,只需要更换图标和主体色彩(即更换res文件下内容),因此需要拉不同的branch,而当版本迭代时希望通过只修改master分支的业务逻辑,再合并到branch的方法来完成。这样保证了各子项目保持最新,但问题是也会把master分支的资源文件引入到各个branch,造成混乱,因此考虑通过配置.gitattribute以完成merge过程中conflict时以本分支优先,即auto-merge。
配置方法:
step1: 修改Git全局配置,默认的merge是不可配置的。Git命令行中输入$ git config --global merge.ours.driver true
。参考自http://stackoverflow.com/questions/14093540/tell-git-to-use-ours-merge-strategy-on-specific-files
step2: 在项目根目录下新建文件.gitattribute,配置需要使用auto-merge的文件,例如本例中忽略掉所有layout布局文件:app/src/main/res/layout/*.xml merge=ours
(这里是Android studio项目目录,这里要根据gitattribute文件的位置来写路径,以同目录的其他文件夹为开头,如这里的app)
step3: 将gitattribute文件拷贝至不同的branch。提交代码。此时如果你修改master下的布局文件,然后切换至子分支testBranch,将master合并过来,你会发现不会提示资源文件或色值修改带来的冲突,因为已自动忽略master下布局文件的修改。
Tips:
由于子项目属于不同的App,包名不同会带来import-R文件的错乱。如何合理修改包名见”original-package”的使用。
本情况仅适用于系列App开发,不同子项目之间只更换对应的color、strings、drawable等。如果大量更改res下资源文件,还是不要用此法..