合并时忽略文件 - 但将其包含在推送中

时间:2013-06-07 20:28:40

标签: git

我有一个django项目,我正在使用git。

我需要为每个分支设置不同的settings.py文件。

我已经测试过将settings.py添加到.gitattributes并使用merge = ours,但它没有用,因为如果它没有任何冲突,Git将正常合并。

此外,添加settings.py到.gitignore不是一个选项,因为如果我在settings.py中更改某些内容,我希望它被推送到同一分支。

有没有办法在合并时忽略文件但仍推送它?

更新:

我尝试过VonC的解决方案,并创建了两个设置:settings_production.py和settings_development.py。

所以,我点了安装gitpython并在我的settings.py中使用它,如下所示:

from git import Repo
import os

r = Repo(os.path.realpath(os.path.dirname(__file__)))
if r.active_branch.__str__( == 'master':
    from settings_production.py import *
else:
    from settings_development.py import *

它运作良好。

2 个答案:

答案 0 :(得分:1)

我更喜欢版本化:

  • 模板文件settings.py.tpl
  • 每个分支的值文件:settings.py.branch1中的branch1settings.py.branch2中的branch2,...(意思是,没有合并问题:每个值文件保持不变)
  • 一个能够检测当前分支的脚本,获取正确的值文件并从模板文件构建最终settings.py(对于您的工作树是私有的:它永远不会被版本化)

该脚本可以通过content filter driver自动调用,这将在结帐时构建正确的配置文件。

smudge

.gitattributes file可以为smudge文件注册“settings.py.*”脚本。
(签到时不需要'clean'脚本)

答案 1 :(得分:0)

这是VonC的解决方案,或者您在settings.py文件中检查它所在的分支并从settings-branchX.py导入分支特定代码。这个解决方案非常接近VonC,但是你在python中做这个,而不是搞乱git。

您可以从gist获得灵感。