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

9 投票
4 回答
10433 浏览
提问于 2025-04-17 14:33

我和我的朋友正在开发一个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 个回答

1

当你和其他人一起做项目,共享代码库的时候,你需要创建一个叫做 local_settings.py 的文件,把所有本地的设置放在里面 :) 然后在 settings.py 文件中,只需要加上 from local_settings import * 这行代码。

同时,要把 local_settings.py 和数据库文件添加到 .gitignore 文件里。比如,如果你的数据库文件叫 database.db,那么在这个文件所在的文件夹里创建一个名为 .gitignore 的文件,然后在里面写上 database.db 或者 *.db,这样就可以忽略所有的数据库文件了。

7

首先,你需要把数据库文件从你的git仓库里删除。

git rm <database_file>

为了防止这个文件被再次添加到你的仓库里,你可以在仓库的文件夹里创建一个名为“.gitignore”的文件,把数据库文件的名字写进去,然后把这个.gitignore文件添加到你的仓库中。 (文档链接)

为了避免和settings.py文件发生冲突,我也把settings.py添加到.gitignore里。接着,我创建一个叫“settings.production.py”的文件,这个文件里包含了生产服务器的所有设置,然后把它添加到仓库中。在我的本地环境里,我只需要把这个文件复制到settings.py,并根据需要修改一些变量。在我的生产服务器上,我会创建一个指向settings.production.py的符号链接。

ln -s settings.production.py settings.py

警告:

  1. 如果你的仓库是公开的,绝对不要存储秘密密钥、密码、证书等文件。你可不想让别人访问这些文件。
  2. 你还需要确认你的网页服务器不会提供“.git”文件夹的访问。如果http://example.com/.git可以被访问,黑客可能会获取你的源代码
14

把你的数据库文件添加到 .gitignore 文件里。这样你就可以把它放在现在的位置,但它就不会被版本控制系统管理了。

撰写回答