34

我有一个包含两个分支的存储库:live 和 stage。该存储库包含基于 Web 的应用程序的代码。我想为舞台和实时分支维护两个不同的 .htaccess 文件,但仍然保持它们的版本控制,因为服务舞台站点的性质有点不同(例如,现在我希望缓存是定时的不同)。

我是 git 的新手,所以可能有一个简单的解释,但我希望有一个工作流程,当我在现场并拉动更改(简单git merge stage)时,我没有在现场覆盖现有的 .htaccess分支。有没有办法配置这个?我错过了 git 中的一些重要概念吗?

同样,还有一大块(但可能有很多).html 文件,我想在其中跟踪更改但不将它们合并回实时。为了清楚起见,我希望 live 和 stage 跟踪这些文件中的更改,但知道在合并时不要合并这些特定的更改。

4

2 回答 2

37

我在 Stack Overflow上的另一个问题上找到了答案,归功于 fcurella:

假设您要排除文件config.php

在分支 A 上:

  1. .gitattributes在同一目录中创建一个名为的文件,使用以下行: config.php merge=ours. 这告诉 git 在合并文件时使用什么策略。在这种情况下,它始终保留您的版本,即。您要合并到的分支上的版本。

  2. 添加.gitattributes文件并提交

在分支 B:重复步骤 1-2

现在尝试合并。您的文件应该保持不变。

这似乎是一个更具可扩展性的解决方案。

于 2010-12-23T16:00:05.450 回答
8

Ankur,试试这个:

假设您已在 live 分支上签出,请运行:

git merge --no-commit --no-ff stage

这将合并两个分支,但不会进行新的提交,而是会失败并将这些更改保留在您的索引文件和工作目录中。现在,由于您希望.htaccess在 live 分支上保持文件完整,您可以从 live 中签出此文件:

git checkout live .htaccess

现在,您的工作树具有除 之外的所有阶段更改.htaccess,因此您可以完成合并提交:

git commit -m "Pulled changes from stage" -a
于 2010-12-23T05:10:06.350 回答