我们使用Liquibase,现在在新项目中我们必须使用Flyway。 在liquibase迁移中,顺序位于xml文件中,因此您可以指定首先迁移的内容和第二个迁移的内容,它不依赖于名称。
所以,当一些开发人员添加新的迁移时,如果在其他人推动新迁移之前,他会在Git中遇到冲突,并且必须修复排序。
在Flyway如何做到这一点?如果并行添加迁移,如何控制订单?
答案 0 :(得分:0)
首先阅读https://flywaydb.org/documentation/migrations
对于唯一版本号,您可以使用类似维基页面或白板一角的内容来指示下一个可用版本号。然后,开发人员可以抓住它并为下一个需要的人更新它。或者,您也可以使用反向时间戳作为版本。
答案 1 :(得分:0)
您应该就命名约定达成一致,这在发生冲突时很容易解决。
例如:
V0_11_005__ddl_create_module_table.sql
其中V0_11是例如您当前的版本号。跟随3位数字的默认值增加5(例如)
因此,想象版本11是开发人员开始工作的新版本:
当Developer 2尝试合并其更改时,这将失败,因为2个文件具有相同的版本号。 Dev 2只需将其重命名为V0_11_006__ddl_create_bar.sql。
所以Dev1,Dev2,Dev3脚本的顺序都没问题。
答案 2 :(得分:0)
我创建了一个简单的bash脚本,以在创建迁移时添加时间戳前缀,就像Ruby on Rails一样。我不太懂bash,所以很简单,但是可以完成工作。
版本化的迁移名称将类似于:V20191010172609609554__migration_description.sql
#!/bin/bash
set -e
help="Create a blank migration for flyway.\n\nUsage:\n-d\tDescription of the migration (will be set as the filename). Surround description with \"\".\n-t\tThe type of the migration. R for reusable, V for versioned."
while getopts ":t:d:h:" opt; do # get named arguments t, d, and h
case $opt in
t) type="$OPTARG"
;;
d) desc="$OPTARG"
;;
h) echo -e $help
;;
\?) echo -e "Invalid option -$OPTARG \t Run with -help to see valid options." >&2
;;
esac
done
if [[ -n $type && -n $desc ]]; then
temp=$(echo "$desc" | sed "s/ /_/g") # replace spaces by underscores
desc=$(echo "$temp" | sed "s/__/_/g") # replace possible duplicated underscores
if [ "$type" == "V" ]; then
timestamp="$(date +"%Y%m%d%H%M%S%3N")"
migration_name=$type$timestamp"__"$desc.sql
else
migration_name=$type"__"$desc.sql
fi
touch "../migrations/"$migration_name
echo "Created blank migration:"
ls ../migrations/ | grep $migration_name
echo "in the migrations folder"
fi