8

特定の日付に svn update を実行したいのですが、svn update -r {2010-10-17}. 残念ながら、これが外部に遭遇すると、オプションを通過せずに外部内で更新を行い-r {2010-10-17}ます。これにより、基本コードの正しい過去のリビジョンを取得できますが、多くの外部コードの最新 (望ましくない) バージョンが取得されます。

特定のリビジョンまたは日付に更新し、これを外部から正しく再帰させるにはどうすればよいですか?

(注: ここでの間違いは、明示的なリビジョンを指定せずに外部を使用した可能性があることを理解しています。)

4

4 に答える 4

5

遅かれ早かれ誰かが私の常識的なロジック(一部の領域ではディレクトリタイプの外部に限定される)をbashとcmd-scriptに実装し、この繰り返される質問に対する「決定的な答え」を得ることができることを願っています

あなたの基本的なタスクは次のとおりです。

  • svn up過去の必要な時点へのスーパーレポ(日付への更新/および時間なし/は、ところで、最良の選択ではありませんが、適用可能です)
  • プロジェクト内のすべての外部へのパスのリストを取得します (外部の定義はツリーのどこにでも存在できるため)、WC ルートからsvn propget svn:externals -R(-R を使用してツリー全体をチェックしますcd)
  • propget出力の各文字列に対して(このような形式で. - https://subversion.assembla.com/svn/subversion-trouble-shooting/trunk/lib lib):最初のフィールドに関連する文字列/の最後のフィールドにcdします。これは、ルートへの相対パス/および同じポイントまでのsvnです。スーパーレポのために行われた:svn update -r {2010-10-17}

その結果、混合作業コピーが作成されますが、スーパーレポと外部は「過去のいくつかのリビジョン」の状態になります。

ノート:

より複雑なケースで外部 (実際にはネストされた WC) を使用してディレクトリへのローカル パスを構築するための追加のサンプル。

為に

>svn propget svn:externals -R
tags\1.0.1 - -r 2 https://subversion.assembla.com/svn/subversion-trouble-shooting/trunk/lib@2 lib

trunk - https://subversion.assembla.com/svn/subversion-trouble-shooting/trunk/lib lib

私のWCの外部への最終的なパスは(WC-rootに相対的)になります

tags\1.0.1\lib
trunk\lib
于 2013-03-27T20:36:16.977 に答える
0

すでにチェックアウトされているサブバージョン リポジトリを更新して、ローカル ファイルの日付をリポジトリの日付に同期しようとしている場合に備えて、この回答を追加しています。

このトリックを実行するためにこのワンライナーを作成しました(ただし、使用する前に以下の行を読んでください):

svn info --show-item last-changed-date -R | xargs -I{} -P1000 -n1 sh -c 'x="{}"; set -x; exec touch -d "${x%% *}" "${x#* }"'

注:は、の1000の同時コピーを実行し、実際の更新を行うように-P1000指定します。システムの負荷によっては、これを下げることが賢明な場合があります。小さな i3 ベースの Intel NUC 1000 プロセスでは、80 ~ 95% の CPU を使用して実際に完璧であることが判明しました (100% は通常、CPU が過負荷になっていることを意味します)。不確かな場合は、egを開いて異なる値でテストします。ただし、毎回最初から実行する必要があるため、数秒間だけ実行してください。xargsshtouchhtop

USB HDD 上の 3 GB までの小さな SVN リポジトリの場合、実行に約 5 分かかりました。

詳細な実行をオンにします。これset +xは、実行の直前に行うtouchため、実行を確認できます。冗長でない実行が必要な場合は、そのコマンドを削除してください。

于 2017-09-02T08:08:46.050 に答える
-3

私が解決できた限り、外部構成を変更しないとこれを行うことはできません。ただし、外部構成を変更すると、すべての人が変更されるため、1 回のコミットと更新だけで完了です。

于 2010-11-17T12:22:59.480 に答える