有没有一种方法可以浏览和显示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:/路径/到/仓库
结果到
致命的:不是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:/路径/到/仓库
结果到
致命的:不是git库
Answers:
您想要的命令git ls-remote
允许您获取有关远程存储库的一些信息,但是您无法显示历史记录或列表目录或该级别的任何内容:本质上,它仅允许您以很高的级别查看远程对象(可以看到远程对象)。例如当前的HEAD和标签)。
唯一真正可行的方法(如果我理解正确的话)是使用ssh运行远程命令并返回结果,例如:
ssh me@otherhost "cd repo && git log -n 10"
如果他们可以添加它,那么您想要的就是可爱的功能,但是从我的阅读来看,这并不是一件容易的事,因为获取历史记录等需要大量信息才能在git本地进行,这时您还可以进行git fetch 。
Git是分布式版本控制系统,而Subversion是集中式(客户端-服务器)版本控制系统。他们的工作方式不同;习惯了。请阅读我的答案,以解释在StackOverflow 上git等效svn status -u
问题的区别所带来的后果。
再说一遍:在集中式版本控制系统(如CVS或Subversion)中,几乎所有命令都在服务器上处理,并且涉及网络。很少在本地执行命令。请注意,要具有良好的“ svn状态”和“ svn差异”性能,Subversion会将已检出版本的“原始副本”存储在客户端上,而不必为那些常见操作进行网络传输(这意味着Subversion检出= 2 x工作目录的大小)。
在分布式版本控制系统(如Git,Mercurial或Bazaar)中,您拥有整个存储库的本地副本(克隆),几乎所有命令都在client上执行。很少有命令需要通过网络连接到其他存储库(到服务器)。
您可以在服务器上执行的命令数量是有限的。
查看http://git-scm.com/book/en/Git-Internals-Transfer-Protocols,了解有关如何通过某些传输协议执行此操作的信息。请注意,这不适用于基于SSH的标准git。
对于通过SSH的git,最新的服务器端git应该允许您直接从远程进行git归档,然后您可以将其例如通过管道传输到“ tar t”以获取给定提交中所有文件的列表。
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 Developer API
打开它可以获取最近的提交。
https://api.github.com/repos/learningequality/ka-lite/commits
您可以通过将提交哈希附加在上述url的末尾来获取特定的提交详细信息。
所有文件(主树需要sha)
希望对您有所帮助。
有些人可能认为这很脏,但是在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固有的任何分散特性。
curl -s https://github.com/Itseez/opencv | grep js-directory-link | sed 's|.* title="\(.*\)".*|\1|'
git clone
就是通过传递仅获取一个修订--depth 1
。这避免了获取潜在的大量历史记录,并且足以回答诸如“哪些文件存在于修订版中abcdef1234567890
?”之类的问题。