开发里面最理想的是线上代码不出BUG,但是实际上不可能,所以需要对代码进行管理。
最初级的简单管理方式,使用FTP来管理,使用宝塔开个FTP账号,然后客户端使用FTP协议进行登录服务器并对代码进行改写。
这种办法适用场景,修改简单的代码,开发已经完善,只是做小修复。或者临时拿到了项目代码,没有必要对代码进行管理,直接修改代码即可。
缺点很明显——首先将远程代码打包复制一份到本地,本地的每次代码改动,都要上传到远程服务器上。没有对代码的管理,出现问题,很难溯源。一旦代码丢失或者被覆盖掉,找不回来。当系统比较简单的时候,勉强可以使用。
初级解决:
再gitee.com 创建一个私有仓库,空目录。
将本地有代码的或者已经开发好的目录,直接使用git init (初始化开发目录) 目录下执行git init
时,Git 会在该目录下创建一个隐藏的.git
文件夹,这个文件夹包含了 Git 仓库的所有元数据和对象数据库。
配置项目项目前,需要先准备个.gitignore ,一般库更新相对比较少,而且更新之后,极少会再次去更新,而且库的文件相对比较大,所以无需更新。需要在忽略文件里面忽略掉,一般的忽略文件。缓存文件一般会被忽略,而且同样的如果有上传图片之类的,也会被设置的忽略掉,主要是减少不会变动代码的体积。
/nbproject/
/thinkphp/
/vendor/
/runtime/*
.idea
composer.lock
*.log
*.css.map
!.gitkeep
.env
.svn
.vscode
node_modules
.user.ini
再gitee上创建了仓库之后,将需要纳入仓库的代码放入我们初始化的目录里面。
放入仓库之后 使用 git add . git commit -m “注释” git push 然后开始代码推送到远程git仓库。
这样远程仓库就可以看到我们上传过来的代码,我们就可以对代码进行管理了。
注意: win服务器的换行符和Linux不一样 导致出现:
warning: in the working copy of ‘public/router.php’, LF will be replaced by CRLF the next time Git touches it
这种警告
需要将 git config --global core.autocrlf false //将 “自动转换行尾结束符” 功能关闭。
git config core.eol lf 统一行尾结束符格式可以避免一些因不同操作系统对行尾结束符处理方式不同而导致的问题。设置为 LF 可以确保在不同平台上的一致性,并且对于在 Unix/Linux 环境下开发或与遵循 Unix 风格行尾结束符的工具进行交互时更加方便
代码仓库已经可以看到被上传的代码。现在我们需要配置我们的服务器端能拉取我们仓库。
密钥对的配置,如果不配置密钥对,需要我们每次输入密码进行身份验证。很不方便。 生成相关密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 这里的
your_email@example.com
替换为你的邮箱地址。 - 一路按回车键,接受默认设置(可以设置密码,也可以不设置)
添加公钥对:二、将公钥添加到 Git 服务器
- 生成密钥后,公钥文件通常是
二、将公钥添加到 Git 服务器 生成密钥后,公钥文件通常是~/.ssh/id_rsa.pub。 打开这个文件,复制其中的内容。 登录到你的 Git 服务器(比如 GitHub、GitLab 等)。 在 Git 服务器的设置中找到 SSH 密钥设置部分,将复制的公钥内容添加进去
。 - 打开这个文件,复制其中的内容。
- 登录到你的 Git 服务器(比如 GitHub、GitLab 等)。
- 在 Git 服务器的设置中找到 SSH 密钥设置部分,将复制的公钥内容添加进去
服务器的名字配置:
git config --global user.name “Your Name”
git config --global user.email “your_email@example.com”
git config --global core.sshCommand “ssh -i ~/.ssh/id_rsa” 如果你的私钥文件名不是id_rsa
,则相应地修改这个路径。
另外一种验证方式:(记住一次用户输入的密码)
git config --global credential.helper store : 自动记住账号密码(Linux环境下面)
这样git clone https 仓库的时候,只要记住一次下次就不用输入密码了。
其他问题:
如果因为代码权限变动,导致客户端提交出现了提示代码全部需要重新更新的异常
git fetch
:获取远程仓库的最新状态(获取最新状态)
git reset --hard origin master 强制同步远程的代码(服务器除了会更新图片之类,基本是不会更新代码,所以同步远程代码即可)
管理策略
本地搭建测试环境,开发改动代码,经过本地开发环境API的测试通过
然后提交到git仓库,远程服务器每隔1-3分钟同步代码。
这样有三个好处:
1.代码不存在丢失的风险——单纯的代码开发存在代码丢失的风险,特别是存在代码自动生成和改动混合的时候,一键生成很容易覆盖掉之前改动的代码,而git有效的弥补了这点
2.生成代码的时候,一次是生成N个文件,除了整个生成包放到线上,覆盖线上代码,FTP上传效率非常低,大量文件传输的时候,经常性提示失败
3.方便查看历史改动记录,包括各个版本的区别,特别是有需要版本切换的改动需求的时候。V2版本完成开发,但是需要修复BUG。但是V3版本功能还在继续开发,这个时候,需要git进行管理。
自动化部署代码:
首先写个自动化拉取git的脚本:
str=$(git pull | grep -e 'Already up to date ')