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

为什么各种git命令只能在本地使用?,git,Git,使用标准客户端可以在远程存储库中再次运行的命令数量非常有限。 大多数远程命令都是由git ls remote提供的。这仅仅是git客户端的限制还是git服务器的限制 我想编写一个客户端,它提供了大多数可以在本地运行的命令,也可以在远程存储库上运行 一个很好的例子是获取日志(即,git log),这就是问题的原因。 目前的做法是使用由托管git repository的任何服务(github、gitlab、gerrit、bitbucket、stash等)开发的专有API,因此我认为使用标准git协议

使用标准客户端可以在远程存储库中再次运行的命令数量非常有限。
大多数远程命令都是由git ls remote提供的。这仅仅是git客户端的限制还是git服务器的限制

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

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

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

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

当您拥有完整的repo时,大多数命令(logs、diff、commit等)都是有意义的

如果git服务器提供数据,我想开发一个客户机,使这些API停业

并没有“git服务器”,只有侦听器(httpd或sshd),然后它们调用和(在这种情况下)

(从“开始”)

这就是为什么在这些侦听器之上开发API,以便公开这些命令(托管服务器管理的repo的本地命令)


我知道的另一种选择是。
是一个身份验证层(由侦听器https或ssh调用,并检查用户访问repo的权限)。
它可以委托某些命令在服务器上“本地”执行:

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

为了实现这一点,gitolite允许管理员在用户可以运行的特殊目录中设置脚本。gitolite附带了一组工作脚本,管理员可以安装这些脚本,也可以将其作为自己的起点(如果他选择的话)

将这些命令视为与mangitshell中的命令_DIR中的命令等效


可能的扩展名:请参阅“”

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

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

git clone gittorrent://github.com/cjb/recursers
Git实际上内置了一个可扩展的网络协议机制。它的工作方式是将我的Git克隆行转换为“运行
Git remote gittorrent
命令并将URL作为参数”


为什么需要远程git日志?只需从远程repo获取更改,然后在本地进行日志记录。我不想在本地克隆/获取repo。我希望这是有意义的。@gman为了澄清评论,克隆存储库以便获取日志是低效的。我只需要日志,所以我只需要它。有许多专有的实现此功能的api(github api、gitlab api、hulu api等)。如果git服务器提供数据,我想开发一个客户端,使这些API停止运行。您不必克隆整个存储库,只需克隆您想要的日志所在的分支。这与git协议的目的完全不同。完全访问文件(例如,通过SSH)就可以轻松完成或者可以使用特殊的远程客户端API来完成。Git协议的目的只是共享对象包及其依赖项。不幸的是,我正试图避免安装其他软件。这是因为我正在寻找一种“标准”解决方案,它可以在不同的SAAS提供商(即github)上运行在我自己的git服务器上。我希望git receive pack和git upload pack足够智能,能够提供实现客户端所需的数据,该客户端可以替换当前可用的各种专有API/解决方案。@我不了解的用户。我不认为git receive pack和git upload pack可以做任何其他事情,让urn包文件。我编辑了答案以说明git协议可以扩展/重新定义。但这意味着在服务器上安装其他东西。仅git似乎不支持您的用例。