Subversionのアトミックコミットの価値は何ですか?
-
05-07-2019 - |
質問
バージョン管理のベストプラクティスを作成し、それに従おうとしていますが、Subversionのアトミックコミットへの参照に遭遇しました。このアクションについて聞いたことがないので、それについていくつか質問があります。
- その目的は何ですか?
- いつ使用すべきか
- 通常のコミットとはどう違いますか?
- TortoiseSVN ユーザーは利用できますか?もしそうなら、どのように?
解決
アトミックコミット用の特別なコマンドはありません。 Subversionのコミットはすべてアトミックです。
(任意の数のファイルの)すべてのコミットが全体として成功または失敗することを意味します。
コミットされたファイルの一部のみがリポジトリに到達し、他のファイルがリポジトリに到達しないことはありません(たとえば、コミット操作の途中でエラーが発生したか、ファイルの1つで競合が発生したため)。
これはTortoiseSVNでも同じです。これは、「通常」に基づいて構築されるためです。 Subversion機能。
以下は、 Subversion bookからの抜粋です。 :
svn commit操作が公開します 任意の数のファイルの変更および 単一のアトミックとしてのディレクトリ トランザクション。作業コピーで、あなたは ファイルの内容を変更できます。作成、 ファイルの削除、名前変更、コピー、および ディレクトリ;そして、コミットします アトミックとしての完全な変更セット トランザクション。
アトミックトランザクションとは、単に これ:すべての変更が発生する リポジトリ内、またはどれも 起こる。 Subversionは保持しようとします プログラムに直面したこの原子性 クラッシュ、システムクラッシュ、ネットワーク 問題、および他のユーザーのアクション。
他のヒント
アイデアは、あるファイルへの変更は通常、別のファイルへの変更に関連しているというものです。一部の古いバージョン管理システムは、実際には1回のコミットで複数のファイルを処理しなかった(「アトミックコミット」と呼んでいます)、または処理が不十分でした。
このために特別なことをする必要はありません。これがSubversionの仕組みです。ただし、Subversionでは、一度に1つのファイルをチェックインするか、一度にまたはすべての変更されたファイルを一度にチェックインするかを選択できます。
複数のファイルを1つのコミットとして実行するという考え方は、一般的に言えば、特定のバージョンでリポジトリをチェックアウトでき、少なくともコンパイルされ、うまくいけば実行されるということです。これはチームにとって重要です。実際には、これは常に100%真実ではないかもしれませんが、指針は健全です。
そのため、1つのファイルを実行する場合でも、すべての変更を一度に実行するか、チェックイン中の何かを1つのコミットとして理解する必要があります。バグを修正し、8個のファイルを変更する必要がある場合、8個すべてのファイルを1つのコミットとしてチェックインし、修正したバグと修正方法を示すメッセージを入力します。問題が発生した場合、後で簡単に展開できます。
「原子」この場合、アトミック操作を指します。ここで適切な定義を見つけることができます: http://en.wikipedia.org/wiki/Atomic_operation
SVNのすべてのコミットは自動的にアトミックであるため、コミットを行うすべての場所で無料で取得できます。
アトミックコミットの利点を知りたい場合は、ブランチをディスク上のトランクにマージすると想像してください。朝から始まり、昼食を済ませると、すべてがコンパイルされ、すべての単体テストが正常に実行されます。次に、そのマージ中に変更された200以上のファイルをコミットします。
SVNでは、コミットが成功して200以上のファイルがすべて一度にコミットされるか、コミットが失敗してリポジトリに変更が加えられませんでした。 (これについて言うことはこれ以上ありません。それは常にそうあるべきことです。)
アトミックコミットを持たないCVSでは、誰かがあなたのネットワークケーブルをつまずいて、残りの50以上のファイルがコミットされておらず、リポジトリが中間状態のままであるため、150ファイル後にコミットが中断されることがあります。ネットワークケーブルを接続しようとすると、チームの他の誰かが別の変更セットをチェックインします。その変更セットは、すでにチェックインしたものとは切り離されているため、他の人のコミットは成功します。ただし、変更には互換性がありません。現在、チームは、コンパイルすらしないコードを含むリポジトリに固執しています。テストはもちろんパスします。さらに悪いことに、2人はチームマネージャーに首を突っ込ませて、互換性のない変更をできるだけ早く修正し、チームの他のメンバーがQuakeのプレイを停止して仕事に復帰できるようにします。
驚くべきことに、そのようなシナリオは見かけほどではありません。私は何度かそこに行って、ひどいシャツのコレクションを手に入れました。
アトミックコミットの真の使用方法を理解するには、継続的インテグレーションに関する次の記事をお読みください:
http://en.wikipedia.org/wiki/Continuous_integration
実際に使用するのは、統合の問題が発生した場合に特定の開発者のすべての変更を取り消すことができるようにすることです。これは、リポジトリのコードの整合性を維持するための非常に強力な機能です。