如何在没有本地仓库的情况下远程运行 git 命令 [英] How to run git commands on remote without having local repo

查看:33
本文介绍了如何在没有本地仓库的情况下远程运行 git 命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为git-export"的脚本,它可以帮助我导出远程存储库.它是这样运行的:

I have a script called 'git-export' which helps me to export a remote repository. It is run like that:

git-export http://host.com/git-repo <-t tag or -b branch or -c commit> /local/dir

在它用于导出本地存储库之前,我使用了这些命令:

Before it was used to export local repository and I used these commands:

从分支获取提交:

git branch -v --no-abbrev|awk '($1=="'$BRANCH'") || ($1 == "*" && $2 == "'$BRANCH'"){if($1 == "*"){print $3;}else{print $2;}}'

git rev-parse -q --verify $BRANCH^{commit}

通过标签获取提交:

git rev-parse -q --verify $TAG^{commit}

我也有脚本来列出标签、版本(标签,以 v 开头),我使用 git branch -v 来显示分支......

also I have scripts to list tags, versions (tags, starting with v), I use git branch -v to show branches....

问题是:如何在没有本地存储库的情况下在远程存储库上执行这些操作.有没有一些通用的方法来查询远程.例如:git --remote=http://host.com/repo branch -vgit --remote=http://host.com/repo log

Question is: How can I do these things on remote repository without having local. Is there some general way to query remote. For example: git --remote=http://host.com/repo branch -v or git --remote=http://host.com/repo log

Resion:如果我想在远程主机上安装软件,我只想

Resion: If I want to install software on remote host I just want to

  1. 列出版本、分支等
  2. 导出特定版本/分支/提交并显示提交的 SHA1,无论我导出其中哪一个(导出我的意思是 git archive --remote=<repo>|tar x)

我不想在远程运行命令.我想将远程存储库与本地命令一起使用并以格式显示.

I don't want to actionalyl run the commands on remote. I want to use the remote repository with local commands and display it formatted.

推荐答案

你正在寻找 git ls-remote.例如:

You're looking for git ls-remote. For example:

$ git ls-remote git://git.kernel.org/pub/scm/git/git.git
4d8b32a2e1758236c4c1b714f179892e3bce982c    HEAD
f75a94048af9e423a3d8cba694531d0d08bd82b4    refs/heads/html
810cae53e0f622d6804f063c04a83dbc3a11b7ca    refs/heads/maint
70b5eebd65f2d47fd69073aed1d3da0f1fd7a017    refs/heads/man
4d8b32a2e1758236c4c1b714f179892e3bce982c    refs/heads/master
b9f1b13437fd0b8b1857ffbdebb9e1adc50481f0    refs/heads/next
83a9d3226b19a683a9a783bde0784c2caf19e9a1    refs/heads/pu
2309986900ed1a5744b3a81c507943593000ce32    refs/heads/todo
d5aef6e4d58cfe1549adef5b436f3ace984e8c86    refs/tags/gitgui-0.10.0
3d654be48f65545c4d3e35f5d3bbed5489820930    refs/tags/gitgui-0.10.0^{}
33682a5e98adfd8ba4ce0e21363c443bd273eb77    refs/tags/gitgui-0.10.1
729ffa50f75a025935623bfc58d0932c65f7de2f    refs/tags/gitgui-0.10.1^{}
...
(git.git has a lot of tags!)

您可以使用 --heads 选项将自己限制在分支或使用 --tags 选项的标签,或指定模式以选择 refs,例如查看只有来自 git.git 的 git 版本标签,git ls-remote <url>refs/tags/v*.或者你可能已经知道你想要什么引用:git ls-remote <url>头.

You can limit yourself to branches with the --heads option or tags with the --tags option, or specify a pattern to select refs, for example to see only the git version tags from git.git, git ls-remote <url> refs/tags/v*. Or you might already know exactly what ref you want: git ls-remote <url> HEAD.

但是,您不能在任意遥控器上运行任意命令.传输协议不支持这一点 - 它们旨在支持列出参考和传输对象(通过包).特别是,您将无法执行类似于 rev-list 的任何操作.对于 refs 指向的提交,您将只能获得 SHA1.

You can't run arbitrary commands on arbitrary remotes, though. The transfer protocols don't support that - they're designed to support listing refs and transferring objects (via packs). In particular, you won't be able to do anything analogous to rev-list. You'll be limited to getting SHA1s for commits pointed to by refs.

这篇关于如何在没有本地仓库的情况下远程运行 git 命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