2014-09-25 68 views
1

第一个core.sparsecheckout设置为true空的.git/info/sparse-checkout与缺少的不同,但是相反,为什么?

而且我创建了一个空的.git/info/sparse-checkout文件。这导致我无法检出最近从远程获取的新分支。

然后我试图删除空的.git/info/sparse-checkout文件,现在我可以结帐。

我明白了事实,并且我知道我可以在.git/info/sparse-checkout中包含/*以使其正常工作。

我只是想知道为什么?这背后的理由是什么?这不是令人困惑吗?

对于我来说,一个空的sparse-checkout文件和一个缺失的文件都在说:“没有指定使用稀疏检出”,因此git应该检出所有内容。

我想我需要的是对当前选择的更有说服力的解释,而不是如何实现。

回答

1

并非如此:如果.git/info/sparse-checkout存在,那么将使用稀疏检出机制,并查找要检出的文件/文件夹。
unpack-trees.c

if (!o->skip_sparse_checkout) { 
    if (add_excludes_from_file_to_list(
      git_path("info/sparse-checkout"), "", 0, &el, 0) < 0) 

如果找到任何文件/文件夹结账(因为.git/info/sparse-checkout是空的),它检查出来什么都没有。

但是,如果.git/info/sparse-checkout不在首位,那么这根本不是一个稀疏的结帐,而Git会检查所有内容。

+0

谢谢。我想我明白这是如何实施的,但我的问题/关注更多的是理性。对我来说,更自然的说,一个空的'sparse-checkout'文件和一个丢失的文件都会说:“没有指定用于稀疏结帐的东西”,那么我希望两者都能*检查所有内容*。现在我必须记住,缺少'sparse-checkout'文件的默认设置是'/ *',但不是空的,因为'core.sparsecheckout'为true – ryenus 2014-09-25 12:34:13

+0

@ryenus我明白,但在这里, '.git/info/sparse-checkout'的存在确实不*意味着“没有任何东西被指定为使用稀疏检出”(因为它目前已经实现) – VonC 2014-09-25 12:35:38

相关问题