SVNを使用しています。時々、コミットメッセージを書くときに何かを見逃します。しかし、いったんコミットされると、元に戻すことはできず、メッセージを編集することさえできません。なぜ彼らはそこに編集機能を入れなかったのですか?
git-svn
賢くなります。
SVNを使用しています。時々、コミットメッセージを書くときに何かを見逃します。しかし、いったんコミットされると、元に戻すことはできず、メッセージを編集することさえできません。なぜ彼らはそこに編集機能を入れなかったのですか?
git-svn
賢くなります。
回答:
SVN FAQによれば、リポジトリ管理者がリポジトリを有効にしている場合、またはリポジトリへのローカル管理アクセス権がある場合にできます。
ただし、これはおそらく悪い考えです。実際、あなたは歴史を変えています。バージョン管理のポイントの1つは、プロジェクトの履歴と監査証跡を維持することです。履歴の任意の変更を許可すると、監査証跡が無効になります。代わりに、小規模なコミットを実行し、簡潔かつ明示的なコミットメッセージを作成し、これらのエラーを防ぐために個人のワークフローを改善することをお勧めします。
基本的に、これを行うには、リポジトリに対する管理者権限(直接または間接)が必要です。すべてのユーザーがこれを行えるようにリポジトリを構成するか、サーバーでログメッセージを直接変更できます。
ログメッセージは、各リビジョンに添付されたプロパティとしてリポジトリに保持されます。デフォルトでは、ログメッセージプロパティ(svn:log)は、一度コミットすると編集できません。リビジョンプロパティ(svn:logが1つ)を変更すると、プロパティの以前の値が永久に破棄され、Subversionが誤ってこれを行わないようにするためです。ただし、Subversionでリビジョンプロパティを変更するには、いくつかの方法があります。
最初の方法は、リポジトリ管理者がリビジョンプロパティの変更を有効にすることです。これは、「pre-revprop-change」と呼ばれるフックを作成することによって行われます(これを行う方法の詳細については、Subversionブックのこのセクションを参照してください)。「pre-revprop-change」フックは、変更される前に古いログメッセージにアクセスできるため、何らかの方法で(たとえば、電子メールを送信することによって)保存できます。リビジョンプロパティの変更が有効になったら、次のいずれかのようにsvn propeditまたはsvn propsetに--revpropスイッチを渡すことで、リビジョンのログメッセージを変更できます。
$svn propedit -r N --revprop svn:log URL $svn propset -r N --revprop svn:log "new log message" URL
Nはログメッセージを変更するリビジョン番号で、URLはリポジトリの場所です。作業コピー内からこのコマンドを実行する場合、URLを省略できます。
ログメッセージを変更する2番目の方法は、svnadmin setlogを使用することです。これは、ファイルシステム上のリポジトリの場所を参照して行う必要があります。このコマンドを使用してリモートリポジトリを変更することはできません。
$ svnadmin setlog REPOS_PATH -r N FILE
ここで、REPOS_PATHはリポジトリの場所、Nは変更するログメッセージのリビジョン番号、FILEは新しいログメッセージを含むファイルです。「pre-revprop-change」フックが配置されていない場合(または何らかの理由でフックスクリプトをバイパスする場合)、-bypass-hooksオプションを使用することもできます。ただし、このオプションを使用する場合は、十分に注意してください。変更の電子メール通知や、リビジョンプロパティを追跡するバックアップシステムなどをバイパスしている可能性があります。
回答カミルKisielに応じて、スタックオーバーフロー上で同様の問題。
それだから、集中バージョン管理システム -あなたが変更をコミットするとすぐに(とあなたのメッセージをコミットコミットにバインドされた慣習によるもので)、リポジトリへの読み取りアクセス権を持つ誰もがその情報を見ることができます。人々が「現実」についての異なる意見になってしまうため、情報を広めた後に情報を変更することは悪い考えです。
Gitのような分散バージョン管理システムは、他の人が情報を利用できるようにする行為がアトミックであり、コミットメッセージなどの追加情報がないことを保証することにより、この問題を軽減します。ただし、ここでも同じ原則が適用されます。すでに他の人が利用できるようにしたものをローカルで変更することはできません。