git工作流:我可以阻止某个文件合并到另一个分支但仍保持在版本控制之下吗?

时间:2010-12-23 03:40:57

标签: git workflow git-merge

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

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

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

2 个答案:

答案 0 :(得分:35)

我在Stack Overflow上找到了answer on another question,归功于fcurella:

  

假设您要排除文件config.php

     

在分支A:

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

  2.   
  3. 添加.gitattributes文件并提交

  4.         

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

         

    立即尝试合并。您的文件应保持不变。

这似乎是一种更具伸缩性的解决方案。

答案 1 :(得分:7)

Ankur,试试这个:

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

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

这将合并两个分支,但不会进行新的提交,将失败并将这些更改保留在索引文件和工作目录中。现在,既然您希望将.htaccess文件保留在实时分支上,则可以从实时结帐此文件:

git checkout live .htaccess

现在,您的工作树包含了舞台上的所有更改,.htaccess除外,因此您可以完成合并提交:

git commit -m "Pulled changes from stage" -a