1

時々私は多くのファイルを元に戻す必要があります-20-50近くですが、ローカルの変更でファイルを保存する必要があります-将来私が何かを使用する場合。
プロジェクトは大きく、10000を超えるファイルがあります。
コミットされていないファイルのみのコピーを作成することは可能ですか?
手動で変更を見つけてコピーするには2時間近くかかります-プロジェクトのツリーには多くのネストされたフォルダがあります。

4

2 に答える 2

4

で差分を作成し、 で差分をsvn diff再適用できますsvn patch

ただし、これは実際には SVN を操作する方法ではありません。変更を加えてブランチを作成できれば、後でそのブランチをマージして、コンテンツを仲間と共有できます。

ブランチの作成は、SVN では比較的安価であることに注意してください。サーバー上では、ファイルは実際に変更されるまで元のファイルにリンクされています。変更されたファイルのみがサーバー上のスペースを占有します。

注:
svn diff完全なファイルではなく、ファイルの変更された行のみを保存します。ただし、パッチを再適用する必要がある場合は、これで十分です。

于 2012-04-13T08:50:42.133 に答える
1

本当にファイルのコピーが必要な場合 (svn diff を使用したり、ブランチを実行したりするのではなく)、tne アプローチ (サーバー構成ファイルのバックアップに使用するバージョン) は、どのファイルが変更されているかを確認することです。以下のメモは、リポジトリの最上位にいることを前提としています。

たとえば、実行すると、svn status次のような出力が得られる場合があります。

?       plans/software/intro_jan12.log
?       plans/software/intro_jan12.dvi
?       plans/software/data.txt
?       plans/software/intro_jan12.nav
M       plans/software/intro_jan12.pdf
M       plans/software/jan12.tex
?       plans/software/jan12/flowRoot9298.png
?       plans/software/jan12/viewE_comments.pdf
?       plans/software/jan12/team.ps
?       plans/software/jan12/team.png
?       plans/it/plan.log

(? は不明なファイルを示し、M は変更されたファイルを示します。)

その後、変更されたファイルを簡単に抽出して、svn status | egrep '^M'.

これを、変更されたファイルを別の場所にコピーする短いシェル スクリプトに変換するのは非常に簡単です。

# step 1
svn status | egrep '^M' | awk '{ print $2 }' > recipe_file
# step 2
rsync -a --files-from=recipe_file <repo> <dest>

当然のことながら<dest>、リモートマシン上にある可能性があります。

おそらく、でコピー ファイルを監査したら、次のことができますsvn revert -R

于 2012-04-14T13:13:35.427 に答える