并发和多次提交git访问

时间:2013-09-18 18:15:29

标签: git github

对于单个git仓库的并发访问似乎没有明显的方法。例如,如果一个用户想要签出提交A,另一个提交B,那么我能想到的唯一方法就是克隆。

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

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

2 个答案:

答案 0 :(得分:3)

对于浏览提交,您实际上并没有“签出”任何特定文件,您只需根据需要提取对象。这适用于--bare repo,其中 没有工作目录(并且“push”-able repos几乎都是--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命令,有些使用各种库或其他直接访问raw-repo方法。使用命令效率不高但意味着你可以立即适应新格式,例如v4包文件格式。)

答案 1 :(得分:0)

如果您想拥有多个可浏览的源树,则无法在工作目录的命令行上执行此操作。

但您可以使用:

调用gitk

$ gitk --all

显示所有分支。然后,您可以浏览其中的提交和文件。但是如果你通过ssh在服务器上访问它,你也需要隧道X.

但如果您可以安装不是“默认git”的内容,请查看GitList

相关问题