忽略git add -f之后的修改。

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 repo,因为我没有创建/修改太多文件。


我为解决实际问题所作的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失败时将文件输出到浏览器(尽管这是不太可能发生的情况)。

1个回答

3
Git不跟踪目录,只跟踪文件。因此,当您运行git add -f Config时,Git仅添加在工作树中Config下的所有文件,而不是目录本身。由于这些文件随后由Git跟踪(覆盖了忽略规则),更改它们将导致Git认为工作树是脏的。
CakePHP的.gitignore文件中存在对Configtmp的规则,因为整个目录可以被Git有效地忽略;没有必要显式创建空目录,因为CakePHP可能会自动创建它们。
如果出于某种原因,您希望Git知道应该有一个目录存在,但要忽略其内容,则可以在Configtmp内部添加一个.gitignore文件,其中包含规则*,告诉Git忽略该目录中的所有内容。但是,由于已经有.gitignore文件,它将保留目录本身。
更新:如果您想在Git中存储“默认”配置,以便按每个工作副本定制,那么最好是提交一个模板配置文件,使用不同的名称,并将其复制到新的(被忽略的)文件中,当克隆并用环境特定的配置选项填充存储库时。
据我看来,应该不将配置文件本身保存在版本控制下,因为它们需要根据工作副本使用的环境进行定制,因此以这种方式保留模板副本似乎是自然的解决方案(这就是WordPress的做法)。

不幸的是,CakePHP不会创建必要的tmp目录和配置文件。有没有办法告诉Git应该提交这些文件一次,并忽略任何进一步的文件更改? - ComFreek
据我所知,没有这样的功能。你为什么要这样做? - Will Vousden
问题在于,如果有人克隆我的仓库,他不会得到Config目录,因此他必须从另一个源中复制并粘贴必要的文件。但与此同时,我不想将我对所有文件的个人/本地更改提交。我在 SO 上找到了 git update-index --assume-unchanged答案链接),这是我正在寻找的吗? - ComFreek
感谢您的更新,这让我找到了正确的*.gitignore和文件名修改!我已经将它们包含在问题正文中。 - ComFreek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接