gpt4 book ai didi

git - 为什么git的设计会区分 "ignored"和 "untracked"文件?

转载 作者:太空狗 更新时间:2023-10-29 14:29:40 24 4
gpt4 key购买 nike

我了解在 git 的标准工作流程中被忽略和未跟踪的文件之间的区别,至少在操作上是这样。

我很难理解为什么 git 的设计者认为这是一个重要的区别。

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

需要说明的是:我并不是在批评 git 的设计。我确信这种被忽略/未跟踪的区别是有充分理由的。我只想从设计的角度了解其背后的基本原理。


编辑:让我这样说吧。假设那里有一个工具,我们称它为twit , 这与 git 相同在各个方面,除了它没有“未跟踪”的概念:文件可以被忽略或被跟踪。有人可以描述一个可以清楚显示 git 的场景吗?优于twit


EDIT2:现在回想起来,我意识到我的问题中隐含的假设是“充分的理由”也是“容易理解的”。然而,这个假设并不成立。有可能是twit的缺点只有在使用它一段时间后才能察觉,这些缺点会导致 twit 的用户改进成最终看起来像git的东西.

最佳答案

因为不忽略文件并不意味着“跟踪一切”:

  • 您可以增量添加和提交,以免“自动跟踪一千个文件,只是因为它们没有被忽略”
  • 您可以发现一组尚未被忽略但您应该被忽略的文件(如果它们被“自动跟踪”,那就太晚了:git rm首先。或者更糟的是,它已经被提交和推送,并且您发现其中包含敏感信息)

任何“自动”的想法都是可疑的,因为您的工作树的演变是非常动态的,并且跟踪它的过程是由反射引导的增量过程,而不是由工具引导的“自动”过程。


Suppose there was a tool out there, let's call it twit, that was identical to git in every respect except that it had no concept of "untracked"

tracked,在 git 中,意味着“自动索引(或暂存)”,如“准备提交”。
git index 背后的全部想法是允许开发人员增量 跟踪文件,或者对于文件,增量跟踪其内容 (git add --patch)< br/>所有这些都会随着“默认跟踪的所有内容”而消失。

使用“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 背后的最初目标是 merge 补丁。当您向工作树添加多个补丁时,您不想盲目地跟踪所有内容,而是慢慢添加或跟踪您需要验证的内容,一个接一个地打补丁。

关于git - 为什么git的设计会区分 "ignored"和 "untracked"文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35098593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com