Git 没有正确检测某些文件的修改?
Git does not properly detect modification of certain files?
我注意到 Git 没有正确检测到由 TI 的 Code Composer Studio (Eclipse) 生成的修改后的 .out 文件(它们已经在索引中)。在 compiling/building 之后,调用 git status
会在 changes to be committed
(已删除)和 untracked files
下显示 .out 文件,而不是在 changes not staged for commit
中。知道是什么导致某些文件变成这样吗?
这不是 GIT 的问题。按照设计,这就是它的工作原理。我 运行 测试要仔细检查,但如果:
- 文件
file.out
是树的一部分
- Something/one运行s
git rm file.out
。它必须是 git rm
,如果不进行删除,则不会重现。
- 您创建了一个同名文件。它将被列为未跟踪。
这是标准的 GIT 行为。暂存更改是 "almost" 提交的,就像重新创建以前在不同提交中删除的文件一样,将被列为新文件,因此它会在这里发生。请注意,如果删除未分阶段执行,则会发生您期望的正确行为 - git
将知道它是同一个文件。
要git
了解文件是相同的,您需要运行
git add file.out
所以 git
看到同一个文件仍然存在于暂存区,并且只列出一个 modified
已暂存以提交。它这样工作的原因是有一个额外的半提交层,你仍然可以玩和重置(就像游戏中的检查点)。
至于为什么作曲家这样做我不确定。我认为正确的行为是暂存所有文件更改,所以我不知道为什么没有将新文件添加到树中。如果这只是一个不属于源代码的日志输出,请考虑将 *.out
添加到 .gitignore
,但您必须确保 Composer 没有添加它(并绕过忽略)。
如果文件存在于当前提交中但不在索引中,则该文件的状态为 "deleted"。
如果文件存在于工作树中但不在索引中,则该文件未被跟踪。
在这种情况下,两者都是正确的:文件在当前提交中(永远冻结在那里,以及所有其他冻结到提交中的文件),不是 在索引中(因为某人或某事将其从索引中删除),并且 是 在工作树中。根据您在 中的描述,IDE 可能 运行 git rm
从索引和工作树中删除文件,或者 运行从工作树中删除文件后但在工作树中重新创建文件之前,相当于 git add -u
。
(git add
命令注意到文件从工作树中丢失,将从索引中删除 文件。随后的 git add
, 运行 当文件 是 在工作树中时,会将其复制到索引中,但是您需要 git add
的变体,它添加了一个索引中不存在的文件。)
我注意到 Git 没有正确检测到由 TI 的 Code Composer Studio (Eclipse) 生成的修改后的 .out 文件(它们已经在索引中)。在 compiling/building 之后,调用 git status
会在 changes to be committed
(已删除)和 untracked files
下显示 .out 文件,而不是在 changes not staged for commit
中。知道是什么导致某些文件变成这样吗?
这不是 GIT 的问题。按照设计,这就是它的工作原理。我 运行 测试要仔细检查,但如果:
- 文件
file.out
是树的一部分 - Something/one运行s
git rm file.out
。它必须是git rm
,如果不进行删除,则不会重现。 - 您创建了一个同名文件。它将被列为未跟踪。
这是标准的 GIT 行为。暂存更改是 "almost" 提交的,就像重新创建以前在不同提交中删除的文件一样,将被列为新文件,因此它会在这里发生。请注意,如果删除未分阶段执行,则会发生您期望的正确行为 - git
将知道它是同一个文件。
要git
了解文件是相同的,您需要运行
git add file.out
所以 git
看到同一个文件仍然存在于暂存区,并且只列出一个 modified
已暂存以提交。它这样工作的原因是有一个额外的半提交层,你仍然可以玩和重置(就像游戏中的检查点)。
至于为什么作曲家这样做我不确定。我认为正确的行为是暂存所有文件更改,所以我不知道为什么没有将新文件添加到树中。如果这只是一个不属于源代码的日志输出,请考虑将 *.out
添加到 .gitignore
,但您必须确保 Composer 没有添加它(并绕过忽略)。
如果文件存在于当前提交中但不在索引中,则该文件的状态为 "deleted"。
如果文件存在于工作树中但不在索引中,则该文件未被跟踪。
在这种情况下,两者都是正确的:文件在当前提交中(永远冻结在那里,以及所有其他冻结到提交中的文件),不是 在索引中(因为某人或某事将其从索引中删除),并且 是 在工作树中。根据您在 git rm
从索引和工作树中删除文件,或者 运行从工作树中删除文件后但在工作树中重新创建文件之前,相当于 git add -u
。
(git add
命令注意到文件从工作树中丢失,将从索引中删除 文件。随后的 git add
, 运行 当文件 是 在工作树中时,会将其复制到索引中,但是您需要 git add
的变体,它添加了一个索引中不存在的文件。)