2017-03-08 4 views
0

動機

最近SVNで少し遊んでいます。次のように私が直面してる問題がある:プロジェクトのセクションAにいくつかの変更、トランクからリビジョンr100 svnを更新するときに受信ファイルの削除をスキップ

  • 人2枚の小切手を作成する

    • 人1のチェックは、プロジェクトの一部のBをコンパイルr101
    • 人3がトランクをチェックアウトし、プロジェクトのパートAをコンパイルし、新規に導入されたファイルa.txtをPerson 1がチェックインするのを忘れたことを認識します。人3はこれについて人1に訴える。
    • 追加ファイルa.txtを追加してコミットし、リビジョンr102を作成します。
    • 多くの場合、Person 4は、ある特定の機能が改訂版r101のプロジェクトのパートAで動作していたかどうかをチェックし、ファイルがないためにプロジェクトのパートAがr101でコンパイルされないことを認識します。

    これは、マイナーな迷惑と考えられる人と、大きな災害と思われる人の意見です。しかし、これがどれほど悪いかにかかわらず、私は現在いくつかの統計を得るためにSVNをクロールするコードを書いています。このため、この例では改訂版r102など、ファイルが見つからないために「欠陥がある」場合でも、できるだけ多くのリビジョンでプロジェクトをコンパイルすることが有効です。プロジェクトの他の部分で開発が行われていたのに対し、時間がかかっていない特定のファイルが欠落していたプロジェクトの一部(ほぼ放棄された部分)があるため、これは特に問題です。原則として、問題は、次のアプローチを使用することにより、(少なくとも私の場合は)解決することができます。最新のリビジョンとdecrementally以前のリビジョンへsvn up

    • スタート。
    • ファイルがsvn upで削除される場合は、単に削除を実行しないでください。

    私が見ているバージョンは、実際にはSVNのコードのリビジョンではありませんが、その後のリビジョンの偽のファイルがあります。私が使用したい統計のタイプについては、マスターファイルによって明示的にインクルードされたファイルだけがカウントされるため、これは問題ではありません。それで、私は測定を大幅に改善することができます。

    はこれ、私には、起動します

    がどのように私はSVNはsvn up時に受信ファイルの削除をスキップするように指示することができます。質問?

  • +2

    音が間違っているように聞こえますが、あなたの状況は正確ではありませんので、私はそれについてコメントしません。私がこれを行うと考えることができる唯一の方法は、各リビジョンのログを調べ、追加/変更をプルダウンするバッチファイルを作成することです。 –

    +0

    コメントありがとうございます。私はそれが厄介であることに同意する。しかし、いくつかのファイルが何ヶ月も欠けていて、誰も気づいていませんでした。説明をありがとう。私はすでに私が望む振る舞いを手書きする必要があるかもしれないと恐れていましたが、私はまだまだ魔法のコマンドが使えることを望んでいました。 – carsten

    答えて

    1

    これを行う最も簡単な方法は、どのファイルが削除されるかを見つけるためにドライランを実行してから、それ以外のすべてのファイルを更新することです。

    svn upはドライランフラグをサポートしていませんが、svn mergeを使用してドライラン更新を行うことができます。リビジョン番号の世話をしてください - r667をマージします。

    svn merge --dry-run -r HEAD:666 . 
    

    あなたは、削除されるファイルをフィルタリングするためのawkを使用することができます。

    xargs svn up -r667 
    

    awk '/^D/ {next} {print $2}' 
    

    最後に、あなたは削除されないファイルのみを更新するために、xargsのを使用することができます

    これをまとめてリビジョン667をマージすると、

    svn merge --dry-run -r HEAD:666 . | awk '/^D/ {next} {print $2}' | xargs svn up -r667 
    

    欠点は、基本的にすべてのリビジョンを2回マージしようとするため、これはかなり遅いことです。

    関連する問題