将未跟踪的文件保留在Github中

问题描述 投票:0回答:1

我有一个 github 存储库,正在被许多用户使用,并假设随着项目的发展会有更多的人加入。当每个人都克隆该项目时,我希望它是无缝的。

这是一个Python项目,我有一个

.env
文件用于传递环境变量。该文件有一些变量和一些凭据。

我希望

.env
文件不被跟踪,因为某些凭据字段对于每个用户来说都是不同的,如果有人在本地更改它,它将通过
git add .
推送。

我尝试使用

git rm --cached
但它会从 github 存储库中删除该文件。

我得到的最接近的答案是使用

git update-index --assume-unchanged .env
。但此命令仅适用于本地,如果其他人克隆存储库,该文件仍将被跟踪。

总而言之,我想将文件保留在存储库中,但它不应该被 Git 跟踪。

感谢任何帮助。

git github commit git-commit
1个回答
1
投票

答案是,这不是你可以用 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 .
© www.soinside.com 2019 - 2024. All rights reserved.