远程仓库中与 `svn cat` 相对应的 Git 命令是什么?

25

我正在寻找在Git中等效于svn cat的命令。

是的,我知道有一个类似的问题在这里被问到了。答案是使用git show rev:path

但是,svn cat可以用于远程仓库。也就是说,我可以执行svn cat url@rev并从指定版本的远程仓库获取文件,而不必获取整个仓库。我的理解是git show只适用于本地仓库。

我发现的一种解决方法是使用gitweb界面来获取blob。


3
我认为没有办法在不下载超过你想要的内容的情况下完成这个任务:git服务器协议并未提供此功能。除了下载(部分)远程仓库之外,我认为你唯一能做的事情是获取远程引用信息(git ls-remote)。 - Nicholas Riley
2
我同意尼古拉斯的观点:我认为唯一的方法是执行“git fetch”(这将更新您的存储库,但不会合并任何内容),然后运行提到的线程中的一个命令。 - RyanWilcox
1
或者 git remote update(对于所有远程仓库使用 git fetch)。 - xenoterracide
你使用GitHub吗?如果是的话,我有一个解决方案可以提供给你。 - Restuta
4个回答

16

以下是一个在Git的最新版本中可以使用的技巧,它允许你从远程仓库(你有Git访问权限)中获取单个文件,而无需克隆整个仓库:

git archive --remote=git@gitserver.example.com:myrepo master path/to/file1 | tar -xOf - > file1

以上代码从master获取文件。根据您的需求进行修改。


12
git fetch
git show remotes/origin/master:<filename>

显然你的远程分支可能不在remotes/origin/master


11

如果你的动机是最小化下载和/或存储在本地磁盘上的数据量,你可以尝试以下命令。

git clone --depth=1 --bare REPO
cd REPO.git
git show HEAD:PATH/TO/FILE

--depth=1的意思是你只会下载最新的版本,而不包括历史版本。--bare的意思是你将下载远程仓库,但不会创建任何工作目录,从而节省本地磁盘空间。

请注意,如果你想获取文件的某个历史版本而不是最新版本,上述命令将无法工作,因为它们不会下载任何历史记录。


3
另一个线程中提到了无法仅获取单个文件,因此唯一的选择是要么获取远程存储库,要么使用其他工具(例如Web浏览器)查看该文件。
Github对在线查看文件具有出色的支持,如果您希望保持命令行状态,则可以将其与curl集成。对于其他存储库,可能没有这样的功能。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接