如何将您的工作方式从CVS迁移到Git?

如何将您的工作方式从CVS迁移到Git?,git,cvs,merge-conflict-resolution,Git,Cvs,Merge Conflict Resolution,我们正在将旧的CVS服务器迁移到git上,但在过去的30年中,一位主要的开发人员一直在使用CVS,这让我有些后顾之忧。我认为他在对付git时遇到了一些困难。他给了我他的意见,我想知道如何挑战或解决其中的一些问题: 例如,无法合并对不同分支的提交 小项目,我看到这是工作,但对于我们的项目,我们仍然 需要创建单独的分支来移动特定的修复。”上下文:目前,他在我们每次创建发布时(每季度)都会创建一个特殊的发布分支。一些客户升级到新版本,但其中许多仍在旧版本上,并经常收到修复。当他在一个较旧的分支中实现了

我们正在将旧的CVS服务器迁移到git上,但在过去的30年中,一位主要的开发人员一直在使用CVS,这让我有些后顾之忧。我认为他在对付git时遇到了一些困难。他给了我他的意见,我想知道如何挑战或解决其中的一些问题:

  • 例如,无法合并对不同分支的提交 小项目,我看到这是工作,但对于我们的项目,我们仍然 需要创建单独的分支来移动特定的修复。”上下文:目前,他在我们每次创建发布时(每季度)都会创建一个特殊的发布分支。一些客户升级到新版本,但其中许多仍在旧版本上,并经常收到修复。当他在一个较旧的分支中实现了一个修复,并希望将此修复包含到其他发布分支中时,他会遇到很多合并冲突。我认为主要的问题源于这样一个事实,即您不能仅仅合并具有完全不同历史的分支

  • “创建新分支并从特定分支移动修复程序,而不是 在CVS中,您可以标记某些提交,然后移动这些提交 对于您想要的选项,该选项在Git“上下文中不存在:与第一个相同的问题

  • “每个文件没有像CVS中那样的历史树(我们通常检查所有 每个分支上某些文件的更改)或如果我们想查看列表 在所有文件中,并按更新日期排序,此选项不适用 存在于Git”上下文中:他显然希望看到Git中特定文件在不同分支之间的演变,而不仅仅是在当前活动分支中

  • “一般来说,提交文件需要相当长的时间,与CVS相比,我们甚至在Git中花费更多的时间来提交文件。”上下文:我认为这主要是因为他的合并会产生很多冲突

  • 1-每个补丁/票据(我假设是在一个功能分支上)都可以通过只重定与补丁相关的修订版本来进行后端口(这并不意味着你不会遇到冲突……当然,如果git不能像预期的那样正确重定基,冲突就会出现)

    2-它与#1不同吗?听起来不像

    3-这是什么意思?你可以做一个
    git日志——所有这些都是随机文件,你将得到它的历史记录。您甚至可以添加
    --graph
    ,git甚至会尝试从不同的分支创建一个树(至少gitk会这样做,所以我假设git也会这样做)

    4-我打赌git在本地提交所需的时间比在中央服务器上提交cvs所需的时间要少得多。当存在冲突时,cvs是否允许您提交内容

    总的来说,我会说:git有非常不同的工作流,需要时间来适应它,但我很难找到一个人在使用DVCSs后决定回到集中式


    欢迎来到SO。

    我发现让某人相信一个新系统是好的最好方法是善于使用它,然后向他们展示你能用它做什么

    我很少将争论视为说服某人采用新技术(语言、操作系统、源代码控制系统等)的成功方式

    “告诉我如何让这个新系统和我的旧系统一模一样”的问题只意味着他们想要保留旧系统

    “我如何让我的同事相信git是好的?”这个问题远远超出了stack Exchange帖子所能回答的范围,但我重申,“展示优势”

    尽管如此,这里有一些想法可能有助于解决您提出的具体问题

  • 旧分支上的新修复。您可能会发现,可以使用cherry pick将新修复应用于旧分支,而无需将新分支中的所有更改合并到旧分支中。 当然,请记住,新的修复可能取决于新分支中的其他更改,但无论您使用的是什么源代码管理系统,这都适用

  • 看起来很像。见(1)的答案

  • 历史档案。 下一行将显示文件的提交历史记录

  • git日志--文件的路径

    如果在此过程中已重命名该文件,--follow选项仍将跟踪该文件

    git log--follow--path to file(注意:--follow没有空间。下一个--follow周围有空间)

    如果希望看到每个提交所做更改的差异,请添加-p选项

    git日志--follow-p--文件路径

    请注意,文件路径是从git repo顶部到文件的路径,还应包括文件名

    真正的问题是:人们不喜欢他们不知道如何使用的东西。
    如果你和你的同事都学会了git提供的所有东西,你可能会成为你的忠实粉丝。

    只是想起了它是如何与CVS协同工作的。让文件作为单独的实体工作实际上并不是一个好方法。。。这是一个骗局,因为对多个文件的更改如果构成一个更改,则应该是原子性的。。。。如果你修改5个文件以进行一次更改(这是svn和git在创建新版本时所做的),如果你只是从一个文件中移动更改,那将是完全错误的。作为旁注:你是否让他看了14年前linus在google做的关于git的演讲?我相信他会喜欢的。XD感谢您提醒CVS以非原子方式逐文件提交。我现在想起了在CVS中恢复多文件提交是多么恐怖的一件事。特别是如果在这些事件之上发生了其他事件。在这一点上,如果CVS是唯一的源代码管理选项,我会拒绝一个作业。另外,如果你为git选择了这一政策,你很可能无法就业……简单地说,关于你的评论/问题“CVS是否允许你在发生冲突时提交内容?”是的。我曾经在一家有很多程序员的大公司工作过,偶尔也会有