自己搭建简易的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配置,点击“+”,如下:

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

                2.4:配置git远程仓库

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

                    

如上图,如果没有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再提交到正式环境的项目)

        以上是本人的一些思路,由于本人并未在大厂待过,都是在小公司,项目大部分由本人自己管理,所以经验偏少,以上思路仅供参考。

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值