2012-04-13 3 views
1

時には、20〜50近くのファイルを元に戻す必要がありますが、将来的に何かを使用する場合は、ローカルでファイルを保存する必要があります。
プロジェクトは大きく、1万以上のファイルです。
コミットされていないファイルのみのコピーを作成できますか?
手動で変更を検出し、コピーに2時間ほどかかります。プロジェクトのツリーには多数のネストされたフォルダがあります。SVNにコミットされていないファイルのみのコピーを作成できますか?

答えて

4

svn diffでdiffを作成し、diffをsvn patchで再適用することができます。

しかし、これは実際にSVNでどのように作業する必要はありません。変更を加えてブランチを作成できたら、後でそのブランチをマージして、同僚とコンテンツを共有することができます。

ブランチの作成は、SVNでは比較的控え目であることに注意してください。サーバー上では、ファイルは実際に変更されるまでオリジナルにリンクされています。変更されたファイルのみがサーバー上の領域を占有します。

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

+0

+1のブランチ。 svnのパッチも1.7 +私は思う - 何人かの理由のために多くの人々はまだ1.6にあります。 – Rup

+0

その他のパッチツールもあります。また、TortoiseSVNは長い間パッチサポートを内蔵していました。しかし、patchコマンドにアクセスするには、クライアントを1.7に更新するだけで済みます。 –

1

実際に(svn diffやブランチを使うのではなく)ファイルのコピーが必要な場合は、どのファイルが変更されているかをチェックすることです(サーバ設定ファイルのバックアップに使用するバージョン)。以下の注記は、あなたがレポのトップレベルにいると仮定しています。あなたが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を実行することができます。

関連する問題