3

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

例如

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

基本上我想要的是有一个存储库,这样if ENV_VAR = "AAA"本地存储库就会有a.txt,如果ENV_VAR没有设置 a.txt 将被删除。

4

3 回答 3

4

答案是不。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
    ...
于 2018-04-13T08:43:39.007 回答
3

答案是不。

Gitignore 规则是完全静态的。此外,这甚至没有任何意义。一旦文件在 repo 中,gitignore 就不再适用于它——它只会阻止添加文件。

话虽如此,你可以有一个本地的“gitignore”:其中的任何内容.git/info/exclude也将被忽略。在我刚才解释的范围内。

于 2013-07-14T17:35:02.463 回答
3

目前的答案是否定的,但不使用环境变量。

我的用例很简单;我想避免意外签入我对特定文件所做的更改,以便我可以在本地运行我的代码。

假设我将我的超级机密密码添加到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 的问题几次之后,我不确定这是否会满足他的要求。

于 2014-09-06T21:42:52.173 回答