是否可以添加到。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文件。
示例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
...
目前的答案是否定的是,但没有使用环境变量。
我的用例很简单;我希望避免意外地签入对特定文件所做的更改,这样我就可以在本地运行代码。
假设我把我的超级机密密码添加到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的问题后,我不确定这是否能满足他的要求。
答案是否定的。
Gitignore规则是完全静态的。此外,这甚至没有任何意义。一旦一个文件在repo中,gitignore就不再适用于它——它只会阻止添加新的文件。
也就是说,您可以有一个本地"gitignore":.git/info/exclude
中的任何内容也将被忽略。在我刚才解释的范围内。
这里有一个很好的解决方法https://gist.github.com/wizioo/c89847c7894ede628071
由wizioo朱利安图书馆