【问题标题】:Mirroring CVS repository to git repository将 CVS 存储库镜像到 git 存储库
【发布时间】:2012-08-14 20:57:22
【问题描述】:

我已经四处搜索,但我不明白什么是最好的方法:我想克隆一个现有的 CVS 存储库(特别是 OpenSSH 可移植),或者它的修订版(例如 v6.0p1)一个 git repo,用于应用个人补丁。每当发布另一个稳定的 OpenSSH 时,我还想合并更改。它不必是实时的或任何特殊的,只要能够将我的补丁合并到新版本即可。

我以前有 git(和 SVN 经验),但没有 CVS 经验。

【问题讨论】:

标签: git cvs


【解决方案1】:

您有两个选择:维护供应商分支或使用git cvsimport。您使用哪一种取决于您想要多少历史记录以及您的耐心程度。

如果您想要完整的历史记录并且有耐心,您可以使用 git cvsimport 将整个 CVS 存储库导入 git。如果幸运的话,您可能会发现其他人已经这样做了,并且正在更新结果——如果您信任他们,使用他们的 repo 是最好的选择。

如果您不需要完整的历史记录或不耐烦,您可以维护一个供应商分支:这是我们在拥有 DVCS 之前所做的 :)。获取当前版本的副本,将其放在名为“vendor”的分支中,并以此为基础进行工作。当下一个版本发布时,切换回供应商分支,更新它以匹配新版本并酌情合并/重新设置基准。

请注意,虽然使用 DVCS 时很少需要供应商分支,但它们在 git 中实际上比在 Subversion 中要容易得多,因为 git 不需要您识别重命名并且(与现在的 svn 一样)不需要'不要在你的工作副本中留下元数据,当你解压最新版本时,这些元数据会突然出现。

【讨论】:

  • 我想我不完全理解:您建议使用 CVS 结帐,将工作目录放在 git 下(忽略 CVS 元数据文件?),然后从那里开始工作。当新版本发布时,使用 cvs 更新 CVS 工作目录('vendor' 分支),将其提交到 git,并合并到开发分支。对吗?
  • 足够接近第一个近似值。我会非常小心地为 CVS 和 git 工作副本使用相同的目录:将文件从 CVS WC 复制到 git WC 更安全。您也不必在此方案中使用 CVS:如果您正在使用发行版,则可以将发行版 tarball 提取到您的 git 工作副本中。不过,更好的是使用git cvsimport 或找到已经这样做的人。
  • 我没有见过定期更新的 OpenSSH 镜像,我也不想仅仅为了偶尔的版本镜像一个 13 年的存储库。而且,发布 tarball 与存储库不同,我更喜欢从源代码修补。我想我会做的是:将一个版本签出到供应商分支,不包括 CVS 元数据。当一个新版本出来时,我可以在我的仓库中的版本和新版本之间做cvs rdiff,并将它应用到供应商分支。然后我可以将它与我的补丁合并。
  • 如果这对你来说仍然是个问题,看起来 GitHub 在这里有一个镜像:github.com/openssh/openssh-portable。我很想知道你是如何与你的供应商分支相处的:)。
  • 这种镜像的问题是你无法判断代码是否未被篡改,它不是“官方”或来自某些已知来源。并且检查(没有 git 哈希等)并非易事。我所做的就是下载一个 ssh 压缩包并将其放在供应商分支中,在另一个分支上进行更改,当新版本的 OpenSSH 出现时,下载新的压缩包并覆盖供应商分支,然后合并更改到其他分支,所以其他分支有新版本和你的补丁。你可以在这里看到我做了什么:github.com/orishavit/OpenSSH
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-16
  • 2013-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多