繁体   English   中英

git与我们的数据库文件合并冲突(多个开发人员)

[英]git merge conflicts with our database file (multiple developers)

一个伙伴,我正在开发一个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': '',
    }
}

我们如何保持数据库文件不被提交?

将数据库文件添加到.gitignore 然后,您可以将其保留在当前位置,但不会受版本控制。

首先,您需要从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黑客可以访问您的源代码

当您使用其他ppl共享仓库处理项目时,您必须创建local_settings.py并保留所有本地设置:)然后在settings.py中添加from local_settings import * 并将local_settings.py和数据库文件添加到.gitignore文件中。

例如,如果您的文件名是database.db则在具有此文件的目录中创建名为.gitignore文件,并在其中写入database.db*.db以忽略所有db文件。

这是一个常见问题。 我建议不要检查数据库,并根据需要加载和保存数据夹具。 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',]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM