一、安装git
直接通过apt-get安装git。
apt-get install git -y
1.1 创建git用户
创建git账号并登录,指定用户目录为/home/git
useradd git -d /home/git -m -s /bin/bash
添加用户 useradd
-d: 指定用户目录
-m: 如果目录不存在则创建
-s: 可以指定用户使用的命令
二、创建blog库
需使用--bare 参数。作为代码仓库服务器并不会在上面修改东西。
su git
mkdir repos
进入目录后git init --bare blog.git
三、设置SSH Key做免密
在客户端生成密钥对,在客户端(我这里是Windows端)终端执行:
ssh-keygen -t rsa -b 4096
一路回车用默认即可。
生成后会有两份文件(默认位置):
- 私钥:
id_rsa - 公钥:
id_rsa.pub(放到服务器上)
3.1 公钥位置参考
- macOS / Linux:
~/.ssh/id_rsa.pub - Windows:
C:\Users\<你的用户名>\.ssh\id_rsa.pub- 很多时候是:
C:\Users\17012\.ssh\id_rsa.pub
- 很多时候是:
3.2 把公钥追加到服务器 authorized_keys
把这id_rsa.pub 文件复制到服务器
举例(在客户端执行):
scp id_rsa.pub git@服务器IP:/tmp/
3.3 在服务器上把公钥追加进去(用 git 用户)
在服务器上登录后执行(建议切到 git 用户操作):
su git
创建目录并设置权限(不然 SSH 可能会因为权限太宽而拒绝使用密钥):
mkdir -p ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
追加拷贝过来的公钥:
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
3.4 客户端获取sample库,并添加文件上传到服务器
Windows上可以直接使用git获取。
git@服务器地址:/钩子文件的路径.git
新建一个文件并提交到服务器上。在服务器上通过git log就能看到第二提交的内容。
这样Git服务器仓库就搞定了。
四、安全
为安全考虑Git账号只允许使用git-shell。在passwd文件中找到git用户,把/bin/bash直接修改成/usr/bin/git-shell 登录root账号,并修改git的用户权限。
su
vim /etc/passwd
这样git用户只能git-shell命令不能登录了。
使用su git命令就会出现下面提示,git用户就无法登录到shell,这样就OK了。

五、hexo博客的额外配置
创建一个目录来作为hexo网站根目录,并给予权限
mkdir /var/hexo
chown -R git:git /var/hexo
chmod -R 755 /var/hexo
权限部分很重要,否则在后续Windows端推送时会报错权限不够
remote: error: unable to unlink old '<file>' (Permission denied)
5.1 自动部署配置
接3.4后,进入钩子文件cd /var/repo/simple.git下有一个自动生成的hooks文件夹。我们需要在里边建一个新的钩子文件post-receive。
vim /var/repo/simple.git/hooks/post-receive
将下面两行代码粘贴进去保存退出。
#!/bin/bash
git --work-tree=/var/hexo --git-dir=/home/git/repos/blog.git checkout -f
修改权限
chown -R git:git /home/git/repos/blog.git/hooks/post-receive
chmod +x /home/git/repos/blog.git/hooks/post-receive
这样关于博客的自动部署就搞定了。
5.2 下面是我的nginx配置参考
六、git使用
拷贝项目:
git clone <仓库地址>创建分支:
git branch <name>创建并进入分支:
git checkout -b <name>查看状态:
git status添加所有文件:
git add .提交:
git commit -m '这里填提交的描述信息'拉取:
git pull推送:
git push查看分支:
git branch -list查看分支(含远程分支):
git branch -a
工作中项目分支管理
master:主分支,一般都不会在此分支开发项目
dev:开发分支,一般在此分支上开发
版本分支:建立于dev分支下面
如:feature-vueAdmin-V1.0.0-20230611
feature:描述当前分支类型
vueAdmin:项目名称
V1.0.0:版本号
20230611:建立分支日期
BUG分支:建立于当前版本分支下
如:bur-101112-20230611
bug:分支类型
101112:bug的ID
20230611:建立分支的日期
小知识
1.git工作流程
首先执行 git pull 获取远程仓库的最新代码,进行代码的编写。
完成相应功能的开发后执行 git add . 将工作区代码的修改添加到暂存区,再执行 git commit -m 完成xx功能 将暂存区代码提交到本地仓库并添加相应的注释,最后执行 git push 命令推送到远程仓库。
2.撤回提交到仓库的代码
当执行了 git commit -m 注释内容 命令想要撤回,可以使用 git reset --soft HEAD^ 把本地仓库回退到当前版本的上一个版本,也就是刚刚还没提交的时候,代码的改动会保留在暂存区和工作区。
也可以使用 git reset --mixed HEAD^,这样不止回退了刚刚的 git commit 操作,还回退了 git add 操作,代码的改动只会保留在工作区。因为 --mixed 参数是 git reset 命令的默认选项,也就是可以写为 git reset HEAD^。
3.撤回发送到远程的代码
当执行了 git push 命令想要撤回,可以使用 git reset HEAD^ 将本地仓库回退到当前版本的上一个版本,代码的修改会保留在工作区,然后使用 git push origin xxx --force 将本地仓库当前版本的代码强制推送到远程仓库。
欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 1701220998@qq.com