technology-note/其他各种/git crlf、lf自动转换引起的问题.md

19 lines
2.3 KiB
Markdown
Raw Normal View History

2018-11-09 23:29:10 +08:00
[id]: 88926d90d6c111e8aa858b6a40460626
2018-10-07 17:53:22 +08:00
  项目组最近加了一个新功能到代码中使用flyway记录数据库版本变更该工具会记录每次数据库结构的修改并生成sql文件存在指定目录上当然必须用它来变更数据库外部的变更它是无法感知的然后每次启动时flyway会检查使用的数据库和当前项目代码中的sql变更版本是否一致一致正常启动不一致中如果是数据库落后将会更新数据库这样能够保证代码在任何地方运行数据库都是一致的),否则就报错了。数据库中有一张表记录版本信息,如下图:
![版本记录](./picFolder/版本记录.PNG),同时本地代码中也有一个文件夹保存每次操作的sql语句如下图
![版本sql](./picFolder/版本sql.PNG)
通过对比checksum值来判断当前sql语句和生成数据库的执行语句是否一致checksum值由CRC32计算后处理得出。
  然后问题就来了组中的其他人搭建好flyway后项目文件生成了两个sql文件我用git拉下来后启动报错checkupsum值对不上然后我又不懂这个flyway完全不知道咋回事然后就根据报错的位置一点点找到checkup值生成的代码发现是CRC32计算的就这么搞了一两个小时才发现是文件不一致了但是都是从git拉的怎么就我不一致呢想到可能是文件换行符的问题遂把那几个sql文件的文件换行符全换成了crlfwindows中的换行符然后居然就能够运行。。。关于为啥都从git拉取的文件换行符会不一样原因是他们都用的那个小乌龟的可视化我用的命令行。可视化工具自动配置了文件换行符的自动转换这是git的一个智能功能上传时将文件换行符替换为lf拉取时再替换为crlf这样保证中心仓库使用UNIX风格的换行符本地能够根据运行环境使用相对应的换行符风格但是命令行并没有配置。
  解决办法也很简单开启git 的自动转换。
```
git config --global core.autocrlf true //开启换行符自动转换
git config --global core.safecrlf true //禁止混用换行符
```