我刚刚下载(不是克隆!)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
我还在 /app/Config 中的所有文件添加了 .default 后缀:
acl.ini.default.php.
acl.default.php.
bootstrap.default.php.
core.default.php.
database.php.default --> database.default.php
email.php.default --> database.default.php
编辑 *.default.php
比 *.php.default
更好,因为这样可以防止将文件输出到浏览器如果 mod_rewrite
失败(尽管这种可能性很小)。
最佳答案
Git 不跟踪目录;只有文件。所以当你运行 git add -f Config
, git 只是将所有文件添加到 Config
下面的工作树中,而不是目录本身。由于这些文件随后会被 Git 跟踪(从而覆盖忽略规则),更改它们将导致 Git 认为工作树是脏的。
Config
的这些规则和 tmp
存在于 CakePHP 的 .gitignore 文件中,因为 Git 可以有效地忽略整个目录;无需显式创建空目录,因为 CakePHP 可能会自动创建它们。
如果出于某种原因你想让 Git 知道那里应该有一个目录,但忽略它的内容,那么你可以在 Config
中添加一个 .gitignore 文件。和 tmp
包含规则 *
,这将告诉它忽略该目录中的所有内容。但是,由于 .gitignore 文件在那里,它会维护目录本身。
更新:如果您想在 Git 中存储一个“默认”配置,并根据每个工作副本进行自定义,您最好在当克隆存储库并使用特定于环境的配置选项填充时,可以将不同的名称复制到新的(忽略的)文件中。
在我看来,配置文件本身不应该保存在版本控制之下,因为它们需要根据使用工作副本的环境进行定制,因此以这种方式保存模板副本似乎是自然的解决方案(这就是 Wordpress 所做的)。
关于git - git add -f 后忽略修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14041338/