是否可以添加.gitignore规则取决于环境变量?
例如
if -e $(ENV_VAR) "AAA"
!liba.so
else
liba.so
基本上我想要的是拥有一个存储库,使if ENV_VAR = "AAA"
本地存储库具有a.txt
,如果未设置ENV_VAR
,则将删除a.txt。
答案 0 :(得分:2)
答案是否定的。
Gitignore规则是完全静态的。更进一步甚至没有任何意义。一旦文件在repo中,gitignore就不再适用于它 - 它只会阻止添加 new 文件。
话虽如此,你可以拥有一个本地的“gitignore”:.git/info/exclude
中的任何内容也会被忽略。在我刚才解释的范围内。
答案 1 :(得分:1)
目前答案是否是,但不使用环境变量。
我的用例很简单;我想避免意外地检查我对特定文件所做的更改,以便我可以在本地运行我的代码。
假设我将我的超级密码添加到src/assets/secrets.xml
文件中,以便我可以在本地运行我的代码,但我从不希望我的密码泄漏到github,因此可以使用{{3}等工具找到它}。
最初我认为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的问题几次后,我不确定这是否能满足他的要求。
答案 2 :(得分:1)
答案是否定的。 Gitignore规则是静态的。您可以通过动态创建.gitignore文件来扭转它。因此,您还将动态创建静态规则。
这可以在应用程序构建系统(如Makefile)中轻松完成。每次构建项目时都可以重建.gitignore文件。
示例Makefile:
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
...