是否可以添加到 .gitignore 规则取决于环境变量?
例如
if -e $(ENV_VAR) "AAA"
!liba.so
else
liba.so
基本上我想要的是有一个存储库,这样if ENV_VAR = "AAA"
本地存储库就会有a.txt
,如果ENV_VAR
没有设置 a.txt 将被删除。
是否可以添加到 .gitignore 规则取决于环境变量?
例如
if -e $(ENV_VAR) "AAA"
!liba.so
else
liba.so
基本上我想要的是有一个存储库,这样if ENV_VAR = "AAA"
本地存储库就会有a.txt
,如果ENV_VAR
没有设置 a.txt 将被删除。
答案是不。Gitignore 规则是静态的。您可以通过动态创建 .gitignore 文件来扭转它。因此,您还将动态创建静态规则。
这可以在 Makefile 等应用程序构建系统中轻松完成。每次构建项目时都可以重新构建 .gitignore 文件。
示例生成文件:
all: my_app .gitignore
.gitignore: some deps
cp my_static_gitignore_rules .gitignore
echo 'dynamically_created_rule1' >> .gitignore
echo 'dynamically_created_rule2' >> .gitignore
my_app: my_app.c
...
答案是不。
Gitignore 规则是完全静态的。此外,这甚至没有任何意义。一旦文件在 repo 中,gitignore 就不再适用于它——它只会阻止添加新文件。
话虽如此,你可以有一个本地的“gitignore”:其中的任何内容.git/info/exclude
也将被忽略。在我刚才解释的范围内。
目前的答案是否定的,但不使用环境变量。
我的用例很简单;我想避免意外签入我对特定文件所做的更改,以便我可以在本地运行我的代码。
假设我将我的超级机密密码添加到src/assets/secrets.xml
文件中,以便我可以在本地运行我的代码,但我不希望我的密码泄露到 github,以便可以使用这样的工具找到它。
最初我认为有能力export GITIGNORE=path/to/that/file
在这种情况下会有所帮助。
但由于这不是一个选项,这里是如何实现相同的目标。
git update-index --assume-unchanged src/assets/secrets.xml
要撤消此效果:
git update-index --no-assume-unchanged src/assets/secrets.xml
在重新阅读了 OP 的问题几次之后,我不确定这是否会满足他的要求。