7

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

对于每个分支,我需要有不同的 settings.py 文件。

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

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

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

更新:

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

所以,我 pip 安装了 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 *

它工作得很好。

4

2 回答 2

1

我更喜欢版本化:

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

该脚本可以通过内容过滤器驱动程序自动调用,该驱动程序将在结帐时构建正确的配置文件。

弄脏

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

于 2013-06-08T07:32:19.703 回答
0

它要么是 VonC 的解决方案,要么是您制作 settings.py 文件,在其中检查它所在的分支并从settings-branchX.py. 这个解决方案非常接近 VonC,但你是在 python 中做的,而不是搞乱 git。

你可能会从那个要点中得到灵感。

于 2013-06-08T11:10:27.983 回答