- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试将我的个人 Perforce 服务器从 Windows 迁移到 Linux (Ubuntu 20.04),但在 Linux 服务器上从 Windows 服务器重放检查点文件时遇到问题。
我想继承 Linux 的案例处理,根据 Perforces 的文档,使用 p4migrate 工具应该可以实现。我已经在 Linux 服务器上安装了该工具,并严格按照文档中的步骤进行操作(此时已多次执行),但仍然遇到以下错误。
请注意,当使用 p4migrate 创建已编辑的检查点文件时,它报告没有报告案例问题/冲突。在第一次尝试时,它还成功地重命名了所有存档文件以匹配 Linux 的大小写处理(并且我已经更改了行尾)。
这只是它似乎无法恢复的数据库。我正在使用以下命令从 p4migrate 创建的检查点文件重建数据库:
p4d -r /mnt/Disk/PerforceServer/root -jr checkpoint.4.edited
但这样做会产生以下输出:
Perforce db files in '/mnt/Disk/PerforceServer/root' will be created if missing...
Recovering from checkpoint.4.edited...
Perforce server error:
Journal file 'checkpoint.4.edited' replay failed at line 5145!
Case-handling mismatch: server uses Unix-style (-C0) but journal flags are Windows-style (-C1)!
我做了几次尝试,但结果总是一样的。它创建所有的 .db 文件,但随后几乎立即停止。我自然地检查了它报告的行,并用细齿梳检查了检查点文件(大约 45mb),但没有发现任何问题。
我怀疑这里有其他问题,但似乎没有办法获得更详细的日志记录。有没有人遇到过这个问题并找到了解决方案?
附录:我还运行了 p4d -jv checkpoint.4.edited,它只报告了以下内容:trailer found on line 196624
(文件末尾)
最佳答案
经过一周的脱发经历后,我终于能够获得解决问题所需的信息。首先要注意的是,上面给出的错误完全是误导性的。实际上,它提到的检查点文件没有问题,这纯粹是个案处理问题。我不知道为什么它会将该行作为错误吐出来,但这与它无关。
提醒一下,我正在将 Windows 服务器转移到 Linux 服务器 (Ubuntu 20.04),并且我使用的是 Perforce 20.3 版。您必须确保源计算机和目标计算机上的两个版本相同。我通过更新我的 Windows 服务器解决了这个问题,然后运行 p4d -xU
命令来升级数据库。
我的目标还在于在 Linux 上运行区分大小写 服务器。 Perforce 提供了 p4migrate 工具来支持这种转换,但至少根据我目前的经验,该工具有几个错误,文档中也包含一两个错误。我会将我的发现转发给 P4,希望他们能修复它,当然,除非我非常不走运。
您需要遵循 p4migrate 文档中的所有步骤直至并包括 第 4 步。第 5 步开始有所不同。问题是 p4migrate 似乎并没有真正改变检查点文件中的案例处理方法,所以你必须手动设置它。我不确定这是否是一个错误,但这解决了大小写不匹配/BTree 问题并成功重放检查点。
可以通过调整第一个@nx@ 条目(对我来说是检查点文件的第一行)来手动更改案例处理方法。第五个字段表示它。 1 = 区分大小写,2 = 不区分大小写。要将检查点更改为区分大小写,请执行以下操作:
@nx@ 0 1610070027 @51@ 2 0 0 0 0 @/path/to/root@ @journal@ @@ @@ @@
Changes to:
@nx@ 0 1610070027 @51@ 1 0 0 0 0 @/path/to/root@ @journal@ @@ @@ @@
需要注意的是,我对 p4migrate 的输入 和 输出文件进行了此操作。即使在编辑了输入检查点之后,p4migrate 仍然输出了一个不区分大小写的检查点(也许这是因为我没有要解决的冲突)。完成此操作后,继续执行其余步骤,包括第 10 步。我在此步骤中用于重放检查点的命令如下:
p4d -r /Folder1/Folder2/PerforceServer/root/ -jr checkpoint.n.edited
然后您可以启动区分大小写的服务器。请注意,我运行 p4 verify -q//...
的每个文件在这个阶段都返回了 BAD! 警告,但我没有 MISSING!
警告。如文档所述,您现在可以忽略 BAD! 警告。
最后,步骤 11 中显示的命令似乎有 两个 个版本。p4migrate documentation 中的一个。 .
find $P4ROOT -type f \( -name "*,v" -o -name ".*,v" \) -print \
-exec perl -p -i -e 's/\r\n/\n/' \{} \;
还有一个来自 Cross-Platform Migration knowledgebase article .
find . -type f -name '*,v' -print -exec perl -p -i -e 's/\r\n/\n/g' {} \;
注意细微差别。我不是 Linux/Perl 专家 - 但 p4migrate 文档中缺少的“g”提示我那里有错字。因此,我为每个软件仓库运行了这个版本的命令,明确地说:
find /folder/anotherfolder/Depot1/ -type f -name '*,v' -print -exec perl -p -i -e 's/\r\n/\n/g' {} \;
find /folder/anotherfolder/Depot2/ -type f -name '*,v' -print -exec perl -p -i -e 's/\r\n/\n/g' {} \;
等...
然后我再次运行 p4 verify -q//...
(第 12 步),它没有返回任何错误!现在您需要做的就是使用 p4dctl 启动一个区分大小写的 Perforce 服务,您就可以离开了。同步再次工作,我什至不必手动强制 p4 verify 来更新 MD5 校验和。希望这对遇到此问题的其他人有所帮助。
关于linux - Perforce:从 Windows 到 Linux 的交叉迁移无法重放检查点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65586008/
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
Linux 管道可以缓冲多少数据?这是可配置的吗? 如果管道的两端在同一个进程中,但线程不同,这会有什么不同吗? 请注意:这个“同一个进程,两个线程”的问题是理论上的边栏,真正的问题是关于缓冲的。 最
我找到了here [最后一页] 一种有趣的通过 Linux 启动 Linux 的方法。不幸的是,它只是被提及,我在网上找不到任何有用的链接。那么有人听说过一种避免引导加载程序而使用 Linux 的方法
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我试图了解 ld-linux.so 如何在 Linux 上解析对版本化符号的引用。我有以下文件: 测试.c: void f(); int main() { f(); } a.c 和 b.c:
与 RetroPie 的工作原理类似,我可以使用 Linux 应用程序作为我的桌面环境吗?我实际上并不需要像实际桌面和安装应用程序这样的东西。我只需要一种干净简单的方法来在 RaspberryPi 上
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
有什么方法可以覆盖现有的源代码,我应该用 PyQt、PyGTK、Java 等从头开始构建吗? 最佳答案 如果您指的是软件本身而不是它所连接的存储库,那么自定义应用程序的方法就是 fork 项目。据我所
我的情况是:我在一个磁盘上安装了两个 linux。我将第一个安装在/dev/sda1 中,然后在/dev/sda2 中安装第二个然后我运行第一个系统,我写了一个脚本来在第一个系统运行时更新它。
我在 i2c-0 总线上使用地址为 0x3f 的系统监视器设备。该设备在设备树中配置有 pmbus 驱动程序。 问题是,加载 linux 内核时,这个“Sysmon”设备没有供电。因此,当我在总线 0
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我正试图在 linux 模块中分配一大块内存,而 kalloc 做不到。 我知道唯一的方法是使用 alloc_bootmem(unsigned long size) 但我只能从 linux 内核而不是
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我有 .sh 文件来运行应用程序。在该文件中,我想动态设置服务器名称,而不是每次都配置。 我尝试了以下方法,它在 CentOS 中运行良好。 nohup /voip/java/jdk1.8.0_71/
我是在 Linux 上开发嵌入式 C++ 程序的新手。我有我的 Debian 操作系统,我在其中开发和编译了我的 C++ 项目(一个简单的控制台进程)。 我想将我的应用程序放到另一个 Debian 操
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 4 年前。 Improve this ques
我使用4.19.78版本的稳定内核,我想找到带有企鹅二进制数据的C数组。系统启动时显示。我需要在哪里搜索该内容? 我在 include/linux/linux_logo.h 文件中只找到了一些 Log
我知道可以使用 gdb 的服务器模式远程调试代码,我知道可以调试针对另一种架构交叉编译的代码,但是是否可以更进一步,从远程调试 Linux 应用程序OS X 使用 gdbserver? 最佳答案 当然
是否有任何可能的方法来运行在另一个 Linux 上编译的二进制文件?我知道当然最简单的是在另一台机器上重建它,但假设我们唯一能得到的是一个二进制文件,那么这可能与否? (我知道这可能并不容易,但我只是
我是一名优秀的程序员,十分优秀!