3

我刚刚下载(不是克隆!)CakePHP 2.2.4。该目录包含一个.gitignore文件:

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

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

git add -f Config
git add -f tmp

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

相比之下,我不得不修改Config文件夹中的一些文件(例如数据库配置)。但是 Git 现在又要我再git add修改这些文件了!

我怎样才能忽略这些修改?

我也可以重新初始化整个 Git 存储库,因为我没有创建/修改太多。


我对 CakePHP 的修改以解决实际问题

*.gitignore的 CakePHP 新文件:

# 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。

  • 核心.default.php。

  • 数据库.php.default --> 数据库.default.php

  • email.php.default --> database.default.php

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

4

1 回答 1

3

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

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

如果出于某种原因您希望 Git 知道那里应该有一个目录,但要忽略它的内容,那么您可以在其中添加一个 .gitignore 文件Configtmp包含 rule *,这将告诉它忽略该目录之外的所有内容。但是,由于 .gitignore 文件在那里,它将维护目录本身。


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

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

于 2012-12-26T14:11:50.627 回答