【发布时间】:2014-09-11 10:59:15
【问题描述】:
我已经看过了:
-
How to run GIT commands on remote repository - “SSH 进入服务器”或“
git fetch;gitk --all” -
Run git commands on remote working tree (GIT_WORK_TREE=/path) - 答案是关于
git push --tags - How to "git show" on a remote repo? - “使用 git fetch 获取远程历史记录,然后从本地对象存储中抓取文件。”
-
How to run git command remotely? - “
ssh username@host "cd my/repo/path && git show"” - How can I manually run the hook post-receive on git? "钩子是一个可执行的 shell 脚本。如果你需要手动运行它,你可以从命令行执行它,尽管如果你的 repo 有多个头(也就是说,你使用分支)。”
-
Detecting changes to remote branch - “不要手动监视 git 内部工作中的文件。使用 git 为您检查。在这种情况下,
git rev-parse --verify origin/master将向您显示您的本地副本的 SHA 原始/主副本,git ls-remote origin master从远程获取 SHA。” -
Commit history on remote repository - “
git log remotename/branchname- 你不能直接连接到服务器查看那里的日志,你要做的是用git fetch下载服务器的状态,然后在本地查看远程分支的日志。”
由此判断,我想做的事情,我必须通过ssh登录并在远程服务器上运行一个脚本;但我希望有一个更集成 git 的解决方案,所以让我解释一下我想要做什么。
我有一个远程仓库,它是 git-svn;然后我有一个本地 git-only repo,它是远程的克隆。因此,本地在remote.origin.url 中引用了远程URL(通过git config --list 看到)。
我想要做的是在远程运行相当于git svn log(可能进行一些后处理),但从 local 机器/repo 发起调用 - 并获取结果,再次在本地机器/存储库上。当然,git-svn 甚至可能没有安装在本地机器上,这意味着只有远程才能理解这样的命令。
我已经准备好为远程仓库编写一个钩子了——但据我所知,钩子只能在指定的事件中运行(即pull、update...)——你不能真正调用他们任意:我记得,有一次我正在开发一个post-update 脚本;为了调试它,我必须将其设置为始终返回错误,然后我会“推送”一个“假”提交,这将运行脚本,并在收到错误后回滚回购-- 当然,这不是我想象的远程脚本应该运行的方式。
另一件可能的事情是为本地 repo 编写一个别名,然后就remote.origin.url 调用 SSH - 也许这会使git svn log 的远程运行更容易一些?
最后,这是我的问题 - 我必须使用哪些选项在远程仓库上运行相对自定义的 git 命令(如 git svn log,或远程定义的 git 别名),通过利用最大在可能的情况下本地存储库中已经可用的数据(也就是说,我想避免编写带有重复硬编码路径/URL的bash脚本,它将调用ssh并在远程执行任何必要的操作) -- 可能以类似的方式远程post-updategit钩子将其标准输出返回给本地调用者,前缀为“remote:”?
【问题讨论】:
标签: git git-remote