git仓库的使用

一、安装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
  • WindowsC:\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
导航页 GitHub