【问题标题】:Which default commands work in git-shell?哪些默认命令在 git-shell 中有效?
【发布时间】:2017-05-23 15:56:15
【问题描述】:

我使用密码使用 PuTTy 登录 git-shell。无论我在 git-shell(Debian linux 服务器上的受限登录 shell)中输入什么内容,都会产生类似“无法识别的命令”的响应。

git> git help -a
unrecognized command 'git'

【问题讨论】:

  • git-shell 不是通用外壳。默认情况下,它只能以非交互方式运行某些命令。要以交互方式使用它,您必须做更多事情,包括定义您可以使用的实际命令。你应该阅读man page
  • 你确定吗?该手册说:“......加上名为 git-shell-commands 的子目录中的自定义命令”。好吧,那个子目录存在,但我只想使用标准命令,因此它是空的。我会很高兴 any 标准命令有效,首先。

标签: git git-shell


【解决方案1】:

git-shell 在设计上非常有限。有关详细信息,请参阅man page

默认情况下,它只能运行一些命令,以允许推/拉操作。这是 git 服务器提供“安全”SSH 访问的一种方式,仅限于与 git 存储库交互。同样默认情况下,没有交互式登录访问。

请注意,只需使用 git-shell 执行 push/pull/fetch 操作,您无需执行任何特殊操作。它已经可以做这些事情了。如果你想做一些不寻常的事情,你只需要定义自定义命令。

您在 cmets 中说您有一个 ~/git-shell-commands/ 目录,但它是空的。该目录的存在将启用交互模式,因此您将收到git> 提示。但是,commands 目录为空意味着没有可以运行的有效命令。在这种情况下,您唯一可以运行的是 exit 离开 shell。

要使用git-shell,您需要在~/git-shell-commands 中创建一些命令。究竟要创建什么取决于您。一个示例可能是创建 list,并让该脚本返回服务器上可用存储库的列表。

如果您想使用“标准命令”,正如您在 cmets 中指出的那样,那么我认为答案是 git-shell 不是您正在寻找的工具。听起来您正在寻找常规的登录 shell。

一个示例自定义命令可能如下所示。这是我上面建议的list 命令的实现。

#!/bin/bash

# Assuming all repositories are named `*.git`
for repo in $(ls -d *.git); do

    # Just in case one exists, ignore ".git"
    if [[ "$repo" != ".git" ]];
        # Trim off the extension
        echo $(basename $repo .git)
    fi

done

this blog post 中有几个例子。

【讨论】:

  • > 默认情况下,它只能运行一些命令,以允许推/拉操作。
  • 这就是我想要的。您能否举一个这样的命令的例子?不幸的是,我在网上没有找到。
  • @Rusty 它们只是 shell 脚本。我在答案中添加了一个非常基本的列表命令示例。
  • @Rusty 如果你说你只是想用它来推/拉,它已经可以做到了。只需将用户的 shell 设置为 git-shell 并将您的 git 客户端指向它,它已经知道如何使用例如git-receive-pack 等等来做它需要的。但是您问的是交互式外壳,这是不同的。
  • 谢谢!这是关键点:使用 git 客户端连接到 git-shell,而不是手动登录。 它确实知道要做什么,因此默认用例与任何用例一样工作其他登录外壳。 (我的空~/git-shell-commands 目录仍然存在。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 2017-11-27
  • 2020-03-30
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多