77

我有一个站点,该站点有一个/sites/default/files/通常保存用户内容的目录。考虑到我不需要跟踪这些东西,我将 /sites/default/files/ 添加到我的 .gitignore 文件中。

然后我发现我还想在那个目录中保留一些主要是永久的上传。现在跟踪 /sites/default/files/ 中的所有内容并排除不需要的子目录更有意义,而不是反过来做。

问题是 Git 不会停止忽略该目录。我已从 .gitignore 中删除了指定此目录的行,它不会跟踪它。我可以选择git add /sites/default/files/ -f强制 git 跟踪目录,但我以前做过,看起来很乱。

如果 .gitignore 不再将该目录指定为忽略,为什么我必须强制 Git 开始跟踪这些文件?

4

6 回答 6

79

你已经知道该怎么做了。是的,git add -f就是这样。

如果你问为什么......这是因为 git 在assume-unchanged内部设置了一点。这一点让 git 认为文件没有被修改,所以git add不会添加它。

如果你想弄乱实现细节,你可以使用git update-index --no-assume-unchanged <file>命令。

于 2012-06-20T19:01:56.507 回答
13

我不认为 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 中设置?

于 2012-06-20T19:37:44.210 回答
10

对于后代:我的问题的答案是“仔细看”。

@twalberg 正确地指出,我在 .gitignore 文件中可能忽略了一条规则。应用 .gitignore 规则的级联方式使得排除比预期更广泛的文件变得容易。

据我所知,我对 git 工作方式所做的假设是正确的。同样,我的案例似乎不支持(或反驳)@J-16 SDiZ 关于该assume-unchanged位可能扮演什么角色的评论。

于 2012-06-22T14:52:03.830 回答
2

我们的 Drupal 站点目录中有一个非常相似的问题。问题是Drupal 发行版在更高级别的 drupal 目录中有一个 .gitignore 文件,该文件与 drupal/sites/files/* 中的任何内容匹配

于 2015-04-30T14:43:46.413 回答
0

就我而言,回购中.png.xlsx文件被忽略了。正如@doub1ejack、@J-16 SDiZ 和其他人所说,您需要使用git add -f来跟踪更改。但是,git add -f除非您明确指定文件或模式并响应为

Nothing specified, nothing added.

Maybe you wanted to say 'git add .'?

为了开始跟踪以前忽略的文件或模式:

  1. 首先,您需要通过键入将工作目录更改为存储库cd <path>
  2. 其次,您需要指定文件或模式以通过键入git add -f <file name>.extension特定文件或git add -f *.xlsx所有 excel 文件来跟踪它们。

这忽略了我的案例被忽略的文件。您还可以查看此YouTube 视频

于 2020-06-19T16:32:38.453 回答
0

如果您通过 git staging 错误地单击了忽略的选项 ion Eclipse git,那么要取回您的文件,请执行以下操作:

  1. 打开你的 git bash
  2. git status --ignored execute this cmd here your ignored file will displayed
  3. copy the path of that file
  4. git add -f <file path> [add file path after -f ]
  5. git status
  6. file will visible
于 2021-09-13T13:11:28.747 回答