如何导入和保持更新Git中CVS仓库? [关闭](How to import and keep

2019-06-26 02:09发布

有一个在CVS的中央存储库,我想使用Git本地使用它,然后把我变回CVS。

我能做到的是每天的基础上呢?

我想完成的任务是:

  • 进口分支机构,
  • 让历史在GIT般的格式,
  • 出口回到我的更改/承诺的集中式服务器

顺便说一句,我也看了一下最佳实践使用Git与CVS 。 但它没有工作,我想不出什么我错过或做错了。

Answer 1:

我在过去做的是:

导入CVS仓库

使用:

$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module

哪里:

  • target-cvs是保持我的本地仓库的副本的目录。
  • cvs是用于引用远程存储库的名称。 所以,我将有cvs/mastercvs/HEAD等由当地指出master
  • authors-file.txt是包含CVS帐户名称和电子邮件+之间的匹配的文件,每行包含userid=User Name <useremail@hostname>
  • $CVSROOT是CVS服务器程序存储库。 如果我使用一些SourceForge的仓库匿名克隆,然后我会用: :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
  • module是我想克隆仓库内的模块。 如果存储库只有一个模块,那么可能将是一样project_name

更新资源库

它是可以重复我以前写的命令。 在特定的例子中,它应该在的父目录中运行target-cvs 。 为了使其在未来更容易,您可能需要配置一些变量(可以的回答更多的细节“ 如何导出修订历史从水银或Git用CVS? ”)

$ git cvsimport

这将是足以让本地仓库中git与远程之一CVS同步。

日常工作

从现在起,每一个变化应该在当地的分支机构的Git。 一个特点,一个分支。 对于这一点,我在使用“描述的工作流程一个成功的Git分支模型 ”。 唯一的区别是, 硕士点到CVS,但在概念上相同的工作流程可以在这里使用。 这仅仅是一个惯例。

一旦你犯CVS被按下时,它会回到主人在下次更新( git cvsimport )。 然后,您可以删除实施该功能的本地分支。

对于进行中的工作(在当地的分支机构),你应该rebase它们对主人。 因为你具备的功能分开,应该是比较容易解决的冲突。 最棘手的部分是当一些分支机构寄人篱下,但仍在可控范围内。 微提交有很大帮助(如在任何git的工作流程)。

如果每个地方分支重订和主从未接触过(除更新),然后git cvsexportcommit应该只是工作。 请记住,它为一个承诺。 这是一个有点乏味,但它总比没有好。 鉴于前面例子中的命令应该是这样的:

$ git cvsexportcommit -vc commit-id

如果您只具有只读到远程CVS访问,那么你可以通过电子邮件发送补丁或者使你的git仓库公开,所以commiters可以抓住你的补丁应用它们。 从没有在这种情况下,CVS的正常工作流程不同。 再次,在未来的更新,你会看到在的变化。



Answer 2:

随着新版本git cvsimport被打破,因为, cvsps 工具不兼容 。

所以,你已经安装cvsps-2.1

在OSX你可以(有brew ):

brew tap homebrew/versions
brew install cvsps2
brew unlink cvsps
brew link --overwrite cvsps2

而就空git仓库像往常一样,例如输入:

git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName

您还可以使用cvs2git工具,它可以转换一个CVS仓库与git。 但是你需要有访问CVSROOT目录。

检查cvs2git文档中的安装步骤。

实例:

cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo

这将在Git中快速导入格式创建两个输出文件。 这些文件的名称由你的选择文件或命令行参数中指定。 在这个例子中,这些文件被命名为cvs2git-tmp/git-blob.datcvs2git-tmp/git-dump.dat

这些文件可以导入到空的Git仓库方式:

cat git-blob.dat git-dump.dat | git fast-import

然后删除TAG.FIXUP分支和运行gitk --all查看转换的结果。

检查多,通过运行: cvs2git --help



Answer 3:

我相信没有准备好你的情况来使用配方。 但是,你可以尝试以下操作:

  • 手动synching CVS数据使用Git,或写的脚本。 他们会从CVS获取信息,并把它的Git。 这会给你在Git的某种历史。 没有完全干净的,不完全可用,但仍。
  • 迁移CVS仓库使用到Git 工具喜欢git cvsimport 。 并要求GIT中假装是其他开发商CVS,使用git cvsserver


文章来源: How to import and keep updated a CVS repository in Git? [closed]