【问题标题】:git merge and different gitignore for each branch每个分支的 git 合并和不同的 gitignore
【发布时间】:2014-08-30 05:41:26
【问题描述】:

我有 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,或者从master 分支开始选择git flow hotfix 时。

如果我从 develop 合并到 master,问题是在某些时候它会导致自动过程失败,我必须通过从 git 的索引中删除 boilerplate 文件夹来手动完成它,因为那是问题存在。所以我只做git rm -rf boilerplate/ 就完成了。这不是什么大问题。

但是,如果出于某种原因,我基于 master 手动或通过 git flow hotfix start XYZ 进程启动一个新分支只是为了一个修补程序,当更改合并到 @987654338 时,我的 boilerplate 目录将被遗忘@也一样。它中的所有内容都丢失了...空的,nada,什么都没有...因为在master 中被完全忽略了。

所以,如果可能的话,我正在寻找一种方法来避免这个问题。 develop 的样板文件保持原样(90% 未触及),并且在 master 上完全忽略,无论在分支上执行什么操作。反正我能做到吗?

【问题讨论】:

  • 您没有说明为什么 /boilerplate 在 dev 和 master 中有不同的模式。为什么不在所有分支中简单地使用模式/boilerplate/?
  • 因为这就是我需要它们的方式。如您所见,在dev 中,我省略了可能是第三方库的大型目录,这些目录不断变化,我不需要在git status 中不断显示。如前所述,boilerplate 包含开发过程所需的工具(如 grunt)。
  • 这不是我要问的。请告诉我为什么模式必须不同。到目前为止,我不明白为什么您排除了master 中的所有内容,而只排除了dev 中的一部分。在dev工作时,你需要在boilerplate/下面提交一些东西吗?
  • dev 上的 boilerplate 目录包含 Grunt 正在处理的资产。正如bower_components所示,有less、css、javascript等文件。而这些文件,在 master 上根本不需要,因为在 master 上我只需要编译所有需要的东西,准备好了(.min 文件)。
  • 为什么需要它们在版本控制下?

标签: git merge gitignore git-flow


【解决方案1】:

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

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

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

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

  • 我一直在dev 分支工作。
  • 构建工具会从此分支创建一个发行版(使用缩小的 JS、清理过的样板等)。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-05
    • 2013-03-24
    • 2015-07-19
    • 2014-07-17
    • 2011-05-16
    • 2016-10-05
    • 2016-11-09
    相关资源
    最近更新 更多