我理解git标准工作流中忽略和未跟踪文件之间的区别,至少操作。
我很难理解为什么git的设计师觉得这是一个重要的区别。
IOW,为什么他们不会自动跟踪未被.gitignore
或.git/info/exclude
或全球excludesfile
规则排除的每个文件?
请注意:我不是在批评git的设计。我确信这是一个非常好的理由,这个被忽视/未跟踪的区别。从设计的角度来看,我只想了解其背后的基本原理。
编辑:让我这样说吧。假设有一个工具,我们称之为twit
,除了没有“未跟踪”的概念外,它与git
完全相同:文件可以被忽略或跟踪。有人可以描述一个能够清晰显示git
优于twit
的情景吗?
EDIT2:我现在意识到,回想起来,我的问题隐含的假设是“好理由”也是“易于理解”的。然而,这种假设并没有成功。有twit
的缺点可能只有在使用它一段时间后才能被察觉,这些缺点会导致twit
的用户改进到最终看起来像git
的东西。 {1}}。
答案 0 :(得分:6)
因为不忽略文件并不意味着“跟踪所有内容”:
git rm
。或者更糟,它已经被提交并推送,你发现它中有敏感信息)任何“自动”都是一个可疑的想法,因为你的工作树的演变是非常动态的,跟踪它的过程是由反射引导的增量过程,而不是由工具引导的“自动”过程。
假设那里有一个工具,我们称它为twit,除了没有“未跟踪”的概念外,在各个方面都与git相同
跟踪,在git中,暗示“自动索引(或暂存)”,如“准备好提交”。
git index背后的所有想法是允许开发人员增量跟踪文件,或者对于文件,逐步跟踪其内容(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背后的最初目标是合并补丁。当您向工作树添加多个修补程序时,您不希望盲目地跟踪所有内容,而是要慢慢添加或跟踪需要验证的内容,修补后修补。