2011-05-13 18 views
14

私たちはいくつかのファイル(フォルダなし)を持つリポジトリを持っています。それぞれのビルド時に、別のソース(db)から同じフォルダをダウンロードし、SVN変更にコミットする必要があります。既存のものを更新し、存在しないものを削除して新しいファイルを追加します。SVN:hgのaddremoveのアナログ

だからアイデアは

問題は、私はHGの追加・削除のアナログを知らないということである(つまり、MSBuildのが使用されている理由です)SVNで各ビルドをデシベルのスクリプトの「コピー」を持つことである - 自動的に2つのフォルダを同期します。

誰も知りませんaddremoveはシミュレーションできますか?

+1

  • パスを文字ここでは、2つのシェルのエイリアスが含まれてポストです(1つはadd_allと呼ばれ、もう1つはrm_allと呼ばれます)。これは、基本的に 'add_all && rm_all'を実行して、 'hg addremove'と同じように実行することができますが、Subversionを使用することができます。 http://www.plexusweb.com/staff/travis/blog/post/267/Batch-addremove-files-to-Subversion –

  • +0

    これはsvnでは不可能だとは思えませんが、 。より良いオプションがない場合は、ローカルhgリポジトリを維持するためにhgsubversionを使用し、それに対して 'hg addremove'を使用して、変更をsvnにプッシュバックすることを検討することをお勧めします。 –

    答えて

    0

    私はいつもこの目的のためにsvnに付属のsvn_load_dirs.plスクリプトを使用しました。

    svn status | grep "^\?" | gawk '{print $2}' | xargs -r svn add 
    svn status | grep "^\!" | gawk '{print $2}' | xargs -r svn remove 
    

    EDIT:@Ericの

    svn status | gawk '/^\?.*/ {print $2}' | xargs -r svn add 
    svn status | gawk '/^\!.*/ {print $2}' | xargs -r svn remove 
    
    9

    私は個人的にそれを行うために少しbashスクリプト(Linux上であることを)持っています-Karlの答え)

    作品について:

      'スペース' と
    • パスがで
    • パスを文字 '@'(MSYSシェルで) '\' 文字

    svn status | perl -ne 'print "$1\0" if /^\?\s+([^\r\n]+)/' | xargs -0 -r -I FILE svn add '[email protected]' 
    svn status | perl -ne 'print "$1\0" if /^\!\s+([^\r\n]+)/' | xargs -0 -r -I FILE svn remove '[email protected]' 
    
    +1

    なぜgrepをスキップして、どうすればいいですか: 'svn status | gawk '/^\?.*/ {print $ 2}' | xargs -r svn add' – cesar

    +2

    @anonymous良い質問です。これはおそらくすでに何かをしようとする前に実際の出力を見るためにgrepを通してパイプされていたからです。もちろん、実際にgawkのmanページを読んでいないので、その構文については知りません。ありがとう。 –

    +0

    スペースを含むファイル名はどうですか?私はレコードセパレータを\ 0に変更するのに十分なgawk構文を知らない – moi

    0

    (改善:おかげcesarに、ここでは簡単なバージョンだ

    関連する問題