- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
这是 a previous question of mine 的后续。
我可以查看 cvsps 的输出(保存在我的 ~/.cvsps 目录中)并查看主要、复杂提交的补丁集。但是当我执行 cvsimport 更新我现有的 git 存储库时,这个提交不会出现。我知道 git-cvsimport 会忽略更新超过 10 分钟的补丁集,以避免导入不完整的 CVS 提交。我想我也听说过它会跳过无法识别相关分支的补丁集。还有什么其他原因可能导致 git-cvsimport 忽略我的提交?我该如何调试?
这里是一些 cvsps 输出:
patchset: 50064
date: 1238445635
author: skiphoppy
tag:
tag_flags: 0
branch: HEAD
branch_add: 1
descr:
My log message
-=-END CVSPS DESCR-=-
members:
file:ordinaryChangedFile; pre_rev:1.44; post_rev:1.45; dead:0; branch_point:0
file:newFileRenamedAndModifiedFromOldFile; pre_rev:INITIAL; post_rev:1.1; dead:0; branch_point:0
file:deletedFileGoneBecauseRenamed; pre_rev:1.2; post_rev:1.3; dead:1; branch_point:0
...
那行 branch_add: 1 与它有什么关系吗?整个存储库中只有 9 个这样的提交;其他 50090 提交说 branch_add: 0。除此之外,我不知道从 cvsps 或 git-cvsimport 的角度来看有什么区别。提交很复杂,涉及重命名多个文件并进行相关内容修改。 CVS 绝对难以处理。当然,对于 git 来说是一个 snap,但是当真正的后端是 CVS 时,git 很难处理。
我必须再执行三次相同类型的复杂提交,而且由于 cvsimport 无法执行,我不能每次都花费 4.5 小时从 CVS 重新导入一个全新的 git 存储库查看我的提交。
更重要的是,我每天运行 git-cvsimport(我打算将其放入 cron,或者甚至编写一个守护进程以每五分钟左右运行一次)可能 错过 future 的 promise !我发现没有办法 git 一个现有的存储库来获取这些提交;我只能在一个全新的存储库中运行 git-cvsimport 并永远等待,当我在运行它时,我的许多其他分支都无法使用。
最佳答案
嗯,这可能是问题所在。我的 git-cvsimport 行看起来像这样:
git cvsimport -p x ...
-p x 应该将 -x 选项传递给 cvsps 以告诉它忽略它在之前运行中留下的缓存输出。我认为这样做的主要原因是最后几个可能不完整的补丁集将被丢弃并在您下次运行时完成。事实证明,它可能修复了更多问题,这可能是其中之一。
我从 this blog entry 学会了以这种方式运行 git cvsimport ,这是目前谷歌上“git cvs”的最高点击率之一。只有在上面的过程中,我试图通过 Perl 调试器在 cvsps 的输出上运行 git-cvsimport,我才不得不检查并查看哪些参数真正用于 cvsps。我了解到 cvsps 是这样运行的:
cvsps --norc x --cvs-direct ...
代替:
cvsps --norc -x --cvs-direct ...
我通过实验验证了当传递 x 而不是 -x 时,我从 cvsps 得到了不同的输出,缺少一些补丁集(我不知道模式是什么)。多亏了墨菲定律,cvsps 似乎没有报告这是一个问题,而 git-cvsimport 从来没有看到它。
所以无论如何,git cvsimport 需要像这样运行:
git cvsimport -p -x ...
我以前版本的这个存储库在这一点上已经完全清理干净了,但是我已经能够强制将最后一个问题提交到它们中(尽管一些早期的提交丢失了)。所以我又经历了一次四小时的导入过程,我希望就这样!
最后一个提示:Windows 上的 git-cvsimport 似乎根本不起作用。我得到的提交数量不到 10%,尽管我最终得到了一棵类似于我们项目当前状态的树。它似乎缺少几乎所有的历史......
关于git - 为什么 git-cvsimport 缺少一个主要的补丁集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702980/
我们使用 git-cvsimport 定期将更改从 cvs 复制到 git 无论好坏,我们坚持使用 git cvsimport 而不是 cvs2svn。最初我们计划了一个“一劳永逸”的 cvs-to-
git-cvsimport 是标准 Git 安装的一部分吗?我有两台 Git 版本为 1.7.3.1 和 1.7.4 的服务器,但它们似乎都没有 git-cvsimport。它是更高版本的一部分吗?
我正在尝试将 cvs 模块导入现有的 git 存储库。如果我导入一个新的 repo 协议(protocol),我可以让它正常工作,但是当我尝试导入现有的 repo 协议(protocol)时,它似乎决
大约 40 分钟前,我使用 git-cvsexportcommit 提交了一个特别复杂的更改,涉及从 git 到 cvs 的几个文件重命名、 merge 和删除。一切顺利,从 CVS checkout
我正在使用 git cvsimport 与 cvs 服务器一起工作,它工作正常。然而,一些非常古老的项目有很多提交和大文件。它导致 cvsimport 花费很长时间检查所有提交并将它们转换为 git
我们正在尝试从 cvs 迁移到 git。 我们的目标是1) 完善当前代码库2)可用的历史。如果它在旧分支中缺少条目,我们不会太在意。 两条评论: 即使使用 cvs 存储库的本地副本,也需要很长时间。试
这是 a previous question of mine 的后续。 我可以查看 cvsps 的输出(保存在我的 ~/.cvsps 目录中)并查看主要、复杂提交的补丁集。但是当我执行 cvsimpo
完成后 git cvsimport 我以前的提交属于用户“user”(用户是我的 unix 用户名)。 我如何告诉 git 这些提交是我的(即定义从“user”到我的“First Lastname ”
我正在从 CVS 迁移到 Git。我正在 Cygwin 终端上尝试以下命令 $ git cvsimport -v -d :pserver:kashif.nazar@cvs-server:/cvsroo
我正在尝试导入一个在 cvs 中发展了几年的项目。它有一些用于补丁发布、标签和头部的分支。这是我正在使用的命令: git cvsimport -r cvs -k -d :pserver:@cvs:/
这个问题在这里已经有了答案: 关闭 12 年前。 Possible Duplicates: working with .git/info/exclude too late .gitignore fi
我正在尝试 git-cvsimport 来自 CVS 的几个不同模块,所有这些都在不同的分支上。 到目前为止,我已经这样做了(在伪 bash 代码中): for each ($MODULE, $BRA
我是一名优秀的程序员,十分优秀!