48

TortoiseSVN を使用してファイルの一部だけをコミットしたいのですが、それを行う方法はありますか?

なぜそれをしたいのかを明確にするために、例を挙げます。

次のような、ビルド プロセスで置き換えられるいくつかの定義を含むファイルがあります。

#define SOME_PATH "[SOME_PATH]"

この [SOME_PATH] タグはビルド プロセスで置き換えられますが、コーディング中にマシンの実際のパスに変更する必要があります。

したがって、コミットするたびに、いくつかの行をバックアップし、元に戻し、コミットしてからバックアップを復元する必要がありますが、これはちょっと面倒です。

TortoiseSVN に X、Y、Z 行などの変更を「無視」するように指示する方法はありますか?

4

8 に答える 8

74

トップ投票の回答は古くなっています。

tortoiseSVN Web サイトから: http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-commit.html

ファイルの一部のみをコミットする

ファイルに加えた変更の一部のみをコミットしたい場合があります。このような状況は通常、何かに取り組んでいるときに緊急の修正をコミットする必要があり、その修正がたまたま作業中の同じファイルにある場合に発生します。

ファイルを右クリックし、コンテキスト メニュー → コミット後に復元を使用します。これにより、ファイルのコピーがそのまま作成されます。その後、TortoiseMerge などでファイルを編集し、コミットしたくないすべての変更を元に戻すことができます。これらの変更を保存したら、ファイルをコミットできます。

コミットが完了すると、ファイルのコピーが自動的に復元され、コミットされなかったすべての変更を含むファイルが作成されます。

于 2014-01-15T23:18:56.117 に答える
12

いいえ。Subversion はファイル レベルで動作します。

于 2008-11-24T13:32:20.210 に答える
7

いいえ。

これを行う最良の方法は、「build_paths.h.default」などのファイルをチェックインし、各ビルドプラットフォームで、それをbuild_paths.hにコピーし、それに合わせて変更してから、SVNにbuild_paths.hを無視するように指示することです。そして最後に、プログラム内に#include"buiild_paths.h"を含めます。

于 2008-11-24T13:33:39.863 に答える
4

ショートバージョン:いいえ。Subversion は全か無かのシステムです (私が知っているすべてのソース管理システムと同様)

より長いバージョン: いいえ。ただし、NANT などを使用してビルドする場合は、xmlpoke などを使用して、ビルド時にファイルの一部を書き換えることができます。私たちにとってはうまくいきます:)ビルド時に約6つのweb.configファイルとその他のさまざまなアプリ構成ファイルを書き換えます(まあ、展開パッケージのビルド時)...

于 2008-11-24T13:33:16.450 に答える
4

問題の解決策は、Subversion にこれを行わせるのではなく、環境固有の詳細 ([SOME_PATH] 値など) がチェックインされたコードの「外部」に保存されるようにアプリケーションを構成することです。

SVN によって無視されるようにマークされた別のファイルを介してこれを行うか、この情報を環境変数に保存するかは、開発言語/OS およびその他のいくつかの要因によって異なります。

どちらのソリューションを使用する場合でも、値が指定されていない場合に備えて、何らかのデフォルトを設定するのが賢明な場合があります。

詳細をビルド時または実行時に適用するかどうかも検討する価値があります。後者を調整できれば、アプリケーションの新しいバージョンの展開がはるかに簡単になります。

典型的な例は、データベース接続が必要な Web アプリケーションにありますが、実際に使用されるデータベース インスタンスは、開発環境と本番環境で異なります。このような場合、データベース構成は Web サーバー上で定義されます (アプリケーションではなく、指定された名前のデータベース接続を Web サーバーに要求するだけです)。開発サーバーと運用サーバーでは構成が異なります。これにより、同じWeb アプリケーションを両方のサーバーにデプロイし、各アプリ インスタンスが適切なデータベースにアクセスできるようになります。

于 2008-12-03T08:19:23.290 に答える
2

次を定義することもできます:

  • ロールバックを処理するpre-commitフック、
  • ファイルを復元するためのコミット後フック。

痛い...実際、 SVNマニュアルによると、これは良い考えではありません。

  • すべてのトリガーはサーバー側で実行されます(ClearCaseの場合のようにクライアント側ではありません)
  • Subversionは、リポジトリデータの特定のビットのクライアント側キャッシュを保持します。この方法でコミットトランザクションを変更すると、それらのキャッシュは検出できないほど古くなります。この不整合は、驚くべき予期しない動作につながる可能性があります。トランザクションを変更する代わりに、pre-commitフックでトランザクションを検証し、目的の要件を満たしていない場合はコミットを拒否する必要があります。

考えられる方法は、コミット後のスクリプトでファイルを変更し、そのファイルを独立した変更としてコミットしてから、別のコミット後のスクリプトで復元することです...

于 2008-11-24T13:43:37.410 に答える
0

あなたが探しているのは、darcsなどのさまざまな分散バージョン管理システムの機能です。

于 2008-11-24T13:57:49.253 に答える