我是git用户,这里是使用ssh协议的git clone。
当我通过SSH协议使用git操作时,我有以下问题。
例如git clone
的命令:git clone ssh://git@<serverurl>:7999/text/large_files.git
在此克隆操作期间,SSH请求是有状态的或无状态的。
我已启用git LFS来获取大文件,但LFS文件通过https传输。如果我的git clone涉及LFS文件,那么我的git clone命令将调用https请求。在这种情况下,主会话git clone ssh://...
仍处于活动状态并保持会话状态信息吗?
作为Joachim Sauer points out in a comment,SSH本身显然(非常)有状态。但这无关紧要。您的问题假设Git-LFS在克隆操作中执行其特殊技巧。它不会这样做。Git-LFS的工作方式是用Git-LFS从第三方位置访问原始文件数据的数据替换“大”文件的存储Git对象数据( blob
smudge filter
用实际数据替换访问数据(所有Git已存储)。 Git从来没有看到过真实的数据:它只存在于工作树和第三方位置。 Git仅看到Git-LFS干净过滤器生成的替代访问信息(请参阅下面的步骤2)。干净过滤器
git checkout
通过工作树将文件to
git add
将工作树文件复制回到索引中时,就会发生步骤2。还有一些极端的情况可以调用步骤1和/或2,但这是主要的两个。因此,当您执行git clone
操作时,通过SSH连接传输的全部是Git
数据:进入Git存储库的commit,tree,blob和带注释标签的对象, Git用于跟踪这些对象的其他数据,以所谓的smart protocol编码。此连接被关闭之前 Git运行git checkout
。已关闭ssh连接,Git现在运行git checkout
。这会在任何Git-LFS文件上运行污迹过滤器;必要时,Git-LFS中的污迹过滤器会在此时打开与第三方存储设施的https连接。