为什么在稀疏结账后调用`git read-tree`

时间:2015-02-27 08:54:45

标签: git sparse-checkout

根据Subdirectory Checkouts with git sparse-checkout,在已经存在的存储库的情况下配置稀疏结账后,一个调用git read-tree -mu HEAD,即:

# Enable sparse-checkout:
git config core.sparsecheckout true

# Configure sparse-checkout 
echo some/dir/ >> .git/info/sparse-checkout
echo another/sub/tree >> .git/info/sparse-checkout

# Update your working tree:
git read-tree -mu HEAD
  • 您能否详细解释read-tree步骤?
  • 它是如何运作的?
  • 发生了什么事?
  • 为什么使用read-tree而不是checkout
  • 为什么使用-mu(为什么这是合并,以及合并的内容)?
  

-m

    Perform a merge, not just a read. The command will refuse to run if
    your index file has unmerged entries, indicating that you have not
    finished previous merge you started.
     

-u

    After a successful merge, update the files in the work tree with the
    result of the merge.

1 个答案:

答案 0 :(得分:1)

使用Git 2.25(2020年第一季度),稀疏签出工作树的管理获得了专用的“稀疏签出”命令。
它引入了圆锥模式(我在“ Git sparse checkout with exclusion”中有详细介绍),这将使sparse-checkout必须更快。

但是它也间接描述了为什么使用git read-tree -mu HEAD(或者,在新的“圆锥”模式下,使用了 )。

请参见commit e6152e3Jeff Hostetler (Jeff-Hostetler)(2019年11月21日)。
请参见commit 761e3d2Ed Maste (emaste)(2019年12月20日)。
请参见commit 190a65f(2019年12月13日)和commit cff4e91commit 416adc8commit f75a69fcommit fb10ca5commit 99dfa6fcommit e091228,{ {3}},commit e9de487commit 4dcd4decommit eb42feccommit af09ce2commit 96cc8abcommit 879321ecommit 72918c1,{{3 }},commit 7bffca9commit f6039a9commit d89f09c(2019年11月21日)由commit bab3c35
(由commit 94c0956Derrick Stolee (derrickstolee)中合并,2019年12月25日)

  

Junio C Hamano -- gitster --:正在更新工作目录

     

签名人:Derrick Stolee

     

内置的稀疏签出使用'git read-tree -mu HEAD'来更新索引中的skip-worktree位并更新工作目录。
  这个额外的过程过于复杂,容易失败。它还要求我们在尝试更新索引之前将更改写入稀疏签出文件。

     

通过创建对unpack_trees()的直接调用来删除此额外的过程调用。
  另外,提供一个内存中的模式列表,这样我们就可以避免从稀疏签出文件中读取内容。这使我们能够在写入文件之前测试对文件的建议更改。

     

此修补程序的较早版本包含一个错误,因为“稀疏检出在工作目录上没有任何条目”错误导致“ git read-tree -mu HEAD”命令失败。
  它不会回滚set文件,因此重播旧的稀疏检出规范将失败。现在,t1091中的测试涵盖了该情况。