2011-06-20 12 views
4

私はSCCSを内部で使用している会社で、主なアプリケーションを開発しています。現在、StableとExperimentalの2つの開発ストリームがあります。 Stableには主にバグの修正が加えられており、Experimentalの問題も修正される可能性があります。実験的には、かなり大きな新機能が追加されています。gitを個人的に使用し、SCCSプロジェクト全体

私が気付いている主な問題は、Stableで働く開発者がExperimentalに変更を加えていないことです。 Experimentalで作業しているので、私は両方のブランチをマージする必要があります。

私はおよそ一年のために自分でGitリポジトリを使用してきた

、そしてそれは、一方の分岐(安定的)で素晴らしい仕事だとして、私は次のことができます。これは、安定からの変更ですべての私のファイルを更新

git checkout master 
<copy all Stable files over, which will add changes> 
git commit -a -m "Updated files 06/19/2011" 
git checkout New_Feature 
git rebase master 

。しかし、2つの開発ブランチを使用しているので、多くのマージ競合が発生しています。

#pragma ident "@(#)file1.c 1.233 06/17/11 Company_Experimental" 

注バージョン番号(1.233)、日付、および企業/支店キーワード:これはSCCSはこのように、ソースファイルの先頭にメタデータを置くことに由来します。すべてのチェックイン時に日付とバージョン番号が変わり、支店はStableとExperimentalのアップデート間で切り替わります。私はファイルをチェックインするときに、いつチェックインするかによって、トップを破棄し、新しい値を持つように、トップにあるものは気にしません。

この行は常に一番上にある。トップラインを無視する方法はありますか、何らかの形でこのワークフローを管理しやすくして、開発ストリームを自分自身の作業とマージし、無意味なマージの競合をほとんど経験しないようにしてください。

注:私はすでにバージョン管理システムを変更しようとしていますが、私たちは多くの古いプログラマーが自分のやり方を変えようとしていません。回答しないでください。「あなたの会社はXに切り替える必要があります。私を信じて、私はあなたと一緒に100%です。

答えて

2

、あなたは簡単に追加することができます。

 
* filter=skip-ident 

へ.git /情報/属性(または$ GIT_DIR /情報/属性)または.gitattributesのいずれか(あなたは属性がのgitでファイル自体追跡する場合)とのようなもの置く:.git/configに

 
[filter "skip-ident"] 
     clean = "sed '/\(#pragma ident\).*/s//\1/'" 

を。 .git/info/attributesの最初の列にあるパターン(この場合は '*')に一致するファイルがgitに追加されると、その内容はクリーンスクリプトによって実行されます。 ident info。

+0

これは不思議でした。私はPro Gitの本を見てスクリプトを動作させる方法についてはっきりしていませんでした(純粋なgrepは失敗していました)が、これは完全に意味がありました。 –

+0

文字列全体を消去する代わりに、拡張されていないsccsトークンで置き換えることができます。 –

1

カスタムの汚れクリーンスクリプトを使用できます。詳細はthe attributes chapter in the ProGit bookにあります。また、マージドライバを作成することもできます。

マージが完了したら、各ファイルの最初の行は何を言いますか?私は何も想定しておらず、SCCSがあなたのためにそれをすることに依存しています。これにより、汚れのないクリーンなスクリプトが簡単に作成できます。あなたは、単に(SCCSがあなたのためにそれらを追加しますので、あなたはおそらく、行うことができます)あなたのGitのレポでプラグマのident行の内容を削除することができた場合は

0

ライン

#pragma ident "@(#)file1.c 1.233 06/17/11 Company_Experimental" 

のようなキーワードでSCCSに格納されます。

#pragma ident "%A%%M% %I% %D% Company_Experimental" 

(私はいくつかのトークンが間違って取得する場合、私は前の年を超える古い馬車馬を使用して停止許し)。

gitを使ってコミットするときは、固定#pragma行を、sccsが期待するトークンに置き換えます。

関連する問題