无需克隆即可在git仓库中浏览和显示文件

Chr*_*lis 104 git

有没有办法在git仓库中浏览和显示文件而不先克隆它?我可以使用命令在svn中执行这些操作:

svn ls /path/to/repo 
svn cat /path/to/repo/file-in-repo

我可以使用git show但是做:

git show /path/to/repo
git show HEAD:/path/to/repo

结果

fatal: Not a git repository

jkp*_*jkp 71

您想要的命令git ls-remote允许您获取有关远程存储库的一些信息,但您无法显示历史记录或列表目录或该级别的任何内容:实质上它只允许您在非常高级别查看远程对象(您可以看到例如当前的HEAD和标签).

做你想要的唯一真正的方法(如果我理解正确)将是使用ssh运行远程命令并返回结果,例如:

ssh me@otherhost "cd repo && git log -n 10"
Run Code Online (Sandbox Code Playgroud)

你想要的是可爱的功能,如果他们可以添加它,但从我读到它不是很容易,因为获取历史记录等需要很多信息是git的本地信息,那时你也可以做一个git fetch .

  • 但是,使用`git clone`可以做的一件事就是通过传递`--depth 1`来获取单个修订版.这样可以避免获取大量的历史记录,并且足以回答诸如"修订版本中存在哪些文件`abcdef1234567890`?"之类的问题. (12认同)

Jak*_*ski 21

Git是分布式版本控制系统,而Subversion是集中式(客户端 - 服务器)版本控制系统.他们的工作不同; 习惯了.请在StackOverflow上阅读我的答案,解释这种差异对git等效svn status -u问题的影响.

重复一点:在集中式版本控制系统(如CVS或Subversion)中,几乎所有命令都在服务器上处理,并涉及网络.在本地执行的命令非常少.请注意,要获得"svn status"和"svn diff"的良好性能,Subversion会在客户端上存储已签出版本的"原始副本",而不必为这些常见操作涉及网络传输(这意味着Subversion checkout = 2 x至少工作目录的大小).

在分布式版本控制系统(如Git,Mercurial或Bazaar)中,您拥有整个存储库的本地副本(克隆),几乎所有命令都在客户端上执行.很少有命令需要网络连接到其他存储库(到服务器).

您可以在服务器上执行的命令数量有限.

  • 您可以使用" git ls-remote <URL>" 列出远程的所有引用.
  • 您可以使用
    " git archive --remote = <URL> HEAD" 获取存储库(部分)的快照(如果远程服务器已启用它).
  • 您只能使用
    " git clone --depth = 1 <URL>" 克隆一些最后提交(所谓的"浅层克隆").
  • 如果服务器向存储库提供git web界面,则可以使用它进行浏览.

  • 如果你正在浏览远程仓库而没有先克隆它,那么显然你已经决定放弃git的离线功能了.鉴于此,我认为没有理由假装这对某些事情不是一个有用的功能,例如,本地客户端允许您在本地浏览远程仓库的文件内容. (34认同)
  • 同意,Jakub采取的立场是高度限制性的.值得失去的声誉不止一次指出这一点. (11认同)
  • 我不喜欢"习惯于那种"的语气.但是当我读到最后我找到了解决当前问题的方法时 - 看到110存储库中的内容我有一个git,但没有ssh或shell访问权限,哪些是所有可能都很大,大约12GB左右.因此,具有最小化深度的克隆至少有助于仅查看最近有趣的历史.并使git repo尽可能小. (7认同)
  • 在代码审查工具的情况下,这样的功能将是很好的,你不需要整个仓库只需更改日志就足够了. (2认同)
  • @Henning,没错,我猜你可以称它为“git used to that”的语气,哈哈 (2认同)
  • 想象一下,为基于 Yocto 的项目创建一个发行说明/变更日志文档。你在你的 `git log` 中看到的是很多“颠簸版本”提交,如果你想知道实际发生了什么变化,使用这种“习惯这种”方法,你必须去克隆每个通常只有在构建服务器上被克隆。不是很方便,你知道的。因此,如果 git server 可以执行 `log` 或获取单个文件,那真的会很有帮助。特别是考虑到除了“习惯它”的态度之外,没有什么能真正阻止它这样做。 (2认同)

