gpt4 book ai didi

git - 并发和多次提交 git 访问

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

并发访问单个 git 存储库似乎没有明显的方法。例如,如果一个用户想要 checkout 提交 A,而另一个提交 B,我能想到的唯一方法就是克隆。

当然这对开发来说很好 - 每个用户都期望有一个克隆 - 但我无法想象当你在服务器上使用 repo 时它会很好地工作,并希望允许用户浏览不同的提交。您在服务器端需要的克隆数量与可能存在的用户数量大致相同。

然而 Github 正是这样做的。 Github 如何做到这一点,或者其他人如何做到这一点,而不使用大量克隆,最好也没有许多 IO 昂贵的 checkout 操作?

最佳答案

对于浏览提交,您实际上并不“ checkout ”任何特定文件,您只是根据需要提取对象。这适用于 --bare 存储库,其中 没有工作目录(并且“可推送”的存储库几乎都是 --bare ).

要在 shell 中模拟它,请尝试:

git ls-tree --name-only HEAD~3
git show HEAD~3:README # assuming README is one of the listed files

如果您省略 --name-only,您将看到命名提交中每个树或 blob 的原始 SHA1 值。树是一个子目录,所以:

git ls-tree HEAD~3 xdiff/

将为您获取目录xdiff 的内容,等等。 Blob 是一个文件,因此:

git cat-file -p <sha-1>

将为您提供文件的内容(如带有适当路径的“git show”)。事实上,您也可以使用 git show 来读取目录:

git show HEAD~3:""

很像 git ls-tree --name-only HEAD~3(有一些细微差别,试试看)。

(有些树浏览器实际上运行 git 命令,有些使用各种库或其他直接访问原始存储库的方法。使用命令效率不高,但意味着您可以立即适应新格式,例如 v4 包文件格式。)

关于git - 并发和多次提交 git 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18879428/

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