私はsvnを使用していますが、うまくいかない変更を元に戻す必要がある場合があります。最初に変更したファイルのzipを作成したいと思います。zipにフルパスを設定したいと思います。私はほとんどTortoiseSVNを使用していますが、必要に応じてコマンドラインを使用することを恐れていません。
10 に答える
シンプルな bash ワンライナーを使用できます (Linux の満足なユーザーである場合)。
zip ~/modified.zip $(svn status | grep ^M | awk '{ print $2;}')
これにより、ステータスが M so Modified のすべてのファイルが抽出されます。
これは大まかですが、機能します。
@echo ================================================
@echo ZIPS all modified or added svn controlled files
@echo to the specified zip file
@echo "svnzipmodified <filename>"
@echo ================================================
@if "%1"=="" goto end
@echo Getting list of modified or added files
@echo ================================================
svn status -q > list.txt
@echo Strip status text to leave path and filename
@echo ================================================
find "M " list.txt > list2.txt
find "A " list.txt >> list2.txt
(for /F "tokens=1,2*" %%i in (list2.txt) do @echo %%j) > list3.txt
@echo Zip up files
@echo ================================================
del %1 /Q
"C:\Program Files\MATLAB\R2010a\bin\win64\zip.exe" %1 -@ < list3.txt
pause
del list3.txt /Q
del list2.txt /Q
del list.txt /Q
@echo Done
@echo ================================================
:end
WinZipのコピーを購入するか、オープンソースの7-Zipを使用できます。どちらにも、必要なことを行うコマンドライン バージョンが含まれています。どちらも Windows シェル拡張機能としての使用もサポートしています。つまり、Windows エクスプローラーから 1 つまたは複数のファイルを選択し、右クリックして、コンテキスト メニューから圧縮オプションを実行できます。(ところで、投稿したドラッグドロップソリューションを使用するよりもどちらかが優れているでしょう。)
両方の製品には、コマンド ラインからの使用に関する非常に優れたドキュメントが含まれています (オプションを選択した場合)。
7-Zip のシェル サポートにより、ファイルを選択しShift+ClickたりCtrl+Click、右クリック7-Zip->Add to archive...
してコンテキスト メニューから選択したりできます。次に、オプションをオンにしてパス情報を含めることができます。
WinZip には、Windows シェルと同様の機能が含まれていますが、私は何年も使用していないため、特定の指示を与えることはできません。
次のコマンドを使用して、ローカルの変更をファイルに保存できます。
svn diff > my_changes.patch
これらの変更は、後で次の方法で復元できます。
patch -p0 < my_changes.patch
このソリューションは、わずかな変更で Windows と Mac で動作するため、気に入っています。
コマンドライン Subversion クライアントをダウンロードします。Windows では、 TortoiseSVN が提供していないため、 http: //sliksvn.com/en/download/ で SlikSVN をチェックして ください。
お持ちでない場合は、Python 3.x をダウンロードしてください。
7zip をダウンロードしてパスに追加します。
実行する:
import os
import re
import subprocess
import time
re_svn = re.compile(r'(.)\s+(.+)$')
files = []
for line in os.popen('svn status -q').readlines():
match = re_svn.match(line)
if match:
files.append(match.group(2))
if len(files) > 0:
subprocess.call(['7z','a',time.strftime('%Y%m%d-%H%M%S') + '.zip'] + files)
注:Pythonを学習していますが、これはうまくいくようです。
Linuxでは、これがあなたのやり方です。
svn diff -r REV:HEAD --要約 | sed 's/[A-Za-z][ ]+//' | xargs zip myfiles.zip
REV は、開始したいリビジョン番号です。通常チェックアウト時。
ソース: http://www.semicolon.co.za/linux/get-list-of-changed-tiles-via-svn-diff-and-zip-them.html
これらの変更を元に戻す前に (別の場所に)コミットすることに同意できる場合(単に になります)、 「リビジョンで変更されたファイル」トリックsvn up PREV-REV
のいずれかを使用できます。
TortoiseSVN の最新の場合、GUI 方式 ( 「バージョン間で TortoiseSVN で変更されたファイルのみをエクスポートする」 ) が望ましい方法です。
OK、それを行う 1 つの方法を見つけましたが、それについて完全に満足しているわけではありません。私は自分の質問に答えていますが、誰かがそれを改善できることを願っています。
- WinZip を使用して、 [フル パス情報を含める] が選択された空の zip ファイルを作成します。WinZip で zip を開いたままにします。ネイティブの Windows zip ユーティリティでこれを行う方法がわかりませんでした。
- 作業コピーで、TourtoiseSVN コンテキスト メニューを使用して、変更の確認ダイアログを開きます。
- ダイアログですべてのファイルを選択し、WinZip にドラッグ アンド ドロップします。
Boscabouterの回答は、あるマシンではうまく機能しましたが、別のマシンでは、TortoiseSVNのコンテキスト メニューにシェルエントリがないことに気付きました。したがって、変更の確認ダイアログから7zipにファイルを簡単に送信できませんでした。
Ken White の入力に基づいて、コマンド ラインを使用してファイルをアーカイブに移動しました。
- TortoiseSVN 変更の確認ダイアログを、たとえばリポジトリのベース ディレクトリから開きます。
- 関心のあるすべてのファイルをマークし、任意のファイルを右クリックして [パスをクリップボードにコピー] を選択します。
filelist.txt
同じディレクトリ内の一時テキスト ファイルにパスを貼り付けます。- そのディレクトリでターミナルを開きます (たとえば、Shift キーを押しながら Windows エクスプローラーでそのフォルダーを右クリックし、[コマンド プロンプトを開く] を選択します) 。
- 走る
"%ProgramFiles%"\7-Zip\7z a -tzip modified.zip @filelist.txt
手順 1 ~ 3 の代わりにsvn status | find "M " > filelist.txt
、テキスト エディターを実行して不要な行/文字を削除することもできます。