我只是已下载(未克隆!)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
失败,这会阻止将文件输出到浏览器(尽管这不太可能)。
答案 0 :(得分:3)
Git不跟踪目录;只有文件。因此,当您运行git add -f Config
时,git只是将工作树中的所有文件添加到Config
下面,而不是目录本身。由于这些文件随后由Git跟踪(从而覆盖了忽略规则),因此更改它们将导致Git将工作树视为脏。
Config
和tmp
的这些规则存在于CakePHP的.gitignore文件中,因为Git可以有效地忽略整个目录;没有必要显式创建空目录,因为CakePHP可能会自动创建它们。
如果由于某种原因你希望Git知道那里应该有一个目录,但要忽略它的内容,那么你可以在Config
和tmp
中添加一个包含该规则的.gitignore文件*
,它将告诉它忽略该目录的所有内容。但是,由于.gitignore文件存在,它将自己维护目录。
更新:如果你想在Git中存储一个基于每个工作副本的“默认”配置,你最好提交一个模板配置文件。克隆存储库并使用特定于环境的配置选项填充时,可以复制到新(已忽略)文件的不同名称。
正如我所看到的,配置文件本身不应该保持在版本控制之下,因为它们需要根据使用工作副本的环境进行定制,因此以这种方式保留模板副本似乎是自然的解决方案(这就是Wordpress的作用)。