第2章 協同作業
複数の開発者が関わるすべてのプロジェクトでは、効果的な改訂管理が必須になります。改訂管理を効果的に行うことで、チーム内の開発者全員が組織的かつ規則的な方法でコードを作成、見直し、改訂、記録できるようになります。Red Hat Enterprise Linux 6 は、オープンソースの改訂管理システムのなかで最も人気のある 3 つのシステム (CVS、SVN、Git) をサポートしています。これらの改訂管理システムのツールは、個別の内部コードリポジトリーを設定する機能や、公開されているさまざまなオープンソースコードを使用できるようにします。
以下のセクションでは、各ツールの関連資料の概要と参照先を説明します。
2.1. Concurrent Versions System (CVS)
通常 CVS と略される Concurrent Versions System は、クライアントサーバーアーキテクチャーで構成される 集中型バージョン管理システム です。CVS は、以前の Revision Control System (RCS) の後継で、リビジョン管理が行われるファイルへの変更をすべてトラッキングしつつ、複数の開発者が同じプロジェクトで協同で作業できるようにします。
2.1.1. CVS のインストールおよび設定
cvs パッケージのインストール
CVS は、Red Hat Enterprise Linux 6 では cvs パッケージで提供されます。cvs パッケージとすべての依存関係をお使いのシステムにインストールするには、
root
として、シェルプロンプトで以下のコマンドを入力します。
yum
install
cvs
これにより、コマンドライン CVS クライアントとその他の関連ツールがシステムにインストールされます。
デフォルトのエディターの設定
コマンドラインで CVS を使用する場合に、
cvs import
または cvs commit
など、特定のコマンドでは短いログメッセージを記述する必要があります。cvs クライアントアプリケーションはまず環境変数 $CVSEDITOR
のコンテンツを読み込み、次に、より一般的な環境変数 $EDITOR
を読み込み、どのテキストエディターを起動するかを決定します。どちらの変数も指定されていない場合には、vi が起動します。
環境変数
$CVSEDITOR
の値を永続的に変更する場合は、以下のコマンドを実行します。
echo
"export
CVSEDITOR=command
" >>~/.bashrc
これにより、
export CVSEDITOR=command
の行を ~/.bashrc
に追加します。command は、任意のエディターを実行するコマンドに置き換えます (例: emacs
)。現在の shell セッションで、この変更を有効にするには、シェルプロンプトで以下のコマンドを入力して ~/.bashrc
のコマンドを実行する必要があります。
.
~/.bashrc
例2.1 デフォルトのテキストエディターの設定
CVS クライアントがテキストエディターとして Emacs を使用するように設定するには、以下を入力します。
~]$echo "export CVSEDITOR=emacs" >> ~/.bashrc
~]$. ~/.bashrc
2.1.2. 新規リポジトリーの作成
CVS リポジトリー は、リビジョン管理がされているファイルやディレクトリー、完全な変更履歴や変更者や変更時間の情報などの追加データを保存する中央の場所となっています。一般的な CVS リポジトリーは、モジュール と呼ばれる個別のサブディレクトリーで複数のプロジェクトを保存します。公開されている場合には、複数の開発者がモジュールの 作業コピー を作成したり変更したりできるだけでなく、リポジトリーに コミット することで他の作業者と変更を共有することができます。
空のリポジトリーの初期化
任意のディレクトリーに空の CVS リポジトリーを新規作成するには、以下のコマンドを実行します。
cvs
-d
pathinit
path は、リポジトリーの保存先のディレクトリーへの絶対パスを指定する必要がある点を念頭に置いてください (例:
/var/cvs/
)。または、$CVSROOT
の環境変数の値を変更して、このパスを指定することもできます。
export
CVSROOT=path
これにより
cvs init
やその他の CVS 関連のコマンドの実行時にパスを省略することができます。
cvs
init
例2.2 新規 CVS リポジトリーの初期化
~/cvs/
ディレクトリーに空の CVS リポジトリーを作成するには、以下を入力します。
~]$export CVSROOT=~/cvs
~]$cvs init
リポジトリーへのデータのインポート
既存のプロジェクトでリビジョン管理を行うように設定するには、プロジェクトの保存されているディレクトリーに移動して、以下のコマンドを実行します。
cvs
[-d
cvs_repository]import
[-m
"commit message"] module vendor_tag release_tag
cvs_repository は CVS リポジトリーへのパス、module はプロジェクトのインポート先のサブディレクトリー (例:
project
)、vendor_tag と release_tag はベンダーとリリースタグを指す点に注意してください。
例2.3 CVS リポジトリーへのプロジェクトのインポート
プロジェクトのディレクトリーに以下のコンテンツが含まれていると仮定します。
~]$ ls myproject
AUTHORS doc INSTALL LICENSE Makefile README src TODO
また、
~/cvs/
に空の CVS リポジトリーがあるとします。このリポジトリーの project
に、ベンダータグ mycompany
と、リリースタグ init
を付けて、プロジェクトをインポートするには、以下を実行します。
myproject]$export CVSROOT=~/cvs
myproject]$cvs import -m "Initial import." project mycompany init
N project/Makefile N project/AUTHORS N project/LICENSE N project/TODO N project/INSTALL...
2.1.3. 作業コピーのチェックアウト
CVS リポジトリーにあるプロジェクトの作業中のコピーをチェックアウトするには、以下のコマンドを実行します。
cvs
-d
cvs_repositorycheckout
module
このコマンドでは、プロジェクトの作業コピーが含まれた module と呼ばれる新規ディレクトリーが作成されます。cvs_repository は、CVS リポジトリーの URL で、module はプロジェクトの保存先のサブディレクトリー (例:
project
) である点に注意してください。また $CVSROOT
の環境変数は以下のように設定できます。
export
CVSROOT=cvs_repository
次に、
-d
オプションなしで cvs checkout
コマンドを使用することもできます。
cvs
checkout
module
例2.4 作業コピーのチェックアウト
CVS リポジトリーに
~/cvs/
があり、このリポジトリーにproject
という名前のモジュールが含まれていると仮定します。このモジュールの作業コピーをチェックアウトするには、以下を入力します。
~]$export CVSROOT=~/cvs
~]$cvs checkout project
cvs checkout: Updating project U project/AUTHORS U project/INSTALL U project/LICENSE U project/Makefile U project/TODO
2.1.4. ファイルの追加および削除
ファイルの追加
CVS リポジトリーへ既存のファイルを追加して、リビジョン管理を行うには、作業コピーのあるディレクトリーに移動して、以下のコマンドを実行します。
cvs
add
file…
これにより、CVS リポジトリーへファイルを追加するようにスケジュールします。先に進め、実際にリポジトリーにファイルを追加するには、「変更のコミット」に説明されているように
cvs commit
コマンドを実行します。
例2.5 CVS リポジトリーへのファイルの追加
CVS リポジトリーの作業コピーが含まれるディレクトリーに以下のコンテンツが含まれていると仮定します。
project]$ ls
AUTHORS ChangeLog CVS doc INSTALL LICENSE Makefile README src TODO
このディレクトリーに含まれる
ChangeLog
以外のファイルとディレクトリーはすべてリビジョンが管理されています。このファイルを CVS リポジトリーに追加するようにスケジュールするには、以下を入力します。
project]$ cvs add ChangeLog
cvs add: scheduling file `ChangeLog' for addition
cvs add: use 'cvs commit' to add this file permanently
ファイルの削除
CVS リポジトリーからファイルを削除するには、作業コピーが含まれるディレクトリーに移動して、ローカルでそのファイルを削除しあmす。
rm
file…
以下のコマンドを使用して、このファイルの削除をスケジュールします。
cvs
remove
file…
実際にリポジトリーからファイルを削除するように進めるには、「変更のコミット」の説明のとおりに、
cvs commit
コマンドを実行します。
例2.6 CVS リポジトリーからのファイルの削除
CVS リポジトリーの作業コピーが含まれるディレクトリーに以下のコンテンツが含まれていると仮定します。
project]$ ls
AUTHORS ChangeLog CVS doc INSTALL LICENSE Makefile README src TODO
このディレクトリーのファイルはすべてリビジョン管理されています。
TODO
ファイルを CVS リポジトリーから削除するようにスケジュールするには、以下を入力します。
project]$rm TODO
project]$cvs remove TODO
cvs remove: scheduling `TODO' for removal cvs remove: use 'cvs commit' to remove this file permanently
2.1.5. 変更の表示
ステータスの表示
作業コピーの現在の状況を確認するには、作業コピーが含まれるディレクトリーに移動して、以下のコマンドを実行します。
cvs
status
このコマンドにより、現在のステータス (
Up-to-date
、Locally Added
、Locally Removed
または Locally Modified
) およびリビジョンなど、リビジョン管理が行われるファイルごとに詳細情報が表示されます。ただし、作業コピーの変更内容だけを確認するには、シェルプロンプトで以下を入力して、出力を簡素化することができます。
cvs
status
2>/dev/null
|grep
Status:
|grep
-v
Up-to-date
例2.7 作業コピーのステータスの表示
CVS リポジトリーの作業コピーが含まれるディレクトリーに以下のコンテンツが含まれていると仮定します。
project]$ ls
AUTHORS ChangeLog CVS doc INSTALL LICENSE Makefile README src
CVS リポジトリーへの追加が予定されている、このディレクトリー内のファイルとディレクトリーはすべて (
ChangeLog
以外の)、すでにリビジョン管理がされています。リビジョン管理がされている TODO
ファイルは、削除のスケジューリングがされており、この作業コピーはすでに存在しません。最後に Makefile
にはローカルの変更内容が含まれます。このような作業コピーのステータスを表示するには、以下を入力します。
project]$ cvs status 2>/dev/null | grep Status: | grep -v Up-to-date
File: ChangeLog Status: Locally Added
File: Makefile Status: Locally Modified
File: no file TODO Status: Locally Removed
差異の表示
作業コピーとチェックアウトしたコンテンツの差異を表示するには、作業コピーが含まれるディレクトリーに移動して、以下のコマンドを実行します。
cvs
diff
[file…]
このコマンドにより、作業コピーにあるすべてのファイルへの変更が表示されます。特定のファイルに対する変更のみを表示するには、コマンドラインでそのファイル名を指定します。
例2.8 作業コピーへの変更の表示
CVS リポジトリーの作業コピーが含まれるディレクトリーに以下のコンテンツが含まれていると仮定します。
project]$ ls
AUTHORS ChangeLog CVS doc INSTALL LICENSE Makefile README src
このディレクトリー内のすべてのファイルはリビジョン管理されており、
Makefile
にはローカルでの変更が含まれます。これらの変更を表示するには以下を入力します。
project]$ cvs diff
cvs diff: Diffing .
cvs diff: ChangeLog is a new entry, no comparison available
Index: Makefile
===================================================================
RCS file: /home/john/cvs/project/Makefile,v
retrieving revision 1.1.1.1
diff -r1.1.1.1 Makefile
156c156
< -rm -f $(MAN1)
---
> -rm -f $(MAN1) $(MAN7)
cvs diff: TODO was removed, no comparison available
cvs diff: Diffing doc...
2.1.6. 変更のコミット
他の人と変更の共有や CVS リポジトリーへの変更のコミットを行うには、作業コピーのあるディレクトリーに移動して、以下のコマンドを実行します。
cvs
commit
[-m
"commit message"]
コマンドラインにコミットメッセージを指定しない限り、CVS により、ログの記述用に外部テキストエディター (デフォルトでは vi) が開きます。どのエディターを起動するか決定する方法については「CVS のインストールおよび設定」を参照してください。
例2.9 CVS リポジトリーへの変更のコミット
CVS リポジトリーの作業コピーが含まれるディレクトリーに以下のコンテンツが含まれていると仮定します。
project]$ ls
AUTHORS ChangeLog CVS doc INSTALL LICENSE Makefile README src
作業コピーでは、
ChangeLog
は CVS リポジトリーへの追加がスケジューリングされており、Makefile
はすでにリビジョン管理がされ、ローカルの変更が含まれます。また、リビジョンが管理されている TODO
ファイルは削除するようにスケジューリングされており、作業コピーには存在しません。CVS リポジトリーにこれらの変更をコミットするには、以下を入力します。
project]$ cvs commit -m "Updated the makefile."
cvs commit: Examining .
cvs commit: Examining doc...
RCS file: /home/john/cvsroot/project/ChangeLog,v
done
Checking in ChangeLog;
/home/john/cvsroot/project/ChangeLog,v <-- ChangeLog
initial revision: 1.1
done
Checking in Makefile;
/home/john/cvsroot/project/Makefile,v <-- Makefile
new revision: 1.2; previous revision: 1.1
done
Removing TODO;
/home/john/cvsroot/project/TODO,v <-- TODO
new revision: delete; previous revision: 1.1.1.1
done
2.1.7. 作業コピーの更新
作業コピーを更新して、CVS リポジトリーから最新の変更を取得するには、作業コピーが含まれるディレクトリーに移動して、以下のコマンドを実行します。
cvs
update
例2.10 作業コピーの更新
CVS リポジトリーの作業コピーが含まれるディレクトリーに以下のコンテンツが含まれていると仮定します。
project]$ ls
AUTHORS CVS doc INSTALL LICENSE Makefile README src TODO
このリポジトリーに
ChangeLog
を追加し、TODO
ファイルを削除し、さらに Makefile
に変更を加えたと仮定します。この作業コピーを更新するには、以下を入力します。
myproject]$ cvs update
cvs update: Updating .
U ChangeLog
U Makefile
cvs update: TODO is no longer in the repository
cvs update: Updating doc
cvs update: Updating src
2.1.8. その他のリソース
サポートされる全機能に関する詳しい説明は、本書の対象外となっています。詳細情報は、以下に記載のリソースを参照してください。
インストールされているドキュメント
- cvs(1) — cvs クライアントプログラムの man ページでは、使用方法に関する詳しい情報が提供されます。