Clearcase与Git版本控制

Ana*_*ant 32 git version-control clearcase

我们正在使用多站点 clearcase存储库,通常我们需要合并和构建我们的系统,这种合并和复制需要将近3天才能跨站点使用.因此,为了提高效率,我们计划转向Git版本控制.如果我们从Clearcase转移到Git,你能否告诉我们可能遇到的潜在缺点?

小智 42

@ zzz777:你的问题被问在这样一个ClearCase中心的观点,它没有被理解的人谁之前从未使用过的ClearCase.实际上,Git是ClearCase的光年,它是需要赶上OSS系统的商用SCM.

我有ClearCase和git的经验,我可以告诉你,ClearCase中的查找合并(MIS)的特点是基于版本的文件(从根本上打破)设计的结果,但在Git中你不需要这种原始的工具将共享分支合并到您的私有分支.ClearCase是面向文件的,并签入-S是基于文件的,这就是为什么你需要查找(文件)进行合并工具,但是Git是提交基础,那就是正确的模型,因为当你解决问题或实现一个功能,整个变更集或其中没有一个是唯一有意义的选项.

Git有一个非常强大的合并功能,并做正确的事,并且有两种方法可以做到你的要求(更新你的私有分支是共享支部+更改).

最明显的是进行合并,所以在您的私人分支上,您只需:

git merge sharedbranch
Run Code Online (Sandbox Code Playgroud)

然后,如果存在冲突(实际上比ClearCase中的更为罕见),则解决它们

git commit
Run Code Online (Sandbox Code Playgroud)

就是这样.作为奖励,因为git的都是本地的历史,你不必浪费无数个小时,如果你有很多的文件,就像你在ClearCase中做,合并是极快的,在时间的ClearCase的动态视图做了合并10个文件,git可能很容易完成合并100个.

使用git merge意味着您保留历史记录,如果您的历史记录在合并之前看起来像这样:

o---1---2---3 (sharedbranch)
 \
  a---b---c (privatebranch)
Run Code Online (Sandbox Code Playgroud)

合并后,它将如下所示:

o---1---2---3 (sharedbranch)
 \           \
  a---b---c---m (privatebranch)
Run Code Online (Sandbox Code Playgroud)

这会保留您的更改历史记录,并允许其他人审核您的工作.

请记住,这些都不是文件修订历史记录,这些如果树的历史,这是唯一的历史,是有道理的存储,即使分支由1个或2档,要维护国家唯一不同的是树,没有之一文件.

第二个选择是使用底垫中,这意味着你做它喜欢它似乎人你已经作了修改从共享分支的最新代码开始.

您使用的命令(再次,在私有分支上):

git rebase sharedbranch
Run Code Online (Sandbox Code Playgroud)

历史树将从以下更改:

o---1---2---3 (sharedbranch)
 \
  a---b---c (privatebranch)
Run Code Online (Sandbox Code Playgroud)

o---1---2---3 (sharedbranch)
             \
              a'--b'--c' (privatebranch)
Run Code Online (Sandbox Code Playgroud)

所以,如果你给的git一些时间来了解它,并用它一点点,你会看到如何更好地为git的模型,以及如何打破ClearCase的模型.

顺便说一句,在ClearCase中邪恶的孪生问题根本不存在混帐混帐,因为不跟踪目录(相信我,你不需要这个).

此外,如果您有一个配置规范,它有一些更复杂的几个分支,并且您将文件从一个分支迁移到另一个分支,您可能知道配置规范中规则的顺序是多么重要,以及令人沮丧的是查看旧版本的文件,因为配置规范是"错误的".由于它的基本设计,它发生在ClearCase中,不用说,这种垃圾不会发生在git中.

因此,总而言之,git没有像"查找合并"这样的原始工具,因为它不需要它.它有一个卓越的模型和卓越的合并模型,实际上工作.与ClearCase(CCRC静态视图或动态视图,您可以命名)相比,它闪电般快速.

ClearCase可以有优势的唯一地方是动态视图的即时更新,但这也可以通过您可以键入更快的git checkout分支而不是更新配置规范来减轻这一点.

  • 很有意思.+1.我很少遇到具有ClearCase和git实际经验的用户. (3认同)
  • 与Git相比,ClearCase是完全垃圾.关于它,我仍然做恶梦.ClearCase不是VCS,这是一场灾难. (3认同)

PAn*_*ine 12

我在专业混合能力办公室遇到的问题:

  1. 可变历史.
    你可以用GIT做一些非常愚蠢(和强大)的事情.这可能导致源丢失.
  2. 自动合并.
    这是git的最佳功能.但是,我们不得不关闭开发一周,以找到丢失的源代码.MSVS有一个很好的问题,随机改变行结尾,如果你不经常从存储库中拉出来,它会变得混乱,变化就会丢失.
  3. 推/拉顺序.
    Clearcase为您处理日期排序和历史记录,但git忽略它.
  4. 分期.
    Clearcase(至少UCM)为您处理分支促销和其他事情.Git没有.你必须仔细管理这个.
  5. $ ID $
    git不存在.从实际版本跟踪版本,并通过手动处理知道源文件版本的问题查找.(我不确定你的发布过程是什么).

对于最终的代码存储库,我可能会建议另一个源控制系统或单独的git存储库的发布存储库,它是受管理的,只接受pull.

我目前正在使用git进行我的个人项目,并且很好.但是,在一个混合能力的房子里有各种各样的编辑,我会小心的.在不知道Git的情况下,你真的可以把你吹走.

我没有使用过,hg或bzr.可能值得一看这些问题,因为一些问题消失了,它们具有减轻上述一些问题的功能.

我希望这有帮助.

  • 1)你真的要把一些东西弄得乱七八糟.`git reflog`将显示每次发生的提交.如果你失去了源,那么你可能需要重新训练开发者. (9认同)
  • 大多数git服务器都能够锁定分支,因此排名和文件开发人员只能快速推送到这些分支(没有强制推送).因此共享存储库没有可变历史记录. (4认同)

Von*_*onC 9

正如我在" 每个开发人员应该知道的基本ClearCase概念是什么? "中提到的那样,ClearCase可能在其多站点存储库中具有一些"分散"功能,但它仍然是CVCS的核心:

  • 它与系统用户标识有很强的联系(在DVCS中没有相关性,没有唯一的用户参考).

  • 它有一个独特的repo来管理标签和分支名称(管理vob),而你可以在15个不同的Git repos中定义一个'test'分支而没有问题(除了你需要知道什么repo1/test代表,相对于repos2/test).

  • 它还通过(UCM)Stream层次结构集中了合并工作流定义(您可以直观地将工作从一个Stream合并到另一个Stream).

  • 它通过UCM提出了代码子集(组件)的定义,以及依赖关系管理.Git只有子模块,没有覆盖/覆盖检测机制.

  • 它管理任何类型的文件,甚至是大型二进制文件,而DVCS(任何类型的DVCS)最好只管理源代码.

底线(我们从ClearCase迁移到Git)是为了拥有可管理的Git存储库,它需要对源代码进行相当多的重构/重组.


kma*_*eny 9

我曾经使用过Git和ClearCase,一旦你学会了如何使用Git 然后进行切换,你就永远不会回头了.确保您有时间培训您的开发人员 - 这应该是您的首要任务.与ClearCase相比,Git是一种完全不同的SCM方法.

需要考虑的一些事情(可能的缺点):

  1. 你需要一个真正的 repo master,而不仅仅是有人监视源代码,而是需要了解SCM实际工作原理的人(不仅仅是GUI显示给他们)并且可以处理你的分支模型(参见#2)
  2. 采用/开发强大的分支模型.一个很好的例子,我用过的一个例子是http://nvie.com/posts/a-successful-git-branching-model/
  3. 您将不得不花费大量时间帮助您的开发人员重新学习他们认为您使用/与SCM交互的一切.

如果你能克服上面的三个,那么就会有很少的缺点(#3是最难的.)至于@PAntoine,大多数问题都与训练有关 - #1需要一个真正糟糕的决定才能丢失源代码.git reflog将为您提供访问每个回购提交的权限.破坏源的唯一途径是通过git reflog expire --expire=whatever refs/heads/master,git fsck --unreachable,git prune,和git gc,这只能由回购主处理-然后有开发商不承诺其源普遍问题(D'哦!)

  • 我问的是将我没有接触过的 99,980 个文件的最新版本挑选到我的私人分支中并找到 10 个在开发和私人分支上都已更改的文件有多容易。然后在接下来的几周内再做一次,然后再做一次。ClearCase 做得非常好。SVN 让它变得非常困难,那么 git 呢? (2认同)