我的问题相对简单,因为我尝试在 Flyway CLI 的帮助下进行迁移。
这里的问题是,系统以错误的顺序对迁移文件进行排序,并且我的新文件不被视为最新版本。这些文件与 POM 具有相同的版本,因此我们知道哪些版本发生了更改。
当前版本是 1.4.11,但它被视为较旧的版本。
V1_4_11.001
应该比V1_4_7.001
这是为什么?如何在不使用 outOfOrder 标志的情况下修复它?完全相同的文件在我的 MacBook 上的顺序是正确的。
-rw-r--r-- 1 501 staff 226 Oct 18 16:02 V1_1_0__patch.sql
-rw-r--r-- 1 501 staff 3174 Oct 18 16:02 V1_2_0__patch.sql
-rw-r--r-- 1 501 staff 1774 Oct 18 16:02 V1_2_2__patch.sql
-rw-r--r-- 1 501 staff 130 Oct 18 16:02 V1_4_0.001__merge_skill_level_godlike.sql
-rw-r--r-- 1 501 staff 111 Oct 18 16:02 V1_4_0.002__modify_publications.sql
-rw-r--r-- 1 501 staff 2149 Oct 18 16:02 V1_4_0.003__create_v_competence_by_experience.sql
-rw-r--r-- 1 501 staff 55 Oct 18 16:02 V1_4_11.001__add_profile_updated_on.sql // Newest version
-rw-r--r-- 1 501 staff 712 Oct 18 16:02 V1_4_7.001__add_duration.sql
答案1
问题是ls
根据a对其输出进行排序“字典顺序”排序文件名。按照这个顺序,V1_4_11
先于V1_4_1
后,V1_4_2
等等。
-v
由于您使用的是 Debian,因此有一个标志ls
可以执行您想要的操作:
-v
文本中(版本)数字的自然排序
例如,如果我根据您的示例创建空文本文件,则“正常”输出顺序为:
myuser@myhost:~$ ls -l
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_1_0__patch.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_0__patch.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_2__patch.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.001__merge_skill_level_godlike.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.002__modify_publications.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.003__create_v_competence_by_experience.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_11.001__add_profile_updated_on.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_7.001__add_duration.sql
如果我使用该-v
标志,它会得到:
myuser@myhost:~$ ls -lv
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_1_0__patch.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_0__patch.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_2_2__patch.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.001__merge_skill_level_godlike.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.002__modify_publications.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_0.003__create_v_competence_by_experience.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_7.001__add_duration.sql
-rw-r--r-- 1 myuser mygroup 0 Okt 19 00:47 V1_4_11.001__add_profile_updated_on.sql
然而,请注意,这实际上只是顺序ls
,请注意,这实际上只是命令输出文件;它与文件在文件系统上的内部组织方式无关。另外,您不应该尝试解析输出ls
为了识别最新的文件;如果这是最终目标,还有其他方法可以做到这一点(但这取决于您使用的 shell 以及您到底想要做什么)。