有一个在CVS的中央存储库,我想使用Git本地使用它,然后把我变回CVS。
我能做到的是每天的基础上呢?
我想完成的任务是:
- 进口分支机构,
- 让历史在GIT般的格式,
- 出口回到我的更改/承诺的集中式服务器
顺便说一句,我也看了一下最佳实践使用Git与CVS 。 但它没有工作,我想不出什么我错过或做错了。
有一个在CVS的中央存储库,我想使用Git本地使用它,然后把我变回CVS。
我能做到的是每天的基础上呢?
我想完成的任务是:
顺便说一句,我也看了一下最佳实践使用Git与CVS 。 但它没有工作,我想不出什么我错过或做错了。
我在过去做的是:
使用:
$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module
哪里:
target-cvs
是保持我的本地仓库的副本的目录。 cvs
是用于引用远程存储库的名称。 所以,我将有cvs/master
, cvs/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的正常工作流程不同。 再次,在未来的更新,你会看到在主的变化。
随着新版本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.dat
和cvs2git-tmp/git-dump.dat
。
这些文件可以导入到空的Git仓库方式:
cat git-blob.dat git-dump.dat | git fast-import
然后删除TAG.FIXUP
分支和运行gitk --all
查看转换的结果。
检查多,通过运行: cvs2git --help
。
我相信没有准备好你的情况来使用配方。 但是,你可以尝试以下操作:
git cvsimport
。 并要求GIT中假装是其他开发商CVS,使用git cvsserver
。