自己搭建简易的phpstorm->git->服务器版本控制环境,不再依赖第三方

润信云 技术支持
一、需求

        之前使用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配置,点击“+”,如下:
image.png

填写完成,测试连接,测试成功就没问题。

                2.4:配置git远程仓库

image.png

                这里不需要输入密码短语的。


image.png

如上图,如果没有dev分支,可以在自己本地项目文件里通过Git Bash 或者 Windows termina,生成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再提交到正式环境的项目)



本文链接:https://blog.runxinyun.com/post/192.html 转载需授权!

分享到:
版权声明
网站名称: 润信云资讯网
本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
我们非常重视版权问题,如有侵权请邮件与我们联系处理。敬请谅解!邮件:7104314@qq.com
网站部分内容来源于网络,版权争议与本站无关。请在下载后的24小时内从您的设备中彻底删除上述内容。
如无特别声明本文即为原创文章仅代表个人观点,版权归《润信云资讯网》所有,欢迎转载,转载请保留原文链接。
0 54

留言0

评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。