web-dev-qa-db-ja.com

gitをClearCaseにブリッジする方法は?

最近git svnを使用して、とても楽しんでいます。今、私は別の顧客で新しいプロジェクトを始めています。そのサイトでは、選択するSCMはClearCaseです。 ClearCaseのgit svnのベイクされた同等物は見つかりませんでした。ローカルでgitをClearCaseのフロントエンドとして使用し、いくつかのトリック、構成、またはスクリプトを使用して成功を収めた人はいますか?もしそうなら、あなたは使用される方法を説明できますか?

41
Bas Bossink

ここでは、ハイジャックを回避する方法を示します。私たちのチームは、SubversionのClearCaseを廃止するまで、この方法を1年以上にわたって成功裏に使用していました(会社の方針に従いますが、これはチームの後方ステップですが、基本的にはClearCaseをばかげているだけでした)ファイルシステムであり、実質的にgitでネイティブに機能しますが、現在はネイティブgitほどナイスではないgit-svnブリッジを使用しています。

2つのディレクトリを使用しました。1つはClearCaseスナップショットとマスターgitリポジトリ用で、チーム全体で共有し、ファイルを編集することはありません。1つは「作業」ディレクトリ用です。

ClearCaseスナップショットビューでの準備は次のとおりです。

%git init 
%git add **/*。cxx **/*。h **/Makefile(など)
%git commit -m "initial" 

次に、作業ディレクトリにクローンを作成します。

%mkdir〜/ work 
%git clone /path/to/repo

ブランチ上の作業ディレクトリで作業します。

%git checkout -b feature 
%...編集/コンパイル... 
%git add -u 
%git commit 

ClearCaseスナップショットが pristine で最新であることを確認します(チーム間で共有し、全員がgitを使用していたため、これは常に私たちのためでした)。

次に、自動マージコミットを回避するために、ブランチをリベースしてマスターにマージします。

%git checkout master 
%git pull 
%git checkout feature 
%git rebase master 
%git checkout master 
% git merge feature 
%git branch -d feature 
 
%git diff --name-status Origin/master 

git diff --name-statusの出力に基づいて、変更/新規/削除されたファイルをチェックアウト/ mkelem/rmnameして、ClearCaseビューを準備します。これを行うために手作業のスクリプトを使用しました。ファイルを追加/削除したディレクトリをチェックアウトすることを忘れないでください:

次に、gitをプッシュバックして、ClearCaseでチェックインします。

%git Push 
%cd /path/to/repo
% git reset --hard 
%cleartool ci `cleartool lsco -r -short -me` 

多くのコマンドのように見えますが、これにはセットアップが含まれており、毎日のワークフローでは多くのコマンドを使用しません。 Push-back-to-ClearCaseステップを中心に簡単にスクリプトを作成し、基本的なワークフローに慣れてきたら、チームにクールな追加のgitを徐々に発見/表示することができます。

このシステムの本当の美しさは、しばらくして誰もがgitを使いこなせるようになるとClearCaseとそれに関連するすべてのサルの作業と料金を簡単に捨てることができます。おそらく、会社のClearCase担当者に非常に必要な休暇を与え、貯蓄を再教育することになるでしょう。 (残念ながら、私の会社ではgitはすべてskunkworksでしたが、Subversionに移動しました-ClearCaseから転送されますが、gitからは逆です!)

stronglyは、ClearCaseで実行される ClearCase Globally、Git Locallypristineスクリプトを使用することをお勧めしますスナップショットビューと、それとgitが同期していることを確認します。これを1日2回実行するcronジョブとして設定し、gitにプッシュバックしようとするたびに手動で実行しました。残念ながら、ブログ投稿へのリンクは無効になっています。ただし、スクリプトは引き続き Github で利用できます。

38
Matt Curtis

いくつかのいぼがないわけではないかもしれませんが(警告されています)、一種の架け橋を書いたことを言っておきたいと思います。

http://github.com/charleso/git-cc

2つのシステム間のブリッジングは簡単ではありません。私のソリューションがgit-svnの半分でよかったのにと思います。大きな制限は、単一のストリームのミラーリングに限定されていることです。 git-ccは、すべてのClearcaseブランチのクローンを作成することはできません(それができるのと同じように)。ただし、代替スクリプトのほとんどが単一のClearcaseビューを中心に解決することを考えると、悪くなることはありません(IMO)。

個人的に私は歴史が非常に重要であると思います、そして他の解決策に欠けているものは歴史をGitにインポートすることです。ファイルに対してgit-blameを実行して実際の作成者を確認できると、時々非常に役立ちます。

他にgit-ccが上記のマットのソリューションの前述の「git log --name-status」ステップを処理できない場合。

私は確かにVonCとマット(そして他の人たち)がこれについてどう思うか聞いて興味があります。Clearcaseへの橋は困難に満ちており、その価値以上に問題があるかもしれないと私は同意します。

13
charleso

私が通常従う1つのプロセスは次のとおりです。

  • clearCase内のスナップショットCD view/vobs/myComponent
  • git init。

これにより、ClearCaseコンポーネントをGitリポジトリと見なすことができます。
その後、そのリポジトリ内で必要なすべての分岐および「プライベート」コミットを実行し、必要に応じてファイルを書き込み可能にします(スナップショットビュー内で可能)。

最終的なコミットが安定したら、スナップショットビューを更新し、「ハイジャックされた」ファイルをすべてリストします。チェックアウトして、ClearCaseにチェックインします。

Git制限 を考慮すると、ClearCase(UCM)コンポーネントごとのリポジトリは、Gitリポジトリの適切なサイズです。
関連項目 すべての開発者が知っておくべき基本的なクリアケースのコンセプトは何ですか? ClearCaseとGitの比較について。

アイデアは残っています:

  • git-ccなし
  • clearCaseの履歴をインポートする必要はありませんall(SVNリビジョンとは異なり、リポジトリベースラインの概念はありません)
  • 中間コミット用のClearCaseビュー内でのGitリポジトリの作成
  • 変更されたすべてのファイルのチェックインを通じて、ClearCaseビューでミラーリングされた最終的なGitコミット。
5
VonC