我有一个网站,有一个
/sites/default/files/
目录,通常用于保存用户内容。考虑到我不需要跟踪这些东西,我将 /sites/default/files/ 添加到我的 .gitignore 文件中。
然后我发现我也想在该目录中保留一些大部分永久的上传内容。现在,跟踪 /sites/default/files/ 中的所有内容并排除不需要的子目录更有意义,而不是相反。
问题是 Git 不会停止忽略该目录。我已从 .gitignore 中删除了指定此目录的行,并且它不会跟踪它。我可以选择使用
git add /sites/default/files/ -f
来强制 git 跟踪目录,但我之前已经这样做过,而且看起来很混乱。
如果 .gitignore 不再指定该目录被忽略,为什么我必须强制 Git 开始跟踪这些文件?
你已经知道怎么做了。是的,
git add -f
就是这样。
如果你问为什么......这是因为 git 在内部设置了一个
assume-unchanged
位。这一点让 git 认为该文件没有被修改,所以 git add
不会添加它。
如果你想搞乱实现细节,你可以使用
git update-index --no-assume-unchanged <file>
命令。
我不认为J-16是正确的。来自 http://www.kernel.org/pub/software/scm/git/docs/git-add.html:
git add 命令默认不会添加忽略的文件。如果在命令行上显式指定了任何被忽略的文件,则 git add 将失败并显示被忽略文件的列表。通过目录递归或 Git 执行的文件名通配符(在 shell 之前引用您的通配符)到达的被忽略的文件将被默默地忽略。 git add 命令可用于通过 -f(强制)选项添加忽略的文件。
git add -f
似乎只用于添加一个文件,该文件确实存在于某个忽略文件中。
也许 /sites 或 /sites/default 中还有另一个 .gitignore 文件,它也告诉 Git 忽略这个目录,或者它可能已在 .git/info/exclude 中设置?
对于后代:我的问题的答案是“仔细看看”。
@twalberg 正确地指出,.gitignore 文件中可能存在我忽略的规则。应用 .gitignore 规则的级联方式可以轻松排除比预期更广泛的文件。
据我所知,我对 git 工作原理所做的假设是正确的。同样,我的案例似乎并不支持(或反驳)@J-16 SDiZ 关于
assume-unchanged
位可能发挥什么作用的评论。
我们的 Drupal 站点目录中也遇到了非常相似的问题。问题是 Drupal 发行版 在更高级别的 drupal 目录中有一个 .gitignore 文件,该文件与 drupal/sites/files/* 中的任何内容匹配
git status --ignored
在此处执行此命令,您忽略的文件将显示
git add -f <file path>
[-f 之后添加文件路径]
git status
.png
和
.xlsx
文件。正如 @doub1ejack、@J-16 SDiZ 和其他人所述,您需要使用
git add -f
来跟踪更改。但是,除非您明确指定文件或模式并响应为,否则
git add -f
不起作用
Nothing specified, nothing added.
Maybe you wanted to say 'git add .'?
cd <path>
将工作目录更改为存储库。
git add -f <file name>.extension
,或为所有 Excel 文件输入
git add -f *.xlsx
。
YouTube 视频。