在git repo中浏览和显示文件而不进行克隆
有没有一种方法可以在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运行远程命令并返回结果,例如:在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/
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接口,那个么您可以使用它进行浏览李>
对于通过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
我希望这会有所帮助。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