是否可以根据环境变量更改.gitignore

时间:2013-07-14 14:14:09

标签: linux git gitignore gitattributes

是否可以添加.gitignore规则取决于环境变量?

例如

if -e $(ENV_VAR) "AAA"
!liba.so
else
liba.so

基本上我想要的是拥有一个存储库,使if ENV_VAR = "AAA"本地存储库具有a.txt,如果未设置ENV_VAR,则将删除a.txt。

3 个答案:

答案 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
    ...