16

Subversion では、特定のリビジョン番号がわかっている場合、特定のコミット中に影響を受けたファイルのみをチェックアウトできますか?

4

13 に答える 13

12

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

svn log -r *revision* -q -v

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

于 2009-06-09T16:46:44.570 に答える
4

次のような特定のリビジョン以降に変更されたファイルのリストを取得できます。

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

次に、fileschanged.txt 内の各ファイルをチェックアウトするスクリプトを作成します。

于 2011-10-04T23:58:22.987 に答える
2

少し話題から外れていることはわかっていますが、TRACを使用してこれを行い、2つのリビジョン間で変更されたファイルのみを元のディレクトリ構造のファイルを含むzipアーカイブとしてエクスポートします。

于 2009-06-09T17:51:29.740 に答える
2

ここで「チェックアウト」という用語を CVS の意味、つまり「svn 更新」で使用している可能性があると思います。そうですか?

その場合は、必要な特定のリビジョンに更新できます。

svn update -r12345

またはそのリビジョンのそれらのファイルだけでも:

svn update -r12345 file1 file2 file3

ただし、他の提案のいくつかを使用して、svn からファイルのリストを取得する必要があります。

于 2009-06-09T18:37:40.787 に答える
1

最近のバージョンのsvnを使用している場合は、空のフォルダーをチェックアウトしてから、特定のファイルを更新できます。

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

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

編集:ここで受け入れられた答えとほぼ同じ解決策:Subversionから1つのファイルをチェックアウトする

于 2009-06-09T17:49:49.383 に答える
1

svn checkoutファイル レベルではなく、ディレクトリ レベルでのみ機能します。もちろん、特定の変更セットのすべての変更が同じディレクトリからのものである場合は、svn checkout <url> <path> -r<revid>.

于 2009-06-09T16:44:14.383 に答える
1

を使用して、影響を受けるファイルのリストを確認できますsvn log -q -v -r123 url

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

于 2009-06-09T16:48:18.920 に答える
1

ここにそれを行う1つの方法があります。

svn co --depth empty svn://myrepository/mytrunk

cdマイトランク

svn diff -c[REVNUM] svn://myrepository/mytrunk | grep "インデックス:" | awk '{print $2}' | xargs -n 1 svn update --parents

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

update には「--changelist」オプションもありますが (少なくとも v.1.7.1+ では)、私が望んでいたことをしているようには見えませんでした。

于 2012-02-07T00:19:02.790 に答える
1

これは単純な 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
于 2016-05-13T11:20:00.913 に答える
0

長い間死んでいた質問を復活させて申し訳ありませんが、満足のいく回答は得られませんでした。

SVNKit を使用して、これを行うための簡単なツールを作成できます。それについてこのブログを見つけ、必要に応じてコードをわずかに変更しました。展開プロセスで今日まで使用しています。

チェックアウトではなくエクスポートを行いますが、それは簡単な変更になると確信しています。

于 2010-03-11T11:53:49.593 に答える
0

svn mergeinfo --show-revs 対象http://base.com.rev1 http://base.com.rev2

これにより、多くの改訂が行われます

ここで、各リビジョンのファイルのリストを表示したいと考えています。リビジョンのリストをメモ帳または editplus にコピーして、1 行に収まるように変更します。

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

注 : 118 個のリビジョンがあり、ファイルのリストを正しく取得できませんでした。だから私はリビジョンのサブセットに分割して上記のコマンドを実行しました

于 2012-04-12T19:31:35.330 に答える
0

を使用して、特定の変更のファイルのリストのみを取得できます

svn log -v -q -r rev

次に、次のようなパイプを使用して、ラインの前面にあるマーカーをクリーンアップできます

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

. ファイルだけを取得するには、おそらくsvn catニコライの提案に従って使用します。

[sed パイプラインをクリーンアップして簡素化するために編集されました。]

于 2009-06-09T17:04:01.113 に答える