忽略git add-f之后的修改

忽略git add-f之后的修改,git,cakephp,version-control,gitignore,Git,Cakephp,Version Control,Gitignore,我刚刚下载了(不是克隆的!)CakePHP2.2.4。 该目录包含一个.gitignore文件: # only the relevant part here /app/Config /app/tmp 现在我执行了这些命令,因为目录(及其初始内容)Config和tmp将永远不会被提交: git add -f Config git add -f tmp 我没有tmp目录的问题,因为那里没有文件被更改,只有新文件将被创建 相比之下,我不得不修改Config文件夹中的一些文件(例如数据库配置)。 但

我刚刚下载了(不是克隆的!)CakePHP2.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回购,因为我没有创建/修改太多


我对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考虑工作树脏。 CakePHP的.gitignore文件中存在
Config
tmp
的这些规则,因为Git可以有效地忽略整个目录;无需显式创建空目录,因为CakePHP可能会自动创建它们

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


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


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

不幸的是,CakePHP不创建基本的tmp目录和配置文件。是否没有办法告诉Git应该提交这些文件一次,并且应该忽略任何进一步的文件更改?据我所知不是这样。为什么要这样做?问题是,如果有人要克隆我的repo,他将无法获得配置目录,因此他必须从另一个源复制和粘贴基本文件。但同时,我不想将我的个人/本地更改提交给所有文件。我发现了
git更新索引——假设这里没有更改
,那么(),这就是我要找的吗?感谢更新,它让我找到了正确的*.gitignore和文件名修改!我已经把它们包括在问题主体中。