gpt4 book ai didi

git - SSH 是有状态的还是无状态的?

转载 作者:行者123 更新时间:2023-12-02 14:17:20 26 4
gpt4 key购买 nike

我是 git 用户,我的上下文是使用 ssh 协议(protocol)的 git clone。

当我使用SSH协议(protocol)进行git操作时,我有以下问题。

  • git clone例如命令:git clone ssh://git@<serverurl>:7999/text/large_files.git在此克隆操作期间,SSH 请求是有状态或无状态的。
  • 我已启用 git LFS 来获取大文件,但 LFS 文件传输是通过 https 进行的。
    如果我的 git clone 涉及 LFS 文件,那么我的 git clone 命令会调用 https 请求。在这种情况下,主 session git clone ssh://...是否仍处于事件状态并维护 session 状态信息?
  • 最佳答案

    Joachim Sauer points out in a comment , SSH 本身显然是(微不足道的)有状态的。但这没关系。您的问题假设 Git-LFS 在克隆操作期间执行其特殊技巧。它不这样做。

    Git-LFS 的工作方式是将“大”文件的存储 Git 对象数据(blob 数据)替换为 Git-LFS 用于从第三方位置访问原始文件数据的数据(通过,如您所述, https)。这意味着 Git 本身永远不会看到第三方位置。 Git 不知道这种替换正在进行。

    实际替换发生在两点:

  • 当文件从 Git 的索引复制到工作树时:Git-LFS 使用涂抹过滤器将访问数据(Git 存储的所有数据)替换为真实数据。 Git 永远不会看到真实的数据:它只在工作树中,并且在第三方位置。 Git 只能看到 Git-LFS 清理过滤器产生的替代访问信息(参见下面的步骤 2)。
  • 当文件从工作树复制到索引时:Git-LFS 使用干净的过滤器将实际数据发送到第三方位置,并用替代访问信息替换它。这就是为什么 Git 永远不会看到真实数据的原因:它永远不会进入索引,并且 Git 从索引中进行新的提交。

  • 每当 Git 通过索引将文件复制到工作树时,都会执行第 1 步,通过 git checkout .每当您通过 git add 告诉 Git 将工作树文件复制回索引时,都会发生第 2 步。 .还有一些调用步骤 1 和/或 2 的极端情况,但这是主要的两个。

    因此,当您执行 git clone操作时,您通过 SSH 连接传输的只是 Git 数据:进入 Git 存储库的提交、树、blob 和带注释标签的对象,以及 Git 用于跟踪这些对象的其他数据,以编码形式在所谓的智能协议(protocol)中。此连接在 Git 运行前关闭 git checkout .

    关闭 ssh 连接后,Git 现在运行 git checkout .这将对任何 Git-LFS 文件运行涂抹过滤器; Git-LFS 中的污点过滤器此时会在必要时打开与第三方存储设施的 https 连接。

    关于git - SSH 是有状态的还是无状态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58989969/

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