我有2个分支,develop
和master
。 master
分支不应包含存储在名为boilerplate
的目录中的某些开发文件和工具。到目前为止,非常好,因为我可以或多或少地在.gitignore
文件中,在分支之间管理以下差异。
# Dev tools
/html
/boilerplate/node_modules
/boilerplate/bower_components
/assets/dist/main.min.css
/assets/dist/main.min.js
.....
主
# Cleanup for live
/html
/boilerplate
/assets/dist/main.css
/assets/dist/main.js
.....
所以,对每个分支的提交都没关系!问题是我从develop
合并到master
,或从git flow hotfix
分支开始master
。
如果我从develop
合并到master
,问题是在某些时候它会使自动过程失败,我将不得不通过从boilerplate
文件夹中删除git rm -rf boilerplate/
来完成它git的索引,因为问题所在的位置。所以我只做git flow hotfix start XYZ
并完成所有工作。这不是一个大问题。
但是,如果由于某种原因,我只是为了一个基于master的修补程序,手动或通过boilerplate
进程启动一个新的分支,我的develop
目录在更改时会被遗忘合并到master
。它中的所有内容都丢失了......空虚,虚无,没有......因为develop
完全被忽略了。
所以,如果可能的话,我正在寻找一种避免这个问题的方法。 master
的Boilerplate保持原样(90%未触及),并且{{1}}完全忽略,无论在分支上执行的操作如何。无论如何,我能做到这一点吗?
答案 0 :(得分:2)
一个简单的解决方案可能是:
dev
分支。.gitignore
并修改assets/
和boilerplate/
dev
分支master
git merge -s ours
最后一步将告诉Git:“这两个分支现在已合并。不再存在差异。”但它不会更改master
中的任何文件。这样,所有“准备开发”步骤都可以从Git中隐藏。现在您可以切换回dev
分支。当您进行真正的合并时,Git将仅考虑与ours
策略合并后更改的文件。
那就是说,我认为这是滥用Git和构建系统。对于我自己的项目,我会使用这种方法:
dev
分支机构工作。永远不会提交构建工具的结果;该工具必须足够好,以便我可以通过查看旧版本从开发源重新创建每个版本。
如果由于某种原因我无法创建这样的构建工具,第二种方法是创建一个发布回购。然后,构建的最后一步是在发布检出中删除所有文件(仅在文件系统上,而不是在Git!中),然后将新文件复制到其中。然后git status
将显示当前和最后一个版本之间的差异。