ファイルが変更されていなくても、Subversion にファイルをコミットさせたい。これを行う方法はありますか?
12 に答える
ファイルの内容を変更しない場合 (つまり、johnstok が提案したように単に空白を変更することはできません) は、ファイルのプロパティの 1 つをいつでも変更できます。
例えば。
svn propset dummyproperty 1 yourfile svn commit yourfile
これにより、ファイルを変更せずにコミットが実行されます。
特別なsvn:
プロパティのいずれかを使用しないようにしてください。それ以外は問題ないはずです。
編集:他の多くの投稿者が、なぜ誰かがこれをやりたいのかを尋ねました-おそらく、この回答を下に置いた人々も同じ懸念を持っていました.
元のポスターについて話すことはできませんが、これが使用されているシナリオの 1 つは、Visual Sourcesafe リポジトリのアクティビティを Subversion リポジトリと自動的に同期しようとする場合です。
なぜ強制コミットをしたいのか答えてください。誰かが間違った、または不明確なコミット メッセージを使用したケースを見てきました。この間違いを修正できる強制コミットを実行できると便利です。そうすれば、更新されたコミット メッセージがリポジトリに移動するため、失われることはありません。
問題のあるファイルを削除してから再度追加することで、これを回避しました。それを行う最も良い方法ではなく、おそらく改訂履歴を壊してしまいましたが、私の目的には合っていました。
実行したい理由: ファイルは、同じソース (異なる #defines セット) からビルドされた 2 つの実行可能ファイルの 1 つでした。ソースへの小さな変更は、一方が変更され、一方が変更されなかったことを意味します。実際に最新バージョンに更新したことを改訂履歴に記録したかったのです(変更はありませんでしたが)。
おそらく、Morten Holdflod Møller の「ファイルは新しいリビジョンの一部である」という指摘は、この兆候をカバーするでしょうが、変更されていないファイルのログには、そのリビジョンのコメントが表示されなかったと思います。
テキスト ファイルの場合は、改行などの空白を追加するだけです。
これは可能であると疑問に思う人もいます: 何らかの理由で svn は doc ファイル間の違いを認識しないので、強制的にコミットしたいと思います!
ドキュメントを静的ディレクトリから svn に移動しています。ファイルは UG_v1.2、UG_v1.3 などです。履歴を保持するためだけに、1.2 を取得し、ファイル名からバージョンを削除して、svn に追加してコミットします。次に、2番目のものからバージョンを取得し、最初のものにコピーして、それと新しいバージョンをコミットしたいと考えています。ファイルのサイズと作成日は変更されますが (ドキュメントの内容は言及されていません)、svn は完全に同じファイルであると主張し、コミットを許可しません。ドキュメントを手動で変更すると、svn は異なるものを認識します。一体?:>
誰かが変更されていないファイルをコミットしたいのは、以前のバージョンのファイルに戻す方法を誤解しているからです。
たとえば、過去のリビジョン、たとえば650index.html
に更新するだけで、ファイルをリビジョン680に戻すことができます。
svn update index.html -r 650
しかし、次の理由により、問題は解決しません。
svn ステータス -u index.html * 650 index.html 改訂に対するステータス: 680
svn は、index.html がリモートで変更されており、コミットできないことを明確に示しています。つまり、index.html は古く、新しいリビジョンに更新する必要があると「考え」ます。したがって、次は index.html をリビジョン680svn update
に戻します。
ファイルを実際に元に戻すには、逆の順序でマージする必要があります。
svn merge -r 680:650 index.html
そしてそれをコミットしますsvn ci -m "Reverted to r650" index.html
私はそれが可能だとは思いませんが、まず第一に、なぜそれを行う必要があるのですか? ファイルが変更されていない場合は、コミットしないでください。
コミットでそのファイルを他のファイルとグループ化することが本当に必要な場合は、内部の小さなものを変更できます(たとえば、スペースを追加します)。
trueCryptボリュームでも同じ問題があります。
(上記のように)新しいプロパティ "forceCommit1"を追加すると、ボリュームファイルをコミットできました。ただし、ファイルの内容ではなく、プロパティのみがコミットされました。
ファイルを削除して、svnに再度追加しました
実際、私は強制コミットを行う理由に出くわしました。これはおそらくベストプラクティスではありませんが、機密情報が含まれているシェルスクリプトのセキュリティを厳しくする必要があるため、 Truecrypt( http://www.truecrypt.org/ )ボリュームをSVNに配置します。Truecryptボリュームが作成されると、そのバイナリデータは、それをどのように使用しても同じままです。したがって、実際には、ボリュームの内容を変更することはできますが、ボリュームが変更されたように見えることはありません。
プロパティを変更してもコミットは強制されません。
TortoiseSVN 1.4.5、ビルド 10425 - 32 ビット、2007/08/26 11:14:13
コマンドラインからできると思いましたか?
svn ci -force <filename>
私はここにそれをチェックするためのリポジトリを持っていないので、私は間違っているかもしれません。