2

ここのsvn初心者:

私が svn リポジトリから引っ張ってきて、かなりの量のコードを書いたとしましょう。ただし、変更したファイルの半分だけをコミットしたいと考えています。しかし、私svn addはそれらのすべてに誤って使用しました。変更したコードに実際に触れずに、以前の svn 状態 (これらすべてのファイルを追加する前) に戻すにはどうすればよいですか。

手動で半分に svn delete を使用できることはわかっていますが、元に戻すためのより高速な方法があるかどうか疑問に思っていました。

4

3 に答える 3

2

コミットしておらず、TortoiseSVN のようなツールを使用している場合は、必要のないファイル (複数をマーク) を単純に元に戻すか、「追加を元に戻す」ことができます。

ここに画像の説明を入力

于 2013-05-24T05:40:55.060 に答える
1

変更に svn copy または svn move が含まれていない場合、すべての svn add を取り消して変更を保持する最も簡単な方法の 1 つは次のとおりです。

  1. .svn ディレクトリを除いて、作業コピー全体を別の場所にコピーします(wc.new と呼びましょう)。
  2. 元の作業コピーに対して svn revert を実行します
  3. wc.new を元の作業コピーにコピーし、すべてのファイルを置き換えます
于 2013-05-24T06:15:27.923 に答える
1

まだ変更をコミットしていないことを願っています。

次のコマンドを使用して、ファイルの追加を取り消すことができます。

$ svn delete --delete --keep-local $file_name

これにより、ファイルの追加が解除され、同時にファイルがドライブに保持されます。

これを使用して、すべての変更 (すべての追加を含む) を元に戻すこともできます。

$ svn revert -R .

これにより、すべてのファイルが元に戻り、追加したファイルはすべて削除されますが、何も削除されません。これにより、すでにリポジトリにあるファイルに加えられた変更も元に戻ります。ただし、チェンジリストはその日を救うことができます。

次のコマンドを使用して、Subversion で変更リストを作成することもできます。svn cl

$ svn cl FOO $file1 $file2 $file3
$ svn cl FOO $file4 $file5

FOOこれにより、上記の 5 つのファイルで呼び出される変更リストが作成されます。変更リスト名と新しいファイルを指定するだけで、変更リストに追加できることに注意してください。ファイルを削除するには:

$ svn cl --remove $file4

$file4これにより、変更リストから削除されますFOO

$ svn cl BAR $file1

$file1これにより、変更リストから削除され、変更リストFOOに配置されますBAR

さて、ここにすべてが集まる場所です...

$ svn revert --cl FOO -R .

これにより、すべてのファイルが元に戻されますが、 changelist 内のファイルのみFOOが元に戻されます。他のすべてのファイルは変更されません。したがって、追加を取り消すすべてのファイルの変更リストを作成し、その変更リストでsvn revertコマンドを使用できます。これにより、ファイルは保持されますが、同時に追加も解除されます。

したがって、追加を取り消すすべてのファイルのチェンジリストを作成し、そのチェンジリストに対して asvn revertを実行します。

次のようなことができます。

 $ svn list | awk '$1 == A' '{print $2}' | tee files_to_unadd_list.txt

これにより、Subversion に追加されたすべてのファイルのリストが表示され、リストに追加されます。その後、そのリストを編集して、保持したいファイルを削除できます。結果は、追加を取り消すファイルのリストです。

次に、次のように処理できます。

$ while read file
do
    svn revert --force --keep-local $file
done < files_to_unadd_list.txt

または、最初に変更リストを作成します。

$ while read file
do
    svn cl UNADD $file
done < files_to_unadd_list.txt

次に、そのリストを調べて確認し、次のことを行います。

$ svn delete --cl UNADD -R .
于 2013-05-24T02:49:11.507 に答える