有没有办法在git repo中浏览和显示文件而不先克隆它?我可以使用命令在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
答案 0 :(得分:67)
您想要的命令是git ls-remote
,它允许您获取有关远程存储库的一些信息,但是您无法显示历史记录或列表目录或该级别的任何内容:实质上它只允许您查看远程对象高级(例如,你可以看到当前的HEAD和标签)。
唯一可行的方法就是使用ssh来运行远程命令并返回结果,例如:
ssh me@otherhost "cd repo && git log -n 10"
你想要的是可爱的功能,如果他们可以添加它,但从我读到它不是很容易,因为获取历史等需要很多信息是本地的git,并在那时你可能已经完成git fetch。
答案 1 :(得分:19)
Git是分布式版本控制系统,而Subversion是集中式(客户端 - 服务器)版本控制系统。他们的工作不同;习惯了。请阅读我的答案,在StackOverflow上解释这种差异对git equivalent of svn status -u
问题的影响。
重复一点:在集中式版本控制系统(如CVS或Subversion)中,几乎所有命令都在服务器上处理,并涉及网络。在本地执行的命令非常少。请注意,要获得“svn status”和“svn diff”的良好性能,Subversion会在客户端上存储签出版本的“原始副本”,而不必为这些常见操作涉及网络传输(这意味着Subversion checkout = 2 x工作目录的大小至少)。
在分布式版本控制系统(如Git,Mercurial或Bazaar)中,您拥有整个存储库的本地副本(克隆),几乎所有命令都在客户端上执行。很少有命令需要网络连接到其他存储库(到服务器)。
您可以在服务器上执行的命令数量有限。
答案 2 :(得分:16)
有关如何通过某些传输协议执行此操作的信息,请查看http://git-scm.com/book/en/Git-Internals-Transfer-Protocols。请注意,这不适用于SSH上的标准git。
对于基于SSH的git,最新的服务器端git应该允许你直接从远程git-archive进行git-archive,然后你就可以进行git-archive。管道到“tar t”以获取给定提交中的所有文件的列表。
答案 3 :(得分:9)
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
答案 4 :(得分:4)
不是确切的,而是一种方式。
使用GitHub Developer API
打开此功能可以获得最近的提交。
https://api.github.com/repos/learningequality/ka-lite/commits
您可以通过在上面的url末尾附加提交哈希来获取特定的提交详细信息。
所有文件(主树需要sha)
我希望这可能有所帮助。
答案 5 :(得分:4)
虽然您必须签出存储库,但您可以跳过使用 --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
虽然只有一个 .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
答案 6 :(得分:2)
这可能被一些人认为是脏的,但是对于github存储库来说,一个非常实用的解决方案就是创建一个脚本,例如" 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
。现在,您可以按照自己的意愿运行它:
git-ls https://github.com/mrquincle/aim-bzr
git-ls https://github.com/mrquincle/aim-bzr/tree/master/aim_modules
还要知道本地文件有git instaweb
实用程序。在我看来,能够显示文件并拥有这样的服务器并不会破坏git固有的分散特性。
答案 7 :(得分:1)
如果您知道要检查的远程分支,可以通过以下方式找到最新的分支:
git ls-tree -r <remote_branch> --name-only