浏览和显示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

导致

致命的:不是一个混帐存储库

你想要的命令是git ls-remote ,它允许你获得关于远程仓库的一些信息,但是你不能显示历史或者列表目录或者这个级别的任何东西:本质上,它只允许你看到远程对象在一个非常高级的例如,您可以看到当前的HEAD和标签)。

唯一真正的做法就是使用ssh来运行远程命令并返回结果,例如:

 ssh me@otherhost "cd repo && git log -n 10" 

如果可以添加它,你想要的将是可爱的function,但是从我读的内容来看,这并不是很容易,因为获取历史logging等需要大量的信息是git本地的,在这一点上,你也可以做一个git fetch 。

看看http://git-scm.com/book/en/Git-Internals-Transfer-Protocols ,了解如何通过一些传输协议做到这一点。 注意这不适用于通过SSH的标准git。

对于通过SSH的git,最新的服务器端git应该允许你直接从远程进行git-archive,然后你可以通过pipe道“tar t”来获得给定提交中所有文件的列表。

Git是分布式版本控制系统,而Subversion则是集中式 (客户端 – 服务器)版本控制系统。 他们工作不同, 习惯了。 请阅读我的答案,解释这种差异的后果,以git相当于svn status -u问题在StackOverflow。

重复一下自己:在集中版本控制系统(如CVS或Subversion)中, 几乎所有的命令都在服务器上处理 ,并涉及到networking。 很less的命令在本地执行。 请注意,要获得“svn status”和“svn diff”的良好性能,Subversion会在客户端存储“检出版本”的“原始副本”,而不必为这些常见操作涉及networking传输(这意味着Subversion检出= 2 x工作目录的大小至less)。

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

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

  • 您可以使用“ git ls-remote <URL>” 列出远程的所有引用。
  • 您可以获取(部分)存储库(如果远程服务器启用它)的快照
    “ git archive –remote = <URL> HEAD”。
  • 你可以克隆只有最后几个提交(所谓的“浅克隆”)
    “ git clone –depth = 1 <URL>”。
  • 如果服务器将git web界面提供给存储库,则可以使用它来浏览。

GitHub是svn兼容的,所以你可以使用svn ls

 svn ls https://github.com/user/repository.git/branches/master/ 

BitBucket支持git归档,所以你可以下载tar归档文件和列表归档文件。 这不是很有效,但工作:

 git archive --remote=git@bitbucket.org:repository HEAD directory | tar -t 

不是确切的,但一个方法。

使用GitHub开发者API

  1. 打开这个会让你最近的提交。

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

    通过在上面的url的末尾附加提交哈希,你可以得到具体的提交细节。

  2. 所有的文件(你需要为主树)

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

我希望这可以帮助。

这可能被某些人认为是肮脏的,但在github仓库的情况下,一个非常实际的解决scheme只是做一个脚本,例如“git-ls”:

 #!/bin/sh remote_url=${1:? "$0 requires URL as argument"} curl -s $remote_url | grep js-directory-link | sed "s/.* title=\"\(.*\)\".*/\1/" 

使其可执行和可访问,当然: chmod a+x git-ls; sudo cp git-ls /usr/local/bin chmod a+x git-ls; sudo cp git-ls /usr/local/bin 。 现在,你只要按照你的意愿运行它:

 git-ls https://github.com/mrquincle/aim-bzr git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules 

也知道你的本地文件有一个git instaweb工具。 有能力显示文件,并有一个这样的服务器在我看来不会破坏任何固有的分散特性的git。

如果你知道你想检查的远程分支,你可以find最新的通过:

 git ls-tree -r <remote_branch> --name-only