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

sga*_*a62 7 python git django github django-database

一个伙伴和我正在开发一个Django应用程序,并正在使用git(GitHub).

在我们工作的时候,我们会在我们的网站上制作虚假账户,登录并将内容上传到数据库等等,以便进行测试.这是问题:每次我们在GitHub上合并分支时,我们都会遇到与数据库文件的合并冲突.当然,这是因为我们的数据库文件在存储库中,并且由于我们单独测试,因此文件的本地副本会有不同的发展.

我想要做的是让数据库文件在存储库之外.这样,我们可以合并,并始终保持我们自己的数据库副本运行,独立于其他人的本地副本.

但是,我们的settings.py文件必须相同,因此我们无法指定本地路径(即'Users/sgarza62/Desktop'或'Users/rada/Desktop).这是理想的,但settings.py文件是一个共享文件,因此它在存储库的两个副本中必须相同.

通过以下内容,我们已经能够避免使用本地路径:

## 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': '',
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是理想的,是这样的:

## 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': '',
    }
}
Run Code Online (Sandbox Code Playgroud)

我们如何将数据库文件保存在存储库之外?

Ale*_*uss 12

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


Gar*_*yde 5

首先,您需要从git存储库中删除数据库文件.

git rm <database_file>
Run Code Online (Sandbox Code Playgroud)

要阻止将文件添加到存储库,请在存储库的签出中创建名为".gitignore"的文件,将数据库文件添加到.gitignore,然后将.gitignore添加到存储库.(文件)

为了防止与settings.py冲突,我还将settings.py添加到.gitignore.然后,我创建一个名为"settings.production.py"的文件,其中包含生产服务器的所有设置,并将其添加到存储库.在我的本地结账时,我只需将此文件复制到settings.py并根据需要修改变量.在我的生产服务器上,我为settings.production.py创建了一个符号链接.

ln -s settings.production.py settings.py
Run Code Online (Sandbox Code Playgroud)

警告:

  1. 如果您的存储库是公共的,则它永远不应存储密钥,密码,证书等.您不希望其他人访问这些文件.
  2. 您还应验证您的Web服务器不提供".git"文件夹.黑客可以获取你的源代码,如果http://example.com/.git是可访问的.

  • 如果repo是公共的,则对设置文件进行版本控制可能会导致问题(泄露的密钥).不过还是很好的答案! (2认同)