Jer*_*aum 16

请查看http://git-scm.com/book/en/Git-Internals-Transfer-Protocols,了解有关如何通过某些传输协议执行此操作的信息.请注意,这不适用于SSH上的标准git.

对于通过SSH的git,最新的服务器端git应该允许你直接从远程git-archive,然后你可以管道到"tar t"获取给定提交中所有文件的列表.


fel*_*ela 10

GitHub兼容svn,因此您可以使用svn ls

svn ls https://github.com/user/repository.git/branches/master/
Run Code Online (Sandbox Code Playgroud)

BitBucket支持git存档,因此您可以下载tar存档并列出存档文件.效率不高但有效:

git archive --remote=git@bitbucket.org:repository HEAD directory | tar -t
Run Code Online (Sandbox Code Playgroud)

  • 不要把Git和GitHub混淆:) (5认同)

Ros*_* II 10

虽然您必须签出存储库,但您可以使用--no-checkout和跳过签出任何文件--depth 1

$ time git clone --no-checkout --depth 1 https://github.com/torvalds/linux .
Cloning into '.'...
remote: Enumerating objects: 75646, done.
remote: Counting objects: 100% (75646/75646), done.
remote: Compressing objects: 100% (71197/71197), done.
remote: Total 75646 (delta 6176), reused 22237 (delta 3672), pack-reused 0
Receiving objects: 100% (75646/75646), 201.46 MiB | 7.27 MiB/s, done.
Resolving deltas: 100% (6176/6176), done.

real    0m46.117s
user    0m13.412s
sys     0m19.641s
Run Code Online (Sandbox Code Playgroud)

虽然只有一个.git目录:

$ ls -al
total 0
drwxr-xr-x   3 root  staff    96 Dec 26 23:57 .
drwxr-xr-x+ 71 root  staff  2272 Dec 27 00:03 ..
drwxr-xr-x  12 root  staff   384 Dec 26 23:58 .git
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式获取目录列表:

$ git ls-tree --full-name --name-only -r HEAD | head
.clang-format
.cocciconfig
.get_maintainer.ignore
.gitattributes
.gitignore
.mailmap
COPYING
CREDITS
Documentation/.gitignore
Documentation/ABI/README
Run Code Online (Sandbox Code Playgroud)

或通过以下方式获取文件数量:

$ git ls-tree -r HEAD | wc -l
   71259
Run Code Online (Sandbox Code Playgroud)

或通过以下方式获取总文件大小:

$ git ls-tree -l -r HEAD | awk '/^[^-]/ {s+=$4} END {print s}'
1006679487
Run Code Online (Sandbox Code Playgroud)

  • 这项技术的一个有趣的怪癖是:“git status”报告存储库中的所有文件都已被删除。使用 GUI 工具时,请注意它们可能会暂时锁定大型存储库! (2认同)

小智 6

不是确切的,而是一种方法。

使用 GitHub 开发者 API

  1. 打开它会给你最近的提交。

    https://api.github.com/repos/learningequality/ka-lite/commits

    您可以通过在上述 url 的末尾附加提交哈希来获取特定的提交详细信息。

  2. 所有文件(主树需要 sha)

    https://api.github.com/repos/learningequality/ka-lite/git/trees/7b698a988683b161bdcd48a949b01e2b336b4c01

我希望这可能会有所帮助。

  • 不要将 Git 与 GitHub 混淆 - 我相信最初的问题是关于 Git 本身的。Git 安装/托管 (GitHub/BitBucket/Stash) 对浏览器存储库有多种可能性。 (18认同)