[英]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
警告:
当您使用其他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.