设置和配置
获取和创建项目
基本快照
分支与合并
共享和更新项目
检查和比较
打补丁
调试
电子邮件
外部系统
服务器管理
指南
管理
底层命令
- 2.18.1 → 2.54.0 无变更
-
2.18.0
2018-06-21
- 2.11.4 → 2.17.6 无变更
-
2.10.5
2017-09-22
-
2.9.5
2017-07-30
- 2.1.4 → 2.8.6 无变更
-
2.0.5
2014-12-17
概要
chsh -s $(command -v git-shell) <user> git clone <user>@localhost:/path/to/repo.gitssh <user>@localhost
描述
这是一个为 SSH 账户提供的登录 shell,用于提供受限的 Git 访问权限。它仅允许执行实现 pull/push 功能的服务端 Git 命令,以及用户主目录下名为 git-shell-commands 子目录中的自定义命令。
命令
git shell 在 -c 选项后接受以下命令:
- git receive-pack <参数>
- git upload-pack <参数>
- git upload-archive <参数>
-
调用相应的服务端命令以支持客户端的 git push、git fetch 或 git archive --remote 请求。
- cvs server
-
模拟 CVS 服务器。请参阅 git-cvsserver[1]。
如果存在 ~/git-shell-commands 目录,git shell 还会通过从用户主目录运行 "git-shell-commands/<命令> <参数>" 来处理其他自定义命令。
交互式使用
默认情况下,上述命令仅能在使用 -c 选项时执行;该 shell 并非交互式的。
如果存在 ~/git-shell-commands 目录,git shell 也可以交互式运行(不带参数)。如果 git-shell-commands 目录中存在 help 命令,它将被执行以向用户提供可用操作的概览。随后会显示 "git> " 提示符,用户可以在此处输入 git-shell-commands 目录中的任何命令,或输入 exit 以关闭连接。
通常,此模式用作管理界面,允许用户列出他们有权访问的仓库、创建、删除或重命名仓库,或者更改仓库描述和权限。
如果存在 no-interactive-login 命令,则会运行该命令并中止交互式 shell。
示例
禁用交互式登录,改为显示问候语
$ chsh -s /usr/bin/git-shell $ mkdir $HOME/git-shell-commands $ cat >$HOME/git-shell-commands/no-interactive-login <<\EOF #!/bin/sh printf '%s\n' "Hi $USER! You've successfully authenticated, but I do not" printf '%s\n' "provide interactive shell access." exit 128 EOF $ chmod +x $HOME/git-shell-commands/no-interactive-login
启用 git-cvsserver 访问(通常应将上述 no-interactive-login 示例作为先决条件,因为创建 git-shell-commands 目录会允许交互式登录)
$ cat >$HOME/git-shell-commands/cvs <<\EOF if ! test $# = 1 && test "$1" = "server" then echo >&2 "git-cvsserver only handles \"server\"" exit 1 fi exec git cvsserver server EOF $ chmod +x $HOME/git-shell-commands/cvs
另请参阅
ssh(1), git-daemon[1], contrib/git-shell-commands/README