Setup and Config
Getting and Creating Projects
Basic Snapshotting
Branching and Merging
Sharing and Updating Projects
Inspection and Comparison
Patching
Debugging
External Systems
Server Admin
Guides
- gitattributes
- Command-line interface conventions
- Everyday Git
- Frequently Asked Questions (FAQ)
- Glossary
- Hooks
- gitignore
- gitmodules
- Revisions
- Submodules
- Tutorial
- Workflows
- All guides...
Administration
Plumbing Commands
概述
chsh -s $(command -v git-shell) <用户> git clone <用户>@localhost:/path/to/repo.git
ssh <用户>@localhost
描述
这是 SSH 账户的登录 shell,提供受限的 Git 访问权限。 它只允许执行实现拉/推功能的服务器端 Git 命令,以及用户主目录中名为 git-shell-commands
子目录下的自定义命令。
命令
git shell accepts the following commands after the -c
option:
- git receive-pack <参数>
- git upload-pack <参数>
- git upload-archive <参数>
-
调用相应的服务器端命令,以支持客户端的 git push、git fetch 或 git archive --remote 请求。
- ‘cvs 服务器’
-
模仿 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
GIT
属于 git[1] 文档