我理解git标准工作流中忽略的文件和未跟踪的文件之间的区别,至少在操作上是这样。
我很难理解为什么git的设计者认为这是一个重要的区别。
嘿,为什么他们不去自动跟踪每个未被.gitignore.git/info/exclude或全局excludesfile规则排除的文件呢?
只想说清楚:我不是在批评吉特的设计。我肯定有一个很好的理由来解释这种被忽视/未被追踪的区别。我只想从设计的角度理解它背后的原理。
编辑:我这么说吧。假设有一个工具,我们称之为twit,它在各个方面都与git相同,只是它没有“未跟踪”的概念:一个文件可以被忽略或跟踪。有人能描述一个能清楚地显示出git优于twit的场景吗?
edit2:现在回想起来,我的问题中隐含的一个假设是,一个“好的理由”也是一个“容易理解的理由”。然而,这种假设是站不住脚的。twit的缺点可能只有在使用一段时间后才能被察觉,而这些缺点将导致twit的用户改进为最终看起来像git的东西。

最佳答案

因为不忽略文件并不意味着“跟踪所有内容”:
您可以增量地添加和提交,以避免“自动跟踪一千个文件,因为它们不会被忽略”
您可以发现一组尚未被忽略的文件,但您应该(如果这些文件已被“自动跟踪”,则会延迟到:git rm第一个。或者更糟的是,它已经被提交和推送,而你发现其中包含敏感信息)
任何“自动”都是一个可疑的想法,因为你的工作树的进化是非常动态的,并且跟踪它的过程是一个由反射来引导的增量的过程,而不是由工具引导的“自动”过程。
假设有一个工具,我们称之为twit,它在各个方面都与git相同,只是它没有“未跟踪”的概念
在git中,tracked意味着“自动索引(或分段)”,如“准备提交”。
git索引背后的全部思想是允许开发人员以增量方式跟踪文件,或者对于文件,以增量方式跟踪其内容(git add --patch
所有这些都会被“默认跟踪”。
使用“Why staging directory is also called Index/Git Index?”查看更多信息。
注意,以前有人认为“re-invent the git interface”,默认情况下,所有内容都是分段/跟踪的。
但是,正如2010年的文章“You could have invented git (and maybe you already have!)”所示,git背后的最初目标是合并补丁。当您向工作树中添加多个修补程序时,您不想盲目地跟踪所有内容,而是要慢慢地添加或跟踪需要验证的内容,一个接一个地进行修补。

关于git - git的设计为什么要区分“忽略”和“未跟踪”文件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35098593/

10-14 16:18
查看更多