セットアップと設定
プロジェクトの取得と作成
基本的なスナップショット取得
ブランチとマージ
プロジェクトの共有と更新
検査と比較
パッチ適用
デバッグ
メール
外部システム
サーバー管理
ガイド
- gitattributes
- コマンドラインインターフェースの慣例
- 日常のGit
- よくある質問 (FAQ)
- 用語集
- フック
- gitignore
- gitmodules
- リビジョン
- サブモジュール
- チュートリアル
- ワークフロー
- すべてのガイド...
管理
配管コマンド (Plumbing Commands)
- 2.44.1 → 2.49.0 変更なし
-
2.44.0
2024-02-23
- 2.42.1 → 2.43.6 変更なし
-
2.42.0
2023-08-21
- 2.37.3 → 2.41.3 変更なし
-
2.37.2
2022-08-11
- 2.33.2 → 2.37.1 変更なし
-
2.33.1
2021-10-12
- 2.32.1 → 2.33.0 変更なし
-
2.32.0
2021-06-06
- 2.25.1 → 2.31.8 変更なし
-
2.25.0
2020-01-13
- 2.23.1 → 2.24.4 変更なし
-
2.23.0
2019-08-16
- 2.18.1 → 2.22.5 変更なし
-
2.18.0
2018-06-21
- 2.16.6 → 2.17.6 変更なし
-
2.15.4
2019-12-06
- 2.10.5 → 2.14.6 変更なし
-
2.9.5
2017-07-30
- 2.5.6 → 2.8.6 変更なし
-
2.4.12
2017-05-05
- 2.3.10 変更なし
-
2.2.3
2015-09-04
- 2.1.4 変更なし
-
2.0.5
2014-12-17
概要
SSH
export CVS_SERVER="git cvsserver" cvs -d :ext:user@server/path/repo.git co <HEAD_name>
pserver (/etc/inetd.conf)
cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver
使用方法
git-cvsserver [<options>] [pserver|server] [<directory> …]
説明
このアプリケーションは、Git 用の CVS エミュレーションレイヤーです。
これは非常に高機能です。しかし、すべてのメソッドが実装されているわけではなく、実装されているメソッドについても、すべてのスイッチが実装されているわけではありません。
CLI CVS クライアントと Eclipse CVS プラグインの両方を使用してテストが行われました。これらのクライアントのほとんどの機能は問題なく動作します。
オプション
これらのオプションはすべて、サーバー側で強制される場合にのみ意味があります。これらは、git-daemon[1] のオプションにできるだけ似るように実装されています。
- --base-path <path>
-
要求された CVSROOT に *path* をプレフィックスとして追加します
- --strict-paths
-
サブディレクトリへの再帰を許可しません
- --export-all
-
設定で
gitcvs.enabled
をチェックしません。このオプションを使用する場合は、許可されたディレクトリのリスト (下記参照) も指定する必要があります。 - -V
- --version
-
バージョン情報を表示して終了します
- -h
- -H
- --help
-
使用法情報を表示して終了します
- <directory>
-
残りの引数はディレクトリのリストを提供します。ディレクトリが指定されていない場合、すべてが許可されます。これらのディレクトリ内のリポジトリは、
--export-all
が指定されていない限り、gitcvs.enabled
設定オプションを依然として必要とします。
制限事項
CVS クライアントはタグ付け、ブランチ作成、または Git マージを実行できません。
*git-cvsserver* は Git ブランチを CVS モジュールにマッピングします。これは、CVS では通常モジュールが1つ以上のディレクトリを表すため、ほとんどの CVS ユーザーが期待するものとは大きく異なります。
インストール
-
pserver を介して CVS アクセスを提供する場合は、/etc/inetd.conf に次のような行を追加します。
cvspserver stream tcp nowait nobody git-cvsserver pserver
注意: 一部の inetd サーバーでは、argv[0] の値 (つまり、プログラムが実行されたと想定する名前) とは独立して実行可能ファイルの名前を指定できます。この場合、/etc/inetd.conf の正しい行は次のようになります。
cvspserver stream tcp nowait nobody /usr/bin/git-cvsserver git-cvsserver pserver
デフォルトでは pserver によって匿名アクセスのみが提供されます。コミットするには pserver アカウントを作成する必要があります。cvsserver に書き込みを許可したいリポジトリの設定ファイルに gitcvs.authdb 設定を追加するだけです。例:
[gitcvs] authdb = /etc/cvsserver/passwd
これらのファイルのフォーマットは、ユーザー名の後に暗号化されたパスワードが続くものです。例:
myuser:sqkNi8zPf01HI myuser:$1$9K7FzU28$VfF6EoPYCJEYcVQwATgOP/ myuser:$5$.NqmNH1vwfzGpV8B$znZIcumu1tNLATgV2l6e1/mY8RzhUDHMOaVOeL1cxV3
Apache に付属の *htpasswd* ユーティリティを使用してこれらのファイルを作成できますが、-d オプション (またはシステムがサポートしている場合は -B) を使用した場合に限ります。
できれば、お使いのプラットフォームでパスワードハッシュ作成を管理するシステム固有のユーティリティ (例: Linux の mkpasswd、OpenBSD の encrypt、NetBSD の pwhash) を使用し、適切な場所に貼り付けてください。
次に、pserver メソッドを介してパスワードを提供します。例:
cvs -d:pserver:someuser:somepassword@server:/path/repo.git co <HEAD_name>
SSH アクセスには特別なセットアップは必要ありません。PATH に Git ツールがあるだけで十分です。CVS_SERVER 環境変数を受け入れないクライアントがある場合は、*git-cvsserver* を
cvs
に名前変更できます。注意: 新しい CVS バージョン (1.12.11 以降) は、CVSROOT に直接 CVS_SERVER を指定することもサポートしています。例:
cvs -d ":ext;CVS_SERVER=git cvsserver:user@server/path/repo.git" co <HEAD_name>
これにより、*CVS/Root* ファイルに保存されるため、常に正しい環境変数を設定する必要がありません。*git-shell* に制限されている SSH ユーザーは、CVS_SERVER でデフォルトをオーバーライドする必要はありません (すべきでもありません)。*git-shell* は
cvs
を *git-cvsserver* の意味として理解し、相手側が実際の *cvs* をより適切に実行しているかのように振る舞うからです。 -
CVS からアクセスしたい各リポジトリについて、リポジトリの設定を編集し、以下のセクションを追加する必要があります。
[gitcvs] enabled=1 # optional for debugging logFile=/path/to/logfile
注意: *git-cvsserver* を呼び出す各ユーザーがログファイルとデータベースへの書き込みアクセス権を持っていることを確認する必要があります (詳細は データベースバックエンド を参照)。SSH 経由で書き込みアクセスを提供したい場合、ユーザーはもちろん Git リポジトリ自体への書き込みアクセスも必要です。
また、
cvs commit
が機能するためには、各リポジトリが「bare (ベア)」(Git インデックスファイルなし) であることを確認する必要があります。gitcvs-migration[7] を参照してください。すべての設定変数は、特定のアクセス方法に対して上書きすることもできます。有効なメソッド名は「ext」(SSH アクセス用) と「pserver」です。以下の設定例では、pserver アクセスを無効にしつつ、SSH 経由でのアクセスは引き続き許可します。
[gitcvs] enabled=0 [gitcvs "ext"] enabled=1
-
チェックアウトコマンドで CVSROOT/CVS_SERVER を直接指定せず、*CVS/Root* ファイルに自動保存しない場合は、環境変数で明示的に設定する必要があります。CVSROOT は通常通り設定する必要がありますが、ディレクトリは適切な Git リポジトリを指すようにする必要があります。上記のように、*git-shell* に制限されていない SSH クライアントの場合、CVS_SERVER は *git-cvsserver* に設定する必要があります。
export CVSROOT=:ext:user@server:/var/git/project.git export CVS_SERVER="git cvsserver"
-
コミットを行う SSH クライアントの場合、サーバー側の .ssh/environment ファイル (または、それぞれのシェルに応じて .bashrc など) が GIT_AUTHOR_NAME、GIT_AUTHOR_EMAIL、GIT_COMMITTER_NAME、GIT_COMMITTER_EMAIL に適切な値をエクスポートしていることを確認してください。ログインシェルが bash である SSH クライアントの場合、.bashrc が妥当な代替案となる場合があります。
-
クライアントはプロジェクトをチェックアウトできるようになります。CVS の *モジュール* 名を使用して、どの Git の *ヘッド* をチェックアウトしたいかを示します。これは、
-d <dir-name>
で別に指定しない限り、新しくチェックアウトされたディレクトリの名前も設定します。例えば、これは *master* ブランチをproject-master
ディレクトリにチェックアウトします。cvs co -d project-master master
データベースバックエンド
*git-cvsserver* は、一貫した CVS リビジョン番号を維持するために、Git ヘッドごと (つまり CVS モジュールごと) に1つのデータベースを使用し、リポジトリに関する情報を保存します。データベースはコミットごとに更新 (つまり書き込み) する必要があります。
コミットが git
を直接使用して行われた場合 (*git-cvsserver* を使用した場合とは対照的に)、更新はアクセス方法や要求された操作に関係なく、*git-cvsserver* による次のリポジトリアクセス時に発生する必要があります。
これは、たとえ読み取りアクセスのみを提供する場合 (例: pserver メソッドを使用) でも、*git-cvsserver* は信頼性のある動作のためにデータベースへの書き込みアクセス権を持つべきであることを意味します (そうでない場合、*git-cvsserver* が実行されるたびにデータベースが最新であることを確認する必要があります)。
デフォルトでは、Git ディレクトリ内の gitcvs.<module-name>.sqlite
という名前の SQLite データベースを使用します。SQLite バックエンドは書き込み時にデータベースファイルと同じディレクトリに一時ファイルを作成するため、*git-cvsserver* を使用するユーザーにデータベースファイルへの書き込みアクセス権を与えるだけでは不十分で、ディレクトリへの書き込みアクセス権も与える必要があることに注意してください。
追跡しているブランチが変更された後、データベースを一貫した形式で確実に再生成することはできません。例: マージされたブランチの場合、*git-cvsserver* は開発の1つのブランチのみを追跡し、*git merge* 後に増分更新されたデータベースは、ゼロから再生成されたデータベースとは異なるブランチを追跡する可能性があり、CVS リビジョン番号の不整合を引き起こします。git-cvsserver
には、マージ前に増分実行されていた場合にどのブランチを選択していたかを知る方法がありません。したがって、データベースを完全にまたは部分的に (古いバックアップから) 再生成する必要がある場合は、既存の CVS サンドボックスに注意する必要があります。
以下の設定変数でデータベースバックエンドを設定できます
データベースバックエンドの設定
*git-cvsserver* は Perl DBI モジュールを使用します。これらの変数を変更する場合は、特に DBI->connect()
について、そのドキュメンテーションも参照してください。
- gitcvs.dbName
-
データベース名。正確な意味は選択されたデータベースドライバーに依存し、SQLite の場合はファイル名です。変数置換をサポートします (下記参照)。セミコロン (
;
) を含めることはできません。デフォルト: *%Ggitcvs.%m.sqlite* - gitcvs.dbDriver
-
使用する DBI ドライバー。ここで利用可能な任意のドライバーを指定できますが、動作しない場合があります。cvsserver は *DBD::SQLite* でテストされ、*DBD::Pg* で動作することが報告されており、*DBD::mysql* では動作**しない**ことが報告されています。これは実験的な機能と見なしてください。コロン (
:
) を含めることはできません。デフォルト: *SQLite* - gitcvs.dbuser
-
データベースユーザー。SQLite にはデータベースユーザーの概念がないため、
dbDriver
を設定する場合にのみ有用です。変数置換をサポートします (下記参照)。 - gitcvs.dbPass
-
データベースパスワード。SQLite にはデータベースパスワードの概念がないため、
dbDriver
を設定する場合にのみ有用です。 - gitcvs.dbTableNamePrefix
-
データベーステーブル名のプレフィックス。変数置換をサポートします (下記参照)。英字以外の文字はすべてアンダースコアに置き換えられます。
すべての変数は、アクセス方法ごとに設定することもできます。上記を参照してください。
ECLIPSE CVS クライアントに関する注意
Eclipse CVS クライアントでチェックアウトを行うには
-
「新規プロジェクトの作成 → CVS チェックアウトから」を選択します
-
新しいロケーションを作成します。適切なプロトコルを選択する方法については、以下の注意を参照してください。
-
利用可能な *モジュール* を参照します。リポジトリ内のヘッドのリストが表示されます。そこからツリーを参照することはできません。ヘッドのみです。
-
どのブランチ/タグをチェックアウトするか尋ねられたら
HEAD
を選択します。「コミットウィザードを起動」のチェックを外して、.project ファイルのコミットを避けます。
プロトコルの注意: pserver 経由で匿名アクセスを使用している場合は、それを選択するだけです。SSH アクセスを使用している場合は、*ext* プロトコルを選択し、Preferences→Team→CVS→ExtConnection ペインで *ext* アクセスを設定してください。CVS_SERVER を "git cvsserver
" に設定します。*ext* を使用する場合、パスワードのサポートは良好ではないため、SSH キーを設定することを強くお勧めします。
代替として、Eclipse が提供する非標準の extssh プロトコルを使用することもできます。その場合、CVS_SERVER は無視され、サーバー上の cvs ユーティリティを *git-cvsserver* に置き換えるか、または .bashrc
を操作して *cvs* の呼び出しが実質的に *git-cvsserver* を呼び出すようにする必要があります。
動作確認済みクライアント
-
Debian 上の CVS 1.12.9
-
MacOSX 上の CVS 1.11.17 (Fink パッケージより)
-
MacOSX 上の Eclipse 3.0, 3.1.2 (Eclipse CVS クライアントに関する注意を参照)
-
TortoiseCVS
サポートされる操作
チェックアウト、差分、ステータス、更新、ログ、追加、削除、コミットなど、通常の利用に必要なすべての操作がサポートされています。
CVS タグまたはリビジョン番号を読み取るほとんどの CVS コマンド引数 (通常は -r) は機能し、任意の Git リビジョン指定 (タグ、ブランチ、コミット ID など) もサポートします。ただし、デフォルト以外のブランチの CVS リビジョン番号は適切にエミュレートされておらず、cvs log はタグやブランチをまったく表示しません。(メインブランチ以外の CVS リビジョン番号は、表面上は CVS リビジョン番号に似ていますが、実際にはブランチポイントからのリビジョン数を表すのではなく、Git コミット ID を直接エンコードしています。)
特定のブランチをチェックアウトするには2つの方法があることに注意してください。このページの別の場所で説明されているように、cvs checkout の「module」パラメーターはブランチ名として解釈され、それがメインブランチになります。cvs update -r で一時的に別のブランチをスティッキーにしても、特定のサンドボックスのメインブランチのままです。あるいは、-r 引数は、モジュールが依然として「メイン」ブランチであるにもかかわらず、実際にチェックアウトする別のブランチを示すことができます。トレードオフ (現在の実装): 各新しい「モジュール」は、指定されたモジュールの履歴を持つ新しいデータベースをディスク上に作成し、データベース作成後は、そのメインブランチに対する操作は高速です。または、-r は追加のディスクスペースを占有しませんが、cvs update のような多くの操作で著しく遅くなる可能性があります。
CVS で許可されていない文字を持つ Git refspec を参照したい場合、2つのオプションがあります。まず、Git refspec を適切な CVS -r 引数に直接指定するだけで機能する場合があります。一部の CVS クライアントは、引数の健全性チェックをあまり行わないようです。次に、それが失敗した場合、CVS タグで有効な文字のみを使用する特殊な文字エスケープメカニズムを使用できます。アンダースコア ("_"
)、ダッシュ ("-"
)、1文字または2文字、およびダッシュ ("-"
) の形式の4文字または5文字のシーケンスは、1文字または2文字に基づいて様々な文字をエンコードできます。スラッシュ ("/"
) には "s"
、ピリオド ("."
) には "p"
、アンダースコア ("_"
) には "u"
、または任意のバイト値 (通常は ASCII 番号、または UTF-8 エンコードされた文字の一部) には2つの16進数字を使用します。
従来の監視操作 (編集、ウォッチ、関連するもの) はサポートされていません。エクスポートとタグ付け (タグとブランチ) はこの段階ではサポートされていません。
CRLF 行末変換
デフォルトでは、サーバーはすべてのファイルの -k
モードを空のままにします。これにより、CVS クライアントはそれらをテキストファイルとして扱い、一部のプラットフォームでは行末変換の対象となります。
gitcvs.usecrlfattr
設定変数を設定することで、サーバーに行末変換属性を使用してファイルの -k
モードを設定させることができます。行末変換の詳細については、gitattributes[5] を参照してください。
あるいは、gitcvs.usecrlfattr
設定が有効になっていないか、属性がファイル名の自動検出を許可しない場合、サーバーはデフォルト設定に gitcvs.allBinary
設定を使用します。gitcvs.allBinary
が設定されている場合、特に指定されていないファイルはデフォルトで *-kb* モードになります。そうでない場合、-k
モードは空のままです。ただし、gitcvs.allBinary
が「guess」に設定されている場合、正しい -k
モードはファイルの内容に基づいて推測されます。
*cvs* との最高の整合性を保つためには、gitcvs.usecrlfattr
を true に、gitcvs.allBinary
を「guess」に設定してデフォルトを上書きするのがおそらく最善です。
GIT
git[1] スイートの一部