服务器搭建私人 git 仓库
目录
因为一直再用 git 维护博客, 所以就想能不能在服务器上搞一个 git 仓库, 然后本地写博客, 用 git 推到服务器上.
安装git
yum install -y git
创建用户
创建 git 用户专门用来管理 git 仓库
useradd git
passwd git
然后输入两次密码
之后, 切换到 git 用户进行操作, 防止权限问题.
su git
建立仓库
先创建一个文件夹, 这个文件夹就是裸仓库, 以 .git
结尾.
mkdir /home/git/helloworld.git
然后初始化这个仓库
git init --bare /home/git/helloworld.git
注意
--bare
只会创建管理的裸仓库, 裸仓库的文件被嵌入到 git 数据库中, 并且以 历史记录 的形式, 而不是文件, 无法直接看到. 如需文件, 需要 clone.clone
现在这个仓库就是git@hostname:helloworld.git
克隆一下这个仓库, 就可以看到文件了:
git clone git@hostname:helloworld.git
ssh
在 /home/git/.ssh/authorized_keys
中添加即可, 之后就不用输入密码了.
如果 ssh 非 22 端口, 则 url 不再是形如 git@host:reop.git, 而是标准 url: ssh://user@host:port/home/git/reop.git
(之前掉了 url 里的 user, 结果一直登入的是 root. 可能 ssh 有尝试使用 root 登录? 正巧我 root 配置了 ssh key, 这里一般 user 是 git)
git-shell
由于 git 用户只需要操作 git 相关命令, 无需其他命令, 出于安全考虑, 不能给这个用户 /bin/sh
.
换成 root, 将 git-shell 添加到系统 shell 中:
echo /usr/bin/git-shell >> /etc/shells
然后拷贝一个 git-shell-commands
过来, 并设置权限:
cp /usr/share/doc/git/contrib/git-shell-commands /home/git -R
chown git:git /home/git/git-shell-commands -R
chmod +x /home/git/git-shell-commands/help
chmod +x /home/git/git-shell-commands/list
这里存放的是 git-shell 的命令, 默认只有 list
和 help
. 这样就限制了 git 用户登录无法使用普通的 shell.
最后是修改 git 用户的 shell:
chsh git -s /usr/bin/git-shell
现在用 git 登录, 就是一个交互式的环境. list 可以列出 /home/git
下的所有仓库