[英]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-pack
和git-upload-pack
(在智能协议的情况下)。
(从“ 重新实现”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.