CVS中有一个中央存储库,我想在本地使用Git,然后将我的更改发送回CVS。
我每天能做到什么?
我想完成的任务是:
答案 0 :(得分:44)
我过去所做的是:
使用:
$ 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
的父目录中运行。为了使将来更容易,您可能想要配置一些变量(您可以在“How to export revision history from mercurial or git to cvs?”的答案中阅读更多详细信息)
$ git cvsimport
这足以使git
中的本地存储库与CVS中的远程存储库保持同步。
从现在开始,每个更改都应该在本地git分支中进行。一个功能,一个分支。为此,我使用了“ A successful Git branching model ”中描述的工作流程。唯一的区别是 master 指向CVS,但从概念上讲,可以在此处应用相同的工作流程。这只是一个惯例。
在CVS中推送提交后,它将在下一次更新(git cvsimport
)中返回到master。然后,您可以删除实现该功能的本地分支。
对于正在进行的工作(在本地分支机构中),您应rebase
反对主人。由于您将功能分开,因此解决冲突应该更容易。棘手的部分是当一些分支依赖于其他分支,但仍然可管理。微提交有很多帮助(如任何git工作流程)。
如果每个本地分支都已重新定位且主持人从未接触过(除了更新),那么git
cvsexportcommit
应该可以正常工作。请记住,它适用于一次提交。这有点乏味,但总比没有好。鉴于前面的示例,命令应该类似于:
$ git cvsexportcommit -vc commit-id
如果您只具有对远程CVS的只读访问权限,那么您可以通过电子邮件发送补丁程序或将您的git存储库公开,以便委托人可以抓取您的补丁程序以应用它们。在这种情况下,与CVS的正常工作流程没有什么不同。同样,在下一次更新中,您将看到 master 中的更改。
答案 1 :(得分:7)
由于git cvsimport
tool incompatibility,最新版本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 documentation是否有安装步骤。
使用示例:
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
来检查更多内容。
答案 2 :(得分:2)
我相信在你的情况下没有准备好使用食谱。但是,您可以尝试以下方法:
git cvsimport
等git cvsserver
将您的CVS存储库迁移到Git。并请Git使用{{1}}假装为其他开发人员的CVS。