我有一个 github 存储库,正在被许多用户使用,并假设随着项目的发展会有更多的人加入。当每个人都克隆该项目时,我希望它是无缝的。
这是一个Python项目,我有一个
.env
文件用于传递环境变量。该文件有一些变量和一些凭据。
我希望
.env
文件不被跟踪,因为某些凭据字段对于每个用户来说都是不同的,如果有人在本地更改它,它将通过 git add .
推送。
我尝试使用
git rm --cached
但它会从 github 存储库中删除该文件。
我得到的最接近的答案是使用
git update-index --assume-unchanged .env
。但此命令仅适用于本地,如果其他人克隆存储库,该文件仍将被跟踪。
总而言之,我想将文件保留在存储库中,但它不应该被 Git 跟踪。
感谢任何帮助。
答案是,这不是你可以用 Git 轻松完成的事情。
例如,如果您将文件添加到
gitignore
,然后添加到 git add --force .env
,则对该文件的更改仍将显示在 git status
中。 Git 只是未设置为在存储库中包含文件,但会忽略对该文件的更改/更新。理论上在底层数据模型内是可能的,但 Git 本身不支持。
但是,常见的解决方法是创建一个模板或示例
.env
文件(例如 env.example
),指导用户在首次设置项目时将其复制到 .env
。您可以在存储库中跟踪 env.example
,并将 .env
放入 gitignore
。
您甚至可以提供
scripts/setup.sh
或类似的工具来为他们执行此操作。下面是一个适用于各种 Python 项目的示例:
#!/bin/sh
set +x
cp -nv env.example .env
pyenv install --skip-existing
pyenv exec python -m pip install -U pip
pyenv exec pip install wheel
pyenv exec pip install --requirement requirements-dev.in
pyenv exec pip install --editable .
另一种选择是从代码中的模板生成示例文件:
#!/bin/sh
set +x
if ! test -f .env; then
cat > .env <<ENV
FOO=1
DB_HOST=localhost
DB_USERNAME=dev
DB_PASSWORD=dev1234
ENV
fi
pyenv install --skip-existing
pyenv exec python -m pip install -U pip
pyenv exec pip install wheel
pyenv exec pip install --requirement requirements-dev.in
pyenv exec pip install --editable .