在git add -f之后忽略修改

时间:2012-12-26 13:35:28

标签: git cakephp version-control gitignore

我只是已下载(未克隆!)CakePHP 2.2.4。 该目录包含.gitignore文件:

# only the relevant part here
/app/Config
/app/tmp

现在我执行了这些命令,因为目录(及其初始内容) Config tmp 将永远不会被提交:

git add -f Config
git add -f tmp

我对 tmp 目录没有任何问题,因为那里没有更改文件,只会创建新文件!

相反,我必须修改 Config 文件夹中的某些文件(例如数据库配置)。 但Git现在要我再次git add这些修改过的文件!

如何忽略这些修改?

我也可以重新启动整个Git仓库,因为我没有创建/修改太多。

<小时/> 我对CakePHP的修改以解决实际问题

CakePHP的新*.gitignore文件:

# removed: /app/Config/

# start edit
/app/Config/*
!/app/Config/Schema/
!/app/Config/*.default.php
# end edit

/app/tmp
/lib/Cake/Console/Templates/skel/tmp/
/plugins
/vendors
/build
/dist
.DS_Store
/tags

我还使用 .default / app / Config 中的所有文件进行了后缀:

  • acl.ini.default.php。

  • acl.default.php。

  • bootstrap.default.php。

  • core.default.php。

  • database.php.default - &gt; database.default.php

  • email.php.default - &gt; database.default.php

编辑*.default.php*.php.default更好,因为如果mod_rewrite失败,这会阻止将文件输出到浏览器(尽管这不太可能)。

1 个答案:

答案 0 :(得分:3)

Git不跟踪目录;只有文件。因此,当您运行git add -f Config时,git只是将工作树中的所有文件添加到Config下面,而不是目录本身。由于这些文件随后由Git跟踪(从而覆盖了忽略规则),因此更改它们将导致Git将工作树视为脏。

Configtmp的这些规则存在于CakePHP的.gitignore文件中,因为Git可以有效地忽略整个目录;没有必要显式创建空目录,因为CakePHP可能会自动创建它们。

如果由于某种原因你希望Git知道那里应该有一个目录,但要忽略它的内容,那么你可以在Configtmp中添加一个包含该规则的.gitignore文件*,它将告诉它忽略该目录的所有内容。但是,由于.gitignore文件存在,它将自己维护目录。


更新:如果你想在Git中存储一个基于每个工作副本的“默认”配置,你最好提交一个模板配置文件。克隆存储库并使用特定于环境的配置选项填充时,可以复制到新(已忽略)文件的不同名称。

正如我所看到的,配置文件本身不应该保持在版本控制之下,因为它们需要根据使用工作副本的环境进行定制,因此以这种方式保留模板副本似乎是自然的解决方案(这就是Wordpress的作用)。