一、需求
之前使用gitee来控制代码的版本控制,使用的是gitee搭配宝塔WebHook,
缺点:
1:由phpstorm上传到gitee,由gitee发送请求,宝塔WebHook工具接受到请求,触发脚本内容,实现服务器代码更新,但是需要phpstorm提交两次才会更新到自己需要更新的代码,因为当前提交的,服务器更新的是上次提交的内容,差了一次提交的内容,导致每次测试版项目,测试完提交,需要提交两次,然后由测试版合并dev分支代码提交到master,更新正式版项目,这样再需要两次。如果dev分支提交一次,master分支合并dev分支提交一次,正常应该是这样的,但是使用上面说的,这个流程需要再走一次。多次查找原因,不是第三方gitee的问题,但是找不到源头,只知道是服务器脚本设置的问题。
2:代码由第三方管理,感觉不太好,又不是什么很大的项目
3:国内gitee,差评如潮,使用国外的,又是英文版,头疼得很
优点:
1:功能齐全
2:可视化管理
因此,本人闲麻烦,从而想不依赖第三方,能不能符合我的项目要求,便于管理项目。
二、思路
总思路:phpstorm配置ssh连接服务器,phpstorm配置git,服务器配置裸仓库,目标项目中B项目初始化git。
细节流程:phpstorm中B项目(测试版),dev分支编写测试完功能,通过git上传到服务器中的B项目中,同步。然后切换为master分支,合并dev分支,通过git提交上传服务器到A项目(正式版)。
三、实现流程
1、服务器端设置
首先,在服务器上为项目(测试版)设置一个Git仓库。可以利用Git钩子自动部署到指定目录。
1.1、创建裸仓库(Bare Repository)
在服务器上选择一个不同于代码部署目录的位置创建裸仓库(例如:
/var/git
)。裸仓库没有工作目录,专用于共享和协作。必须是.git结尾的文件--这种暂且称为裸仓库,而项目文件如:product文件夹,里面是项目的代码啥的,暂且称为目标文件。这两个是不一样的。
# 创建目录存放所有git仓库
mkdir /var/git
cd /var/git
# 为xxx项目创建裸仓库
git init --bare xxx.git
1.2、 设置Git钩子
在裸仓库中设置
post-receive
钩子,当代码被推送到裸仓库时,自动部署到相应的目录。
如下是服务器中通过命令语句实现,如果有宝塔管理服务器,也可以手动操作
# 编辑xxx.git/hooks/post-receive
vi /var/git/xxx.git/hooks/post-receive
在
post-receive
文件中添加以下内容:
#!/bin/sh
# xxx为项目文件(目标文件),即git提交要更新到的项目文件夹
# 当在phpstorm用dev分支提交时,更新到Bxxx项目中
# 当用master分支提交时,更新到Axxx项目中
GIT_WORK_TREE=/www/wwwroot/Bxxx git checkout -f dev
GIT_WORK_TREE=/www/wwwroot/Axxx git checkout -f master
确保钩子脚本可执行:(权限放开一些)
chmod +x /var/git/xxx.git/hooks/post-receive
2、Phpstorm配置
** 2.1:**配置SSH连接
在自己电脑上,在 Windows 上可以使用 Git Bash 或者 Windows Terminal,运行命令:
ssh-keygen
来生成新的密钥对。当系统提示你输入文件保存路径时,你可以直接按 Enter 使用默认路径(通常是 ~
/.ssh/id_rsa
),在 Windows 上,这通常在
C:\Users\你的用户名\.ssh\
。如果已存在可以,直接用也行。生成两个文件为:id_rsa、id_rsa.pub
2.2:服务器配置本地的id_rsa.pub
在 Linux 系统中,
.ssh
目录通常位于用户的主目录下。如果你使用的是 root 用户,
.ssh
目录通常会在
/root/.ssh/
。对于普通用户,它位于
/home/用户名/.ssh/
。【一般通过ls命令语句是查看不到,本人是直接在宝塔里直接操作的】
2.2.1 **检查
.ssh
目录**:
首先,需要登录到服务器。如果
.ssh
目录不存在,可以手动创建它
mkdir -p ~/.ssh
chmod 700 ~/.ssh
2.2.2 **将公钥添加到
authorized_keys
文件**
** **需要将公钥(通常是
id_rsa.pub
文件的内容)添加到服务器的
~/.ssh/authorized_keys
文件中。如果这个文件不存在,可以创建它。
echo your-public-key-string >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
这里的
your-public-key-string
应该被你的实际公钥字符串替换,你可以从你的本地机器上的
id_rsa.pub
文件中获取这个字符串。如果你的公钥已经保存在一个文件中,你也可以使用如下命令将其复制到服务器:
cat id_rsa.pub | ssh user@hostname "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
替换
user
为你的服务器用户名,
hostname
为服务器的 IP 地址或域名。
2.2.3 验证 SSH 公钥认证
在自己本地终端运行:
ssh user@hostname
如果本地密钥不是自己生成的,而且这里还需要输入密码短语的(就是保护密钥的密码,一般都是在自己生成密钥时要求输入的),这时候你应该考虑重新生成,覆盖掉原来的或者重新生成一个。
Last login: Wed May 8 00:07:07 2024 from 61.146.45.251
Welcome to Alibaba Cloud Elastic Compute Service !
出现这个即表示成功了。
2.3 Phpstorm配置ssh
在Phpstorm中【文件--设置】中,搜索ssh,找到SSH配置,点击“+”,如下:
填写完成,测试连接,测试成功就没问题。
2.4:配置git远程仓库
这里不需要输入密码短语的。
![](https://img-blog.csdnimg.cn/direct/03ae6caa0f494b34bb919602cbc853f4.png)
如上图,如果没有dev分支,可以在自己本地项目文件里通过Git Bash 或者 Windows Terminal,生成dev分支:
git checkout -b 分支名
这样,当你用dev分支提交时,提交到就是自己设置用来接收git更新内容的dev,用master分支同理,就是上面设置的,如下图:
#!/bin/sh
# xxx为项目文件(目标文件),即git提交要更新到的项目文件夹
# 当在phpstorm用dev分支提交时,更新到Bxxx项目中
# 当用master分支提交时,更新到Axxx项目中
GIT_WORK_TREE=/www/wwwroot/Bxxx git checkout -f dev
GIT_WORK_TREE=/www/wwwroot/Axxx git checkout -f master
三、总结
本人同时也配置了Phpstorm通过ssh连接服务器,这样,在测试版项目,编写代码时,可以直接保存就能同步到服务器(当然这个测试项目是自己单独用的,这样就不会有覆盖的现象),当完成一个功能后,就可以用dev分支提交服务器中,这样也可以在git进行留痕,便于回退版本,再没啥问题后,切换到master分支,合并dev分支,代码就能同步到正式项目中。(这里单指一个人负责整个项目的情况,如果多人协助的话,在dev,master提交后应该先到【中间版本】的项目中dev分支,在确定没问题,再有【中间版本】项目(通常叫测试环境)切换master再提交到正式环境的项目)
以上是本人的一些思路,由于本人并未在大厂待过,都是在小公司,项目大部分由本人自己管理,所以经验偏少,以上思路仅供参考。
版权归原作者 php新手! 所有, 如有侵权,请联系我们删除。