Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/30.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Git中导入和更新CVS存储库?_Git_Cvs_Git Svn_Git Cvs - Fatal编程技术网

如何在Git中导入和更新CVS存储库?

如何在Git中导入和更新CVS存储库?,git,cvs,git-svn,git-cvs,Git,Cvs,Git Svn,Git Cvs,CVS中有一个中央存储库,我希望在本地将其与Git一起使用,然后将更改发送回CVS 我每天能做到什么 我想完成的任务是: 导入分支机构 以类似GIT的格式获取历史记录,以及 将我的更改/提交导出回集中式服务器 顺便说一句,我也看过。但它不起作用,我也不知道我错过了什么或做错了什么。我相信在你的情况下没有现成的配方。但是,您可以尝试以下操作: 手动将CVS数据与Git同步,或为此编写脚本。他们将从CVS获取信息并将其放入Git。这将为您提供Git中的某种历史。不完全清洁,不完全可用,但仍然可

CVS中有一个中央存储库,我希望在本地将其与Git一起使用,然后将更改发送回CVS

我每天能做到什么

我想完成的任务是:

  • 导入分支机构
  • 以类似GIT的格式获取历史记录,以及
  • 将我的更改/提交导出回集中式服务器

顺便说一句,我也看过。但它不起作用,我也不知道我错过了什么或做错了什么。

我相信在你的情况下没有现成的配方。但是,您可以尝试以下操作:

  • 手动将CVS数据与Git同步,或为此编写脚本。他们将从CVS获取信息并将其放入Git。这将为您提供Git中的某种历史。不完全清洁,不完全可用,但仍然可用
  • 使用类似的
    gitcvsimport
    将CVS存储库迁移到Git。并使用
    gitcvsserver
    让Git冒充其他开发人员的CVS

    • 我过去所做的是:

      导入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
      • $CVSROOT
        是CVS响应服务器。如果我使用来自某个sourceforge存储库的匿名克隆,那么我将使用:
        :pserver:anonymous@project_name.cvs.sourceforge.net:/cvsroot/project\u name
      • module
        是我要克隆的存储库中的模块。如果存储库只有一个模块,则可能与
        project\u name
        相同
      更新存储库 可以重复我之前编写的命令。在该特定示例中,它应该在
      target cvs
      的父目录中运行。为了将来更容易,您可能需要配置一些变量(您可以在“”的答案中阅读更多详细信息)

      这足以使
      git中的本地存储库与CVS中的远程存储库保持同步

      日常工作 从现在起,每一个更改都应该在本地git分支中进行。一个特征,一个分支。为此,我使用“”中描述的工作流。唯一的区别是master指向CVS,但从概念上讲,这里可以应用相同的工作流。这只是一个惯例

      在CVS中推送提交后,它将在下一次更新(
      git-cvsimport
      )中返回到master。然后,可以删除实现该功能的本地分支

      对于正在进行的工作(在本地分支机构中),您应该
      根据主文件对其重新设置基础。因为您将这些功能分开,所以应该更容易解决冲突。棘手的部分是一些分支依赖于其他分支,但仍然可以管理。微提交帮助很大(就像在任何git工作流程中一样)

      如果每个本地分支都重新设置了基础,并且从未接触过主分支(更新除外),那么
      git
      cvsexportcommit
      应该可以正常工作。记住,它只适用于一次提交。这有点乏味,但总比什么都没有好。在前面的示例中,该命令应类似于:

      $ git cvsexportcommit -vc commit-id
      

      如果您只能以只读方式访问远程CVS,那么您可以通过电子邮件发送修补程序或公开git存储库,以便提交者可以获取您的修补程序来应用它们。在这种情况下,与CVS的正常工作流程没有什么不同。同样,在下一次更新中,您将看到master中的更改。

      最新版本的
      git-cvsimport
      由于
      cvsps
      而被破坏

      因此,您必须安装
      cvsps-2.1

      在OSX上,您可以(使用
      brew
      ):

      并像往常一样导入空的git存储库,例如:

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

      您还可以使用一个可以将CVS存储库转换为git的工具。但是,您需要访问CVSROOT目录

      检查安装步骤

      用法示例:

      cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo
      
      这将创建两个git fast导入格式的输出文件。这些文件的名称由选项文件或命令行参数指定。在本例中,这些文件被命名为
      cvs2git tmp/git blob.dat
      cvs2git tmp/git dump.dat

      可以通过以下方式将这些文件导入空git存储库:

      cat git-blob.dat git-dump.dat | git fast-import
      
      然后删除
      标记.FIXUP
      分支并运行
      gitk--all
      查看转换结果


      通过运行:
      cvs2git--help

      查看更多信息,您应该解释为什么git-cvsimport不适合您。同样对于这个问题,git svn是完全不相关的(或者如果有一个工具svn git处理CVS,那么就提供一个链接)。@honk,我相信git cvsimport只是一张通往CVS的单程票Git@AlexeyShytikov,仍然有
      git cvsexportcommit
      将您的工作放入CVS repo。虽然与
      git svn
      不同,但它仍然比普通的CVS有用得多。@告诉你,我错过了这一点。这里可能重复了从CVS迁移到git的成功故事:我必须在OSX上安装
      cvsps
      brew安装cvsps
      )。但是,它被
      cvsps:bad用法:无效参数--norc打破。
      error。cvsps 3.x会发生这种情况(该选项已被删除),可能会将其降级到2.x,但可能会导致其他问题。@kenorb:git cvsimport不适用于csvps 3.x,而适用于2.x。要安装早期的csvps,请运行
      brew卸载CVSP;brew安装https://raw.githubusercontent.com/Homebrew/homebrew/5a0b551194b5cf8017478432f8f7e63a77c12bd1/Library/Formula/cvsps.rb
      注意:我是盲人。我没看到你的答案在男人的下面
      cvs2git --blobfile=git-blob.dat --dumpfile=git-dump.dat --username=cvs2git /path/to/cvs/repo
      
      cat git-blob.dat git-dump.dat | git fast-import