Subversion:チェックのみこれらのファイルに影響は特定のコミット

StackOverflow https://stackoverflow.com/questions/971188

  •  13-09-2019
  •  | 
  •  

質問

にSubversionでは、チェック のみ これらのファイルに影響は特定のコミットは、ご存知の特定の改定にかかりますか?

役に立ちましたか?

解決

私はSubversionが特定のフォルダのみではなく、個々のファイルをチェックアウトすることができますチェックアウトすると思います。いえ、コマンドます:

svn log -r *revision* -q -v

あなたは完全なディレクトリの作業フォルダをチェックアウトした後、どこかに目的のファイルをコピーするために、このコマンドの出力を処理することができるように指定されたリビジョンに関連付けられた変更の一覧が表示されます。

他のヒント

あなたは、このような特定のリビジョン以降に変更されたファイルのリストを取得することができます:

svn diff -r [REVNUM]:HEAD --summarize > fileschanged.txt

、その後fileschanged.txt内の各ファイルをチェックアウトするためのスクリプトを作成する

私は、つまり、そのCVSの意味で「SVNの更新」を「チェックアウト」、それはあなたが用語を使用していることも可能だと思います。その権利はありますか?

もしそうなら、あなたがしたい特定のリビジョンに更新することができます:

svn update -r12345

あるいは単にそのリビジョンにそれらのファイル:

svn update -r12345 file1 file2 file3

あなたは他の提案のいくつかを使用してSVNからファイルのリストを取得する必要がありますけれどもます。

私はそれが少しofftopic知っているが、私はこれを行うにはTRACを使用して、それが彼らの元のディレクトリ構造内のファイルとzipアーカイブとして2つのリビジョン間で変更されたファイルのみをエクスポートします。

svn checkoutはディレクトリレベルではなく、ファイルレベルで動作します。特定のチェンジセット内のすべての変更は、同じディレクトリからのものであった場合はもちろん、あなたはsvn checkout <url> <path> -r<revid>を実行することができます。

あなたはsvn log -q -v -r123 urlを使用して影響を受けたファイルの一覧を確認することができます。

あなたが本当にあなただけは各ファイルに対してsvn cat urlToFile -r123 > myfileを使用することができ、影響を受けるファイルを取得したい場合。

あなたはSVNの最新バージョンを使用している場合は、

あなたは、特定のファイルを更新し、空のフォルダをチェックアウトすることができます。

を選択したファイルのリストを取得した後、

svn co --depth=empty url dest
cd dest
svn up file1 file2 file3

編集:ここでは受け入れ答えとしてほとんど同じソリューション:チェックアウトSubversionの<から一つのファイル/ A>

ここでそれを行うための1つの方法である。

のsvn共同--depth空のsvn:// myrepository / mytrunk

のCD mytrunk

のsvn diffの-c [REVNUM]のsvn:// myrepository / mytrunk | grepの "インデックス:" | awkは '{$ 2印刷}' | xargsの-n 1件のsvn更新--parents

AWKワンライナーからの出力は、相対パスで変更されたファイルのリストです。前述したように、チェックアウトは、モジュール上で動作している間、更新は、個々のファイルで動作します。 「--parents」オプションは、必要に応じて、あなたの作業コピーのディレクトリの作成を強制します。

その更新も(少なくともv.1.7.1の+で)「--changelist」オプションを持っていますが、それは私が望んでやっているように見えませんでした。

私はダースのリビジョンの範囲内で変更されたすべてのファイルのダンプを必要としていました。私はそうのような(これらのコマンドは完璧ではないかもしれないが、これは単に一般的な説明である)、それをやった。

あなたが必要とするファイルを表示し、テキストファイルにリストを書き込みます差分を作成します。

svn diff --summarize -r219:232 > r219-232_Summary.txt

これは、あなた

のような行を持つテキストファイルを与えます
M      path/to/file.php

の代わりに「A」または「M」または任意の、「アップsvnの」コマンドで各行の先頭を置き換えるためにファイル形式をマッサージします。

 sed -i 's/A      /svn up /g' ./r219-232_Summary.txt

...あなたのような行を与えるであろう。

svn up path/to/file.php

新しいディレクトリを作成し、プロジェクトをチェックアウトする

svn co http://www.repo.net/whatever

<(あなたはすべてのディレクトリ内の.svnを持っている古いSVNクライアントにしているので、もし私は比較的最近のSVNクライアントを使用している、いないことがどのように機能するか確認してください)の.svnファイル以外のディレクトリ内のすべてを削除します/ P>

rm -rf ./*

それが実行可能にする、テキストファイルにコピーし、スクリプトとして実行します。

cp /path/to/wherever/r219-232_Summary.txt ./r219-232_Summary.sh
chmod 777 ./r219-232_Summary.sh
./r219-232_Summary.sh
すべてが計画通りに進めば、

は、その後、シェルはテキストファイル内の各「最高のsvn」コマンドを解析し、あなたが興味を持っているファイルだけでディレクトリを移入する必要があります。

ここでは、簡単なbashスクリプトのバージョンがあります。私は、不要な行を削除するには、「検索パターン」を使用しました。リビジョン、リポジトリアドレスと宛先パスが引数として与えられているが、それはハードコーディングすることができます。

#!/bin/bash

REVISION=${1}
REPOSITORY="${2}"
DEST_PATH="${3}"
SEARCH_PATTERN="trunk"
FILES=$(svn log -q -v  $REPOSITORY -r $REVISION | grep $SEARCH_PATTERN)

mkdir -p $DEST_PATH
for FILE in $FILES ; do
    if [[ $FILE == *"$SEARCH_PATTERN"* ]]
    then
          FOLDER=$(dirname $FILE)
          mkdir -p $DEST_PATH/$FOLDER
      svn export -r $REVISION $REPOSITORY/$FILE $DEST_PATH/$FOLDER
    fi
done

#EOF

あなたが使用して特定の変更内のファイルのリストだけを取得することができます。

svn log -v -q -r revます。

あなたは、その後のようなパイプでラインの前にマーカーをクリーンアップすることができます。

sed -e "s/^ . / /" | egrep -v "Changed paths:|-----" ます。

。ニコライによって示唆されているように、単にファイルを取得するためには、あなたはおそらくsvn catを使用することになります。

[クリーンアップするために編集およびsedのパイプラインを簡素化する。

長い死んで質問を復活する

申し訳ありませんが、それは私の満足に答えていませんでした。

あなたはSVNKitを使用するため、これを行うためのシンプルなツールを構築することができます。私はそれについて、このブログを見つけて、少し私のニーズのためのコードを変更しました。私は私の展開プロセスでこの日にそれを使用しています。

これは、輸出ませんチェックアウトし、私はそれが簡単な変更だろうと確信しています。

svn mergeinfoョ-revs対象 http://base.com.rev1 http://ベース。com.rev2

これにより多くの修正

まうリクエストのファイル毎に改訂される。でのリストの改定やコピー※パッドやeditplus変更うィライン

svnログ-r r33521-r33762-3456-r5623-q-v>>missedFiles.txt

注意:私118修正し取得できなかった、ファイルの一覧を修正。して走り上記のコマンドによる新集合の修正

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top