git merge和每个分支的不同gitignore

时间:2014-07-09 09:10:05

标签: git merge gitignore git-flow

我有2个分支,developmastermaster分支不应包含存储在名为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}}完全忽略,无论在分支上执行的操作如何。无论如何,我能做到这一点吗?

1 个答案:

答案 0 :(得分:2)

一个简单的解决方案可能是:

  1. 当您发现要修复的错误时,请创建一个新的dev分支。
  2. 更改.gitignore并修改assets/boilerplate/
  3. 中的所有文件
  4. 将这些更改提交到dev分支
  5. 切换到master
  6. 将分支与git merge -s ours
  7. 合并

    最后一步将告诉Git:“这两个分支现在已合并。不再存在差异。”但它不会更改master中的任何文件。这样,所有“准备开发”步骤都可以从Git中隐藏。现在您可以切换回dev分支。当您进行真正的合并时,Git将仅考虑与ours策略合并后更改的文件。

    那就是说,我认为这是滥用Git和构建系统。对于我自己的项目,我会使用这种方法:

    • 我一直在dev分支机构工作。
    • 构建工具从此分支创建分发(使用缩小的JS,清理的样板文件等)。

    永远不会提交构建工具的结果;该工具必须足够好,以便我可以通过查看旧版本从开发源重新创建每个版本。

    如果由于某种原因我无法创建这样的构建工具,第二种方法是创建一个发布回购。然后,构建的最后一步是在发布检出中删除所有文件(仅在文件系统上,而不是在Git!中),然后将新文件复制到其中。然后git status将显示当前和最后一个版本之间的差异。