git - git add -f 后忽略修改

标签 git cakephp version-control gitignore

我刚刚下载(不是克隆!)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的修改

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/

相关文章:

php - 使用 CakePHP 3 进行 i18n 翻译

version-control - 在 TFS 2010 中分支并被迫重新下载代码

php - 大文件解析导入 PHP MySQL

php - 如何更改 Cakephp 中的 Session cookie 值

git - 通过直接从 master pull ,使 git 功能分支与 master 分支保持最新

git - 从 TFS 克隆所有远程存储库

svn - 用于 Tortoise 客户端的 Windows Subversion 服务器 (SVN)

version-control - 从本地到中央存储库的 Mercurial 提交消息

Git 还原错误消息?

git - 从 git commit 中删除大文件