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

标签 git github

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

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

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

最佳答案

对于浏览提交,您实际上并不“ checkout ”任何特定文件,您只是根据需要提取对象。这适用于 --bare 存储库,其中没有工作目录(并且“push”可用存储库几乎都是 --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/

相关文章:

git - 如何为子模块设置 git core.autocrlf

javascript - 如何在 npm 安装期间将 fork 的存储库更新为依赖项?

Github操作: Using mysql service throws access denied for user 'root' @'localhost'

github - 在推送时自动将 Gitlab 存储库镜像到 Github

android - 开源一个 android studio 库项目并允许其他人作为 gradle 依赖项包含在内

git - 使用 Git 将多个项目部署到服务器的最佳方法是什么?

git - 回到 Github Desktop 中的上一个提交

php - 如何让 Composer 从 GitHub 下载 master 分支中的最新提交以获取包?

git - 有没有办法共享一个 git Remote ?

git - 如何在 GitHub 上设置私有(private) Git 存储库?有可能吗?