繁体   English   中英

为什么各种git命令只在本地可用?

[英]Why various git commands are available only locally?

使用标准客户端再次运行远程存储库的命令数量非常有限。
大多数远程命令由git-ls-remote 这只是git客户端的限制还是git服务器的限制?

我想编写一个客户端,它提供了大部分可以在本地运行的命令,也可以在远程存储库上运行。

一个很好的例子就是获取日志(即git log ),从而解决问题的原因。 目前的做法是使用由托管git repostiory(github,gitlab,gerrit,bitbucket,stash等)的任何服务开发的专有API,因此我认为使用标准git协议开发的客户端将解决此问题。

我认为使用标准git协议开发的客户端可以解决这个问题。

这将把Git的分散模型(其中每个操作都是本地的和快速的 )恢复为集中模式 (您需要访问服务器来执行操作)。

当你有完整的回购时,大多数命令(日志,差异,提交,...)都有意义。

如果git服务器提供了我想要开发客户端的数据,这些客户端会使这些API停止运营。

没有“git服务器”,只有监听器(httpd或sshd)然后调用git-receive-packgit-upload-pack (在智能协议的情况下)。

http://stefan.saasen.me/articles/git-clone-in-haskell-from-the-bottom-up/images/pack-client-server.png

(从“ 重新实现”git clone“在Haskell中自下而上 ”)

这就是为什么在这些侦听器之上开发API以暴露这些命令(托管服务器管理的存储库本地 )的原因。


我所知道的一个替代方案是gitolite site local命令
Gitolite是一个身份验证层(由监听器https或ssh调用,并检查用户访问repo的权限)。
它可以委派一些命令在服务器上“本地”执行:

gitolite的主要目的是防止你获得一个shell。 但是经常需要在服务器上运行命令(即,无法通过将某些内容推送到repo来完成)。

为了实现这一点,gitolite允许管理员在特定目录中设置脚本,然后用户可以运行该目录。 Gitolite附带了一组管理员可能安装的工作脚本,或者可以作为他自己的起点,如果他选择的话。

可以认为这些命令与man git-shell中的COMMAND_DIR中的命令相同。


可能的扩展:请参阅“ 宣布GitTorrent:分散的GitHub

这是从Git服务器获取除了包文件之外的其他内容的示例。

使用不同的协议可以使git clone返回除完整repo之外的其他内容:

git clone gittorrent://github.com/cjb/recursers

Git实际上有一个内置网络协议的可扩展机制。它的工作方式是我的git clone line变成“运行git-remote-gittorrent命令并将URL作为参数”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM