在git repo中浏览和显示文件而不进行克隆

在git repo中浏览和显示文件而不进行克隆,git,Git,有没有一种方法可以在git repo中浏览和显示文件,而不用先克隆它?我可以使用以下命令在svn中执行这些操作: svn ls /path/to/repo svn cat /path/to/repo/file-in-repo svn ls/path/to/repo svn目录/path/to/repo/repo中的文件 我可以使用git show,但要做到: git show /path/to/repo git show HEAD:/path/to/repo git show/path/to/

有没有一种方法可以在git repo中浏览和显示文件,而不用先克隆它?我可以使用以下命令在svn中执行这些操作:

svn ls /path/to/repo svn cat /path/to/repo/file-in-repo svn ls/path/to/repo svn目录/path/to/repo/repo中的文件 我可以使用git show,但要做到:

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

fatal: Not a git repository 致命:不是git存储库 您需要的命令是,它允许您获取有关远程存储库的一些信息,但您不能显示历史记录或列表目录或该级别的任何内容:实际上,它只允许您在非常高的级别上查看远程对象(例如,您可以查看当前的头和标记)

要实现您想要的功能(如果我理解正确的话),唯一真正的方法是使用ssh运行远程命令并返回结果,例如:

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

如果他们可以添加它,你想要的功能会很好,但据我所知,这并不容易,因为获取历史记录等需要大量信息才能成为git的本地信息,在这一点上,你可能已经完成了git获取。

git是分布式的版本控制系统,而Subversion是集中式的(客户端-服务器)版本控制系统。他们的工作方式不同;习惯吧。请阅读我对StackOverflow问题的回答,解释这种差异的后果

重复我的一点:在集中式版本控制系统(如CVS或Subversion)中,几乎所有命令都在服务器上处理,并且涉及网络。很少有命令在本地执行。请注意,为了具有“svn状态”和“svn差异”的良好性能,Subversion在客户机上存储签出版本的“原始副本”,不必为这些常见操作涉及网络传输(这意味着Subversion签出=至少2 x工作目录的大小)

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

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

  • 您可以使用“”列出远程计算机上的所有引用
  • 您可以使用
    “--远程=头部”
  • 使用
    “--深度=1”
  • 若服务器向存储库提供GitWeb接口,那个么您可以使用它进行浏览
查看一些传输协议的相关信息。注意,这对标准git over SSH不起作用


对于通过SSH的git,最新的服务器端git应该允许您直接从远程进行git存档,然后您可以通过管道(例如)到“tar t”以获得给定提交中所有文件的列表。

这可能被一些人认为是肮脏的,但对于github存储库来说,一个非常实用的解决方案就是制作一个脚本,例如“git ls”:

当然,让它可以执行和访问:
chmoda+xgitls;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固有的分散特性。

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

使用GitHub开发人员API

  • 打开此文件将获得最近的提交

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

  • 所有文件(主目录树需要sha)


  • 我希望这会有所帮助。

    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
    

    如果您知道要检查的远程分支机构,可以通过以下方式查找最新的分支机构:

    git ls-tree -r <remote_branch> --name-only
    
    git ls tree-r--仅限名称
    
    当您必须签出存储库时,您可以使用
    --不签出
    --深度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
    
    虽然只有一个
    .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
    
    您可以通过以下方式获得目录列表:

    $ 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
    
    或通过以下方式获取文件数:

    $ git ls-tree -r HEAD | wc -l
       71259
    
    或通过以下方式获取总文件大小:

    $ git ls-tree -l -r HEAD | awk '/^[^-]/ {s+=$4} END {print s}'
    1006679487
    

    尽管你是正确的,如果你在浏览远程回购协议时没有首先克隆它,那么显然你已经决定放弃git的离线功能是可以的。有鉴于此,我认为没有理由假装这对某些事情来说不是一个有用的功能,例如,本地客户端允许您在本地浏览远程回购协议的文件内容。同意,Jakub的立场是高度限制性的。我不喜欢那种“习惯于那种”的语气,但当我读到最后,我找到了一个解决当前问题的方法——等着看110存储库中有什么东西,我有一个git,但没有ssh或shell访问,这些都可能相当大,大约12GB左右。因此,深度最小化的克隆至少有助于只看到最近有趣的历史。并使git repo尽可能小。如果代码审查工具不需要整个repo,那么拥有这样的功能就很好了,只需记录更改就足够了。@Henning,没错,我想你可以称之为“git习惯于那样”的语气,LOLI没有得到任何结果。curl似乎没有返回任何东西。我现在肯定会推荐Anarug的api方法。但是这个方法仍然有效:
    curl-shttps://github.com/Itseez/opencv  |grep js目录链接| sed的|.*title=“\(.*)”*|\1 |“
    不要将Git与GitHub混淆-我相信最初的问题是关于Git本身的。Git安装/主机(GitHub/BitBucket/Stash)可以有多种浏览存储库的可能性
    $ git ls-tree -l -r HEAD | awk '/^[^-]/ {s+=$4} END {print s}'
    1006679487