1. ホーム
  2. svn

[解決済み] SVN: ファイルを「コミットしない」とマークする方法はありますか?

2022-04-26 10:23:34

質問

TortoiseSVN で、あるファイルを ignore-on-commit チェンジリストに移動し、ツリー全体をコミットする際に、そのファイルへの変更がコミットされないようにすることはできますか?

svnコマンドラインツールを使って、そのようなことをする方法はありますか?

EDIT:を使うという提案をありがとうございました。 svn:ignore しかし、それは私が探していたものとは全く違うものです。

svn:ignore は、次のような影響を与えます。 svn add &です。 svn import . これは無視するファイル名のパターンのリストを与える。

すでにソース管理下にあるファイルがあるのですが、そのファイルに一時的な変更を加えて、後でソースツリー全体をコミットするときにコミットされないようにしたいのです。私は他にも多くの変更を行っているので、ツリーをコミットする前にそのファイルを元に戻すようにモニターにメモを貼り付けることもできますが、svn が自動的にそのファイルをスキップしてくれたら嬉しいですね。

解決方法は?

Subversionには、2016年2月/バージョン1.9現在、"do not commit" / "ignore on commit"の機能が組み込まれていません。この回答は、理想的でないコマンドラインによる回避策です。

OPにあるように、TortoiseSVNには"ignore-on-commit"というチェンジリストが組み込まれており、コミットからは自動的に除外されます。 コマンドラインクライアントにはこれがないので、これと同じ動作を実現するには複数のチェンジリストを使用する必要があります(注意点はあります)。 :

  • コミットしたい仕事のためのもの[work]。
  • 無視したいもの用[ignore-on-commit]をひとつ。

TortoiseSVN での前例があるので、私の例ではコミットしたくないファイルには "ignore-on-commit" を使っています。コミットするファイルには "work" を使用しますが、好きな名前を選ぶことができます。

まず、すべてのファイルを "work" という名前のチェンジリストに追加します。これは作業コピーのルートから実行する必要があります。

svn cl work . -R

これは作業コピーのすべてのファイルを再帰的に "work" という名前のチェンジリストに追加します。新しいファイルが作業コピーに追加されるとき、新しいファイルを明確に追加する必要がありますし、さもなければそれらは含まれません。第二に、もしこれをもう一度実行しなければならない場合、すべての "ignore-on-commit"ファイルを再度追加する必要があります。理想的ではありませんが、他の人がやっているように、自分自身の「無視」リストをファイルに保存して管理することも可能でしょう。

次に、除外したいファイルについて。

svn cl ignore-on-commit path\to\file-to-ignore

ファイルはひとつの変更リストにしか入れられないので、前回の "work" の追加後にこの追加を実行すると、無視したいファイルを "work" の変更リストから削除し、"ignore-on-commit" の変更リストに入れることができます。

変更したファイルをコミットする準備ができたら、コミットに "--cl work" を追加するだけです。

svn commit --cl work -m "message"

以下は、私のマシンでの簡単な例です。

D:\workspace\trunk>svn cl work . -R
Skipped '.'
Skipped 'src'
Skipped 'src\conf'
A [work] src\conf\db.properties
Skipped 'src\java'
Skipped 'src\java\com'
Skipped 'src\java\com\corp'
Skipped 'src\java\com\corp\sample'
A [work] src\java\com\corp\sample\Main.java
Skipped 'src\java\com\corp\sample\controller'
A [work] src\java\com\corp\sample\controller\Controller.java
Skipped 'src\java\com\corp\sample\model'
A [work] src\java\com\corp\sample\model\Model.java
Skipped 'src\java\com\corp\sample\view'
A [work] src\java\com\corp\sample\view\View.java
Skipped 'src\resource'
A [work] src\resource\icon.ico
Skipped 'src\test'

D:\workspace\trunk>svn cl ignore-on-commit src\conf\db.properties
D [work] src\conf\db.properties
A [ignore-on-commit] src\conf\db.properties

D:\workspace\trunk>svn status

--- Changelist 'work':
        src\java\com\corp\sample\Main.java
        src\java\com\corp\sample\controller\Controller.java
        src\java\com\corp\sample\model\Model.java
M       src\java\com\corp\sample\view\View.java
        src\resource\icon.ico

--- Changelist 'ignore-on-commit':
M       src\conf\db.properties

D:\workspace\trunk>svn commit --cl work -m "fixed refresh issue"
Sending        src\java\com\corp\sample\view\View.java
Transmitting file data .done
Committing transaction...
Committed revision 9.

代替案としては、コミットしたいすべてのファイルを単に「作業用」チェンジリストに追加し、無視リストも維持しないことですが、これも大変な作業です。本当に、唯一のシンプルで理想的な解決策は、これがSVN自体に実装される場合です。Subversionのissue trackerに、この件に関する長年の課題があります。 SVN-2858 将来的に変更される可能性があります。