是否可以根据环境变量使.gitignore可配置



是否可以添加到。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朱利安图书馆

最新更新