服务器搭建私人 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.

现在这个仓库就是git@hostname:helloworld.git

克隆一下这个仓库, 就可以看到文件了:

git clone git@hostname:helloworld.git

/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 用户只需要操作 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 的命令, 默认只有 listhelp. 这样就限制了 git 用户登录无法使用普通的 shell.

最后是修改 git 用户的 shell:

chsh git -s /usr/bin/git-shell

现在用 git 登录, 就是一个交互式的环境. list 可以列出 /home/git 下的所有仓库