[英]How to import and keep updated a CVS repository in Git?
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 account 和 Name+email 匹配的文件,每行包含userid=User Name <useremail@hostname>
$CVSROOT
是 CVS 存储库服务器。 如果我使用某个 sourceforge 存储库中的匿名克隆,那么我将使用: :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project_name
module
是我要克隆的存储库内的模块。 如果存储库只有一个模块,则可能与project_name
相同。可以重复我之前写的命令。 在那个特定的例子中,它应该在target-cvs
的父目录中运行。 为了以后更方便,您可能需要配置一些变量(您可以在“ 如何将修订历史从 mercurial 或 git 导出到 cvs? ”的答案中阅读更多详细信息)
$ git cvsimport
这足以使git
的本地存储库与 CVS 中的远程存储库保持同步。
从现在开始,每个更改都应该在本地 git 分支中进行。 一个功能,一个分支。 为此,我使用了“成功的 Git 分支模型”中描述的工作流程。 唯一的区别是master指向 CVS,但从概念上讲,这里可以应用相同的工作流程。 这只是一个约定。
一旦您的提交在 CVS 中推送,它将在下一次更新 ( git cvsimport
) 中返回到 master。 然后,您可以删除实现该功能的本地分支。
对于进行中的工作(在当地的分支机构),你应该rebase
它们对主人。 因为您将功能分开,所以解决冲突应该更容易。 棘手的部分是一些分支依赖于其他分支,但仍然可以管理。 微提交有很大帮助(就像在任何 git 工作流程中一样)。
如果每个本地分支都重新定位并且 master 从未接触过(更新除外),那么git cvsexportcommit
应该可以正常工作。 请记住,它适用于一次提交。 这有点乏味,但总比没有好。 鉴于前面的例子,命令应该是这样的:
$ git cvsexportcommit -vc commit-id
如果您只有远程 CVS 的只读访问权限,那么您可以通过电子邮件发送补丁或公开您的 git 存储库,以便提交者可以获取您的补丁来应用它们。 在这种情况下,与 CVS 的正常工作流程没有什么不同。 同样,在下一次更新中,您将看到master 中的更改。
由于cvsps
工具不兼容,最新版本的git cvsimport
已损坏。
所以你必须安装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 fast-import 格式的输出文件。 这些文件的名称由您的选项文件或命令行参数指定。 在示例中,这些文件被命名为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
等工具将您的 CVS 存储库迁移到 Git。 并使用git cvsserver
要求 Git 假装是其他开发人员的 CVS。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.