为什么git的设计区分"忽略"和"未跟踪"文件?

kjo*_*kjo 2 git

我理解忽略和未跟踪文件之间的区别,至少在操作上,在git的标准工作流程中.

我很难理解为什么git的设计师觉得这是一个重要的区别.

IOW,为什么他们不去自动跟踪未被.gitignore.git/info/exclude或全局excludesfile规则排除的每个文件?

需要明确的是:我不是在批评git的设计.我确信这是一个非常好的理由,这个被忽视/未跟踪的区别.从设计的角度来看,我只想了解其背后的基本原理.


编辑:让我这样说吧.假设那里有一个工具,让我们称之为twit,git除了它没有"未跟踪"的概念之外,它在各方面都是相同的:文件可以被忽略或跟踪.有人可以形容一个能够清楚显示出git优势的场景twit吗?


EDIT2:我现在意识到,回想起来,在我的问题中隐含的假设"好理由"也是"易于理解"的.然而,这种假设并没有成功.有可能twit只有在使用它一段时间之后才能感知到缺点,这些缺点会导致用户twit改进到最终看起来像的东西git.

Von*_*onC 6

因为不忽略文件并不意味着"跟踪所有内容":

  • 你可以增量添加和提交,以便不"自动跟踪一千个文件,只是因为它们不被忽略
  • 你可以发现一些尚未被忽略但尚未被忽略的文件(如果它们已被"自动跟踪",那将是迟到的:git rm首先.或者更糟糕的是,它已经被提交并推送,你发现它有敏感的信息在他们中)

任何"自动"都是一个可疑的想法,因为你的工作树的演变是非常动态的,跟踪它的过程是由反射引导的增量过程,而不是由工具引导的"自动"过程.


假设那里有一个工具,我们称它为twit,除了没有"未跟踪"的概念外,在各方面都与git相同.

在git中,跟踪将暗示"自动索引(或暂存)",如"准备好承诺".
而git索引背后的所有想法是允许开发人员逐步跟踪文件,或者对于文件,以增量方式跟踪其内容(git add --patch)
所有这些都会在窗口外显示"默认情况下跟踪的所有内容".

请参阅" 为什么登台目录也称为索引/ Git索引? ".

请注意,之前已经考虑过" 重新发明git接口 ",默认情况下会对所有内容进行暂存/跟踪.

但是,正如2010年的文章" 你本可以发明git(也许你已经拥有!) " 所证明的那样,git背后的最初目标是合并补丁.当您向工作树添加多个修补程序时,您不希望盲目跟踪所有内容,而是要慢慢添加或跟踪需要验证的内容,修补后修补.