从Git服务器访问仓库文件

6

我需要访问存储在Git仓库中的一些文件,但我不知道它们存储在仓库文件夹的哪个位置。

是否有一种特殊的方法可以访问从客户端推送的各种文件?

3个回答

6
如果这是一个裸库,你在repo.git文件夹中找不到这些文件。
详见“关于裸库的所有信息”:裸库没有工作树,用于推送(因为没有工作树来保持与更新分支同步)。
最简单的方法是克隆该裸库来查看这些文件:
git clone /path/to/repo.git /path/to/repo

如果你只克隆它,每次提交后如何让它更新? - zero8
如果您进行了新的提交,可以将其推送回该裸存储库,这将更新它。 - VonC
我现在明白了,谢谢。我已经添加了一个钩子(post-receive)来拉取最新的提交(commit)。由于之前使用的是svn,现在正在设置git服务器。谢谢(=@vonC)。 - zero8
@zero8 做得好!我在 https://dev59.com/C6jka4cB1Zd3GeqPBqLI#48577475 中使用了类似的解决方案。 - VonC

5

我知道一种“hack-ish”的方法可以在不克隆的情况下查看裸仓库中的文件列表:

GIT_DIR=/path/to/bare.git git log --pretty=format: --name-only --diff-filter=A

您很可能需要对输出进行排序并排除空行:
GIT_DIR=/path/to/bare.git git log --pretty=format: --name-only --diff-filter=A | sort | grep .

查看文件内容相对简单:

GIT_DIR=/path/to/bare.git git show HEAD:path/to/file

如果您只想获取裸库中的特定文件而不是整个仓库,您可以将 git show 的输出重定向到一个文件。

顺便说一下,GIT_DIR=... git cmd 等同于 git --git-dir=... cmd


2
+1. 如果只有列表很重要,这可以避免克隆存储库的需要。 - VonC

1
Git 仓库通常作为裸仓库存储在服务器上。这实际上是正常的 .git 目录的内容,不包括提取的工作副本。
为了访问存储在此类仓库中的文件,我建议克隆仓库。如果您想从服务器上进行此操作,可以执行以下操作:`git clone file /path/to/bare/repository /path/to/clone`。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接