7

私はdjangoプロジェクトを持っており、gitを使用しています。

ブランチごとに異なる settings.py ファイルが必要です。

merge=ours を使用して settings.py を .gitattributes に追加することをテストしましたが、競合がなければ Git は正常にマージされるため、機能しませんでした。

また、settings.py を .gitignore に追加することはオプションではありません。settings.py で何かを変更した場合、同じブランチにプッシュしたいからです。

マージ時にファイルを無視してプッシュする方法はありますか?

アップデート:

VonC のソリューションを試し、settings_production.py と settings_development.py の 2 つの設定を作成しました。

そこで、gitpython を pip でインストールし、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 ファイルを作成して、どのブランチにあるかを確認し、.py からブランチ固有のコードをインポートしsettings-branchX.pyます。このソリューションは VonC のソリューションにかなり近いですが、Python で実行しており、git をいじっていません。

その要点からインスピレーションを得られるかもしれません。

于 2013-06-08T11:10:27.983 に答える