8

友人と私は Django アプリを開発しており、git を使用しています。

私たちが仕事をしている間、私たちはサイトに偽のアカウントを作成し、ログインし、コンテンツをデータベースにアップロードします..テスト目的で. ブランチをマージするたびに、データベース ファイルでマージの競合が発生します。データベース ファイルはリポジトリにあり、個別にテストしているため、ファイルのローカル コピーは異なる方法で開発されます。

データベース ファイルが追跡されないようにするにはどうすればよいですか?

以下により、ローカル パスの使用を避けることができました。

## settings.py


from os.path import dirname, join

PROJECT_DIR = dirname(__file__)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': join(PROJECT_DIR, 'foo.db'),
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

理想的なのは、次のようなものです。

## settings.py


from os.path import dirname, join

PROJECT_DIR = dirname(__file__)

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': join('../../../', PROJECT_DIR, 'foo.db'), # this path is outside the repository (ie, 'Users/sgarza62/foo.db')
        'USER': '',
        'PASSWORD': '',
        'HOST': '',
        'PORT': '',
    }
}

データベース ファイルがコミットされないようにするにはどうすればよいでしょうか。

4

4 に答える 4

13

データベース ファイルを に追加します.gitignore。その後、現在の場所に保持できますが、バージョン管理下にはありません。

于 2013-02-02T19:42:45.593 に答える
7

まず、git リポジトリからデータベース ファイルを削除します。

git rm <database_file>

ファイルがリポジトリに追加されないようにするには、リポジトリのチェックアウト内に「.gitignore」という名前のファイルを作成し、データベース ファイルを .gitignore に追加して、.gitignore をリポジトリに追加します。(ドキュメンテーション)

settings.py との競合を防ぐために、settings.py も .gitignore に追加します。次に、運用サーバーのすべての設定を含む「settings.production.py」というファイルを作成し、リポジトリに追加します。ローカル チェックアウトで、このファイルを settings.py にコピーし、必要に応じて変数を変更するだけです。私の運用サーバーでは、settings.production.py へのシンボリック リンクを作成します。

ln -s settings.production.py settings.py

警告:

  1. リポジトリが公開されている場合は、秘密鍵、パスワード、証明書などを保存しないでください。他の人がこれらのファイルにアクセスできないようにする必要があります。
  2. Web サーバーが「.git」フォルダーを提供していないことも確認する必要があります。ソース コードにアクセスできる場合、ハッカーがソース コードにアクセスするhttp://example.com/.git可能性があります。
于 2013-02-02T20:02:36.030 に答える
1

これは一般的な問題です。データベースをチェックインせず、必要に応じてデータ フィクスチャをロードおよび保存しないことをお勧めします。( https://docs.djangoproject.com/en/dev/howto/initial-data/ )

test_data ディレクトリを作成し、次のコマンドを実行してデータベースをデータベースに依存しない json ファイルにエクスポートします: ./manage.py dumpdata > test_data/test_file_1.json

そのファイルをソースにチェックインします。データベースをその時点に復元したい場合は、次のコマンドを実行するだけです: ./manage.py loaddata test_data/test_file_1.json

これには、単体テストにも使用できるという利点があります ( django 単体テストでのフィクスチャの読み込みを参照) 。

from django.test import TestCase
class MyTestCase(TestCase):
    fixtures = ['/myapp/fixtures/dump.json',]
于 2013-02-02T21:06:30.767 に答える
1

他の ppl 共有レポを使用するプロジェクトで作業する場合は、local_settings.py を作成し、そこにすべてのローカル設定を保持する必要があります :) 次に、settings.py に を追加するだけfrom local_settings import *です。そして、local_settings.py とデータベース ファイルを.gitignoreファイルに追加します。

たとえば、ファイル名がdatabase.dbこのファイルのディレクトリにある場合は、名前の付いたファイルを作成し.gitignoreて書き込むdatabase.db*.db、すべての db ファイルを無視します。

于 2013-02-02T19:44:40.580 に答える