为什么 git-cvsimport 缺少一个主要补丁集?

2024-04-24

这是后续我之前的一个问题 https://stackoverflow.com/questions/683091/how-do-i-debug-git-cvsimport-cant-see-complicated-commit.

我可以查看 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 来说是一个快照,但是当真正的后端是 CVS 时,git 很难处理。

我必须再执行三次相同类型的复杂提交,而且由于 cvsimport 无法看到我的提交,我无法每次花费 4 1/2 小时从 CVS 重新导入全新的 git 存储库。

更重要的是,我担心我每天运行的 git-cvsimport (我打算将其放入 cron 中,甚至编写一个守护进程每五分钟左右运行一次)可能会miss承诺未来!我发现没有办法 git 现有的存储库来获取这些提交;我只能在一个全新的存储库中运行 git-cvsimport 并永远等待,从而失去了对许多其他分支的使用。


嗯,这可能就是问题所在。我的 git-cvsimport 行如下所示:

git cvsimport -p x ...

-p x 应该将 -x 选项传递给 cvsps,告诉它忽略之前运行时留下的缓存输出。我认为这样做的主要原因是,最后几个可能不完整的补丁集将被丢弃并在下次运行时完成。事实证明,它可能修复了更多问题,这可能就是其中之一。

我学会了以这种方式运行 git cvsimport这个博客条目 http://issaris.blogspot.com/2005/11/cvs-to-git-and-back.html,目前是 Google 上“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%。它似乎缺乏几乎所有的历史......

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 git-cvsimport 缺少一个主要补丁集? 的相关文章

  • 无法推送到远程 GIT 存储库 - “[...] 似乎不是 git 存储库”

    我已经在我的服务器上使用适当文件夹中的以下内容设置了 GIT 存储库 我的子域的根目录 git mydomain com mkdir foo git cd foo git git init bare shared 这将使存储库可通过 URL
  • 如何使用 hg Convert 将 git 分支导入到 Mercurial 中?

    我的 git 存储库中有许多分支 david Panama app git branch r origin HEAD gt origin master origin master origin newButtons origin newFo
  • “分支”到底是什么意思?

    长话短说 据我所知 术语 分支 Git 术语 可能指的是相关但不同的事物 指向提交的非符号引用 指针 此类引用的名称 例如 master 存储库提交 DAG 的子图 由此类引用所指向的提交可到达的所有提交组成 然而 我发现这个术语显然指的是
  • Git checkout 分支从其他分支留下目录树

    我有一个branch2 其源是branch1 并重命名了源自branch1 的目录 当签出branch1时 重命名的目录仍然存在 但没有标记为未暂存的修改 重命名的目录当然不会作为branch1 上的提交出现 为什么会出现这种情况 上述目录
  • jenkins构建完成后如何将更改推送到github?

    我有一个 jenkins 作业 它从 github 克隆存储库 然后运行 powershell 脚本来增加文件中的版本号 我现在正在尝试将该更新文件发布回 github 上的原始存储库 因此当开发人员提取更改时 他会获得最新的版本号 我尝试
  • Heroku上传-预编译资产失败

    我需要帮助 当尝试将我的应用程序上传到heroku时 我收到此错误 有人知道为什么吗 有几个是错的 谢谢 Using rake 10 1 0 Using tlsmail 0 0 1 Using uglifier 2 1 2 Your bun
  • 执行 rebase 后,Git 提交会在同一分支中重复

    我理解 Pro Git 中提出的场景是关于变基的危险 https git scm com book en v2 Git Branching Rebasing rebase peril 作者基本上告诉你如何避免重复提交 不要对已推送到公共存储
  • git rebase 开发分支

    抱歉 只是另一个 变基 问题 但我对此感到困惑 我有时会将开发分支上的提交推送到远程 原始 现在 关于 rebase 总是提到的一件事是 如果您推送了更改 则永远不要 rebase 这意味着 我永远无法重新调整我的开发分支 只能合并它 在功
  • 如何将 git 存储库转换为 Mercurial?

    我一直在使用 git 作为源代码存储库开发 java 应用程序 我想与其他 java 开发人员分享该项目 hg 似乎是他们最常用的 我的问题是如何将 git 存储库转换为 hg 如果我尝试谷歌搜索 将 git 转换为 hg 并且每次搜索命中
  • Jenkins Git 参数插件无法获取标签

    詹金斯版本 1 593 Git 参数插件 0 4 0 GIT 客户端插件 1 16 1 我使用私有 git 存储库 可以通过 ssh 访问 我的构建是参数化的 git参数是TAG TO BUILD 要构建的分支是refs tags TAG
  • git 存储库中的提交次数

    我的一个为期 5 个月的项目即将结束 作为毫无意义的统计数据的粉丝 我想知道自存储库启动以来已经进行了多少次提交 我怎样才能发现这一点 Notes 我知道没有one存储库 我只对本地版本感兴趣 这在颠覆中是微不足道的 因为修订标识符 似乎是
  • 以最小的努力在多台计算机之间同步代码

    我希望能够跨多台计算机 准确地说是 3 台 同步源代码和整个项目 我尝试过使用 git 但从来没有获得过无忧无虑的体验 也许是因为我从来没有投入很多精力 所以 我理想中想要的是 能够将文件夹及其所有子文件夹添加到 同步 列表 基本上 一旦我
  • 如何从现有的远程分支创建本地分支?

    我想从现有的远程分支 假设是远程 A 创建一个分支 然后将更改提交到存储库 我已使用以下命令从现有的远程 A 创建本地分支 git checkout remote A git branch master remote A 现在我已经使用以下
  • git commit 给出错误:空提交集已通过

    当尝试恢复到以前的提交时 我尝试了 git revert no commit 0766c053 HEAD 然而这给出了一个错误 empty commit set passed 问题 该错误是什么意思 以及出了什么问题revert命令 删除
  • 为不同分支部署GitLab页面

    我正在使用 GitLab Pages 部署我的 React 应用程序 并且运行良好 这是我的gitlab ci yml Using the node alpine image to build the React app image nod
  • 无法在heroku上推送node.js应用程序

    我尝试在heroku 上推送我的node js 应用程序 但是 无法检测到此应用程序的默认语言 我什至尝试过heroku buildpacks set heroku nodejs 但还是无法推动 Counting objects 31 do
  • git merge 中“递归合并模式”旁边的这些符号是什么?

    当我使用git pull project name master为了更新我的核心文件 我在 递归合并 下得到了一堆绿色的加号和红色的减号信号 这些符号是什么以及它们的含义是什么 这是一个屏幕截图 感谢您的帮助 这是已更改的行数的近似值 优点
  • 使用 GIT_PS1_SHOWCOLORHINTS 自定义 __git_ps1 的颜色

    我尝试过的 我已更新我的提示以包含分支名称 git ps1 另外 我设置GIT PS1 SHOWCOLORHINTS 问题 提示正确显示 然而 树枝的颜色始终是绿色的 我预计肮脏的树枝会是红色的 文档指出 颜色基于 git status s
  • 使用 Git 和 Eclipse 管理 Android 项目

    我相信我有一个非常常见的问题 它会影响具有多个应用程序版本的开发人员 在我的例子中 我有两个 付费版本和免费版本 为了管理这两个版本 我使用具有 2 个不同分支的同一个 git 项目 免费和付费 然而 我的源代码包名称彼此不同 如预期 并且
  • git merge,保留两者

    为了合并 我用它来 保留我的 git merge X ours foo 这是 保留他们的 git merge X theirs foo 然而 在我最近的合并中 看起来最好保留双方 Git 是否有一个 策略 来避免手动编辑文件 没有解决这些冲

随机推荐