multisiteclearcaseリポジトリを使用しています。多くの場合、システムのマージと構築が必要になります。このマージとレプリケーションには約3サイト間で利用可能になる日。したがって、より効率的にするために、Gitバージョン管理に移行する予定です。 ClearcaseからGitに移行した場合に発生する可能性のある潜在的な欠点について教えてください。
@ zzz777:あなたの質問は、ClearCaseを使用したことがない人にはわかりにくいClearCase中心のビューで質問されました。実際、GitはClearCaseの先の光年であり、OSSシステムに追いつく必要があるのは商用SCMです。
ClearCaseとgitの両方の経験があり、ClearCaseのFind merges(mis)機能は、バージョン管理ファイルに基づいた(根本的に壊れた)デザインの結果であると言えますが、gitではそのようなプリミティブツールは必要ありません共有ブランチをプライベートブランチにマージします。 ClearCaseはファイル指向で、チェックインはファイルベースです。そのため、ユーティリティをマージするには検索(ファイル)が必要ですが、gitはコミットベースであり、問題を修正したり機能を実装したりする場合に適したモデルです、変更セット全体またはそのいずれも意味のある唯一のオプションです。
Gitには非常に強力なマージ機能があり、正しいことを行います。あなたが求めていることを行うには2つの方法があります(プライベートブランチを共有ブランチ+変更に更新する)。
最も明白なのはマージを実行することです。そのため、プライベートブランチでは次のようにします。
git merge sharedbranch
次に、競合がある場合(ClearCaseよりもはるかにまれです)、それらを解決し、
git commit
以上です。ボーナスとして、gitはすべての履歴をローカルに持っているため、ClearCaseのように大量のファイルがある場合、ClearCaseが動的ビューで行うまでに、マージが非常に高速になり、無数の時間を無駄にする必要がありません。 10個のファイルをマージすると、gitはおそらく100個のマージを簡単に終了します。
git mergeを使用すると、履歴が保持され、マージ前に履歴が次のようになった場合:
o---1---2---3 (sharedbranch)
\
a---b---c (privatebranch)
マージ後は次のようになります。
o---1---2---3 (sharedbranch)
\ \
a---b---c---m (privatebranch)
これにより、変更の履歴が保持され、他のユーザーが作業をレビューできるようになります。
そして、これらはファイルの改訂履歴ではなく、保存するのに意味のある唯一の履歴であるツリー履歴であり、ブランチが1つまたは2つのファイルでのみ異なる場合でも、保存する状態は1つではなくツリーですファイル。
2番目のオプションはリベースを使用することです。つまり、共有ブランチの最新のコードから変更が加えられたように見えるようにします。
使用するコマンド(ここでもprivateブランチ上):
git rebase sharedbranch
履歴ツリーは次から変更されます:
o---1---2---3 (sharedbranch)
\
a---b---c (privatebranch)
に
o---1---2---3 (sharedbranch)
\
a'--b'--c' (privatebranch)
そのため、gitを理解する時間を少し与えて少し使用すると、gitモデルがどれだけ優れているか、ClearCaseモデルがどれだけ壊れているかがわかります。
ところで、ClearCaseの邪悪な双子問題は、gitがディレクトリを追跡しないため、gitには存在しません(私を信じてください、あなたはそれを必要としません)。
また、いくつかのブランチでもう少し複雑な構成仕様があり、あるブランチから別のブランチにファイルを移行したことがある場合、おそらく、構成仕様のルールの順序がどれほど重要であり、どのようにイライラするのかを知っているでしょう構成仕様が「間違っている」ため、古いバージョンのファイルを参照してください。 ClearCaseの基本設計により、それは起こります。言うまでもなく、この種のがらくたはgitでは発生しません。
結論として、gitには「マージの検索」などの基本的なツールは必要ありません。これには、実際に機能する優れたモデルと優れたマージモデルがあります。 ClearCase(CCRC静的ビューまたは動的ビュー、名前を付けます)と比較して非常に高速です。
ClearCaseがEdgeを持つ唯一の場所は、動的ビューの瞬間的な更新ですが、構成仕様を更新できるよりも速くgit checkout branchと入力できるという事実によっても軽減されます。
プロの混合能力オフィスで私が抱えていた問題:
最終的なコードリポジトリについては、別のソース管理システムまたは個別のgitリポジトリのリリースリポジトリを提案できます。これらは管理され、プルのみを受け入れます。
現在、ソロプロジェクトにgitを使用していますが、問題ありません。しかし、さまざまな編集者がいるミックスアビリティハウスでは、注意が必要です。 Gitを知らなくても、本当に足を吹き飛ばすことができます。
Hgもbzrも使用していません。いくつかの問題は解消され、上記の問題のいくつかを緩和する機能を備えているため、これらを確認する価値があります。
これがお役に立てば幸いです。
私はGitとClearCaseの両方で作業し、一度学習したらGitの使用方法、そして切り替えてください。決して振り返ることはありません。開発者をトレーニングする時間があることを確認してください。これが最優先事項です。 Gitは、SCMへのClearCaseとはまったく異なるアプローチです。
考慮すべき事項(マイナス面の可能性):
上記の3つを克服できる場合、マイナス面はほとんどありません(#3が最も厳しいです)。@ PAntoineに関しては、これらの問題のほとんどはトレーニングに関連しています。 。 git reflog
は、リポジトリへのすべてのコミットへのアクセスを提供します。ソースを破壊する唯一の方法は、git reflog expire --expire=whatever refs/heads/master
、git fsck --unreachable
、git Prune
、およびgit gc
、これはレポマスターのみが処理する必要があります。そして、開発者がソースをコミットしないという普遍的な問題があります(D'oh!)
「 すべての開発者が知っておくべきClearCaseの基本概念は何ですか? 」で述べたように、ClearCaseには、マルチサイトリポジトリを備えた「分散」機能がありますが、それでもCVCSは中核です:
システムのユーザーIDとの強力なリンクがあります(一意のユーザー参照がないDVCSには関係ありません)。
ラベル名とブランチ名(admin vob)を管理するための独自のリポジトリがありますが、15の異なるGitリポジトリで問題なく「テスト」ブランチを定義できます(repo1/test
に関連するrepos2/test
の意味を知る必要がある場合を除く)。
また、(UCM)ストリーム階層を通じてマージワークフロー定義を集中化します(1つのストリームから別のストリームに作業をマージする場所を視覚化できます)。
uCMを通じて、コードのサブセット(コンポーネント)の定義を、依存関係管理とともに提案します。 Gitにはサブモジュールのみがあり、オーバーライド/オーバーライドされた検出メカニズムはありません。
dVCS(あらゆる種類のDVCS)はソースコードのみを管理する方が適切ですが、あらゆる種類のファイル(大きなバイナリを含む)を管理します。
要点(ClearCaseからGitへの移行では)は、管理可能なGitリポジトリを使用するために、ソースコードのリファクタリング/再編成がかなり行われることです。
ソフトウェア構成管理(SCM)またはバージョン管理[システム](VCS)を支援するツールが必要ですか?
これが、ClearCaseとGitの議論の要点です。
つまり、リンゴとオレンジを比較しています。
ClearCaseを単なる別のVCSと考えると、ClearCaseとは狭い視野になります。あなたの目標があなたの店から適切な製品を出荷することであるなら、ClearCaseに固執してください。
一方、Gitは現時点でおそらく市場で最高のVCSです(ただし、SCMサポートは提供していません)ので、懸念が分岐してマージしている場合はGitに切り替えます。不十分なベースラインと不適切に設定されたビューの結果です)... VOBレプリケーションがひどい-それを提供します。
計画した移動の欠点は、SCMツールのサポートを放棄することです。また、ClearCaseですぐに使用できる機能を実現するには、他の無数のツールと多くの手作業に直面する必要があります。
とにかく、優れたVCSはあらゆるSCMのバックボーンであるため、Gitへの移行は長期的に見返りをもたらす可能性があります。