Jat*_*tra 35 git cvs git-svn git-cvs
CVS中有一个中央存储库,我想在本地使用Git,然后将我的更改发送回CVS.
我每天能做到什么?
我想完成的任务是:
顺便说一下,我也看过了使用git和CVS的最佳实践.但它没有用,我无法弄清楚我错过了什么或做错了什么.
gpo*_*poo 47
我过去做的是:
使用:
$ git cvsimport -C target-cvs -r cvs -k -vA authors-file.txt -d $CVSROOT module
Run Code Online (Sandbox Code Playgroud)
哪里:
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_namemodule是我要克隆的存储库中的模块.如果存储库只有一个模块,则可能与之相同project_name.可以重复我之前写的命令.在该特定示例中,它应该在父目录中运行target-cvs.为了使将来更容易,您可能需要配置一些变量(您可以在" 如何将修订历史从mercurial或git导出到cvs? "的答案中阅读更多详细信息 )
$ git cvsimport
Run Code Online (Sandbox Code Playgroud)
这足以使本地存储库git与CVS中的远程存储库保持同步.
从现在开始,每个更改都应该在本地git分支中进行.一个功能,一个分支.为此,我使用了" 成功的Git分支模型 "中描述的工作流程.唯一的区别是master指向CVS,但从概念上讲,这里可以应用相同的工作流程.这只是一个惯例.
在CVS中推送提交后,它将在下一次更新(git cvsimport)中返回到master .然后,您可以删除实现该功能的本地分支.
对于正在进行的工作(在当地分支机构),你应该rebase反对主人.由于您将功能分开,因此解决冲突应该更容易.棘手的部分是当一些分支依赖于其他分支,但仍然可管理.微提交有很多帮助(如任何git工作流程).
如果每个本地分支都被重新定位并且主人从未接触过(除了更新),那么git
cvsexportcommit应该正常工作.请记住,它适用于一次提交.这有点乏味,但总比没有好.鉴于前面的示例,命令应该类似于:
$ git cvsexportcommit -vc commit-id
Run Code Online (Sandbox Code Playgroud)
如果您只具有对远程CVS的只读访问权限,那么您可以通过电子邮件发送补丁程序或将您的git存储库公开,以便委托人可以获取补丁程序以应用它们.在这种情况下,与CVS的正常工作流程没有什么不同.同样,在下一次更新中,您将看到master中的更改.
git cvsimport由于cvsps 工具不兼容,最近的版本被破坏了.
所以你要安装cvsps-2.1.
在OSX上你可以(拥有brew):
brew tap homebrew/versions
brew install cvsps2
brew unlink cvsps
brew link --overwrite cvsps2
Run Code Online (Sandbox Code Playgroud)
并像往常一样导入空git存储库,例如:
git cvsimport -C RepoName -r cvs -o master -k -v -d:pserver:anonymous@reponame.cvs.sourceforge.net:/cvsroot/path ModuleName
Run Code Online (Sandbox Code Playgroud)
您还可以使用cvs2git可以将CVS存储库转换为git的工具.但是,您需要访问CVSROOT目录.
检查cvs2git文档以了解安装步骤.
用法示例:
cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo
Run Code Online (Sandbox Code Playgroud)
这将以git快速导入格式创建两个输出文件.这些文件的名称由选项文件或命令行参数指定.在示例中,这些文件名为cvs2git-tmp/git-blob.datand cvs2git-tmp/git-dump.dat.
这些文件可以通过以下方式导入空git存储库:
cat git-blob.dat git-dump.dat | git fast-import
Run Code Online (Sandbox Code Playgroud)
然后删除TAG.FIXUP分支并运行gitk --all以查看转换结果.
通过运行检查更多:cvs2git --help.