Subversionでコミットして、新しいファイル/フォルダーを追加し、古いファイル/フォルダーを自動的に削除するにはどうすればよいですか?

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

  •  06-07-2019
  •  | 
  •  

質問

TortoiseSVN にだまされて、Linuxのコマンドラインを使用して、 SVNリポジトリと対話します。

TortoiseSVNでは、変更をコミットするだけで、追加されたもの、削除されたもの、変更されたもののリストが表示されます。すべてのボックスをオンにして、[ OK ]をクリックします。

コマンドラインでは、ファイルを追加するときは svn add を、ファイルを削除するときは svn rm を実行する必要があります。 svn commit 、追加、削除、変更をコミットします。

削除したファイル/フォルダー、追加したファイル/フォルダー、および変更したファイルを一度にコミットするだけのコマンドを使用できますか?

役に立ちましたか?

解決

標準のSVNツールでは、そのようなことはありません-で言及されていますよくある質問は悪いことです。

他のヒント

Windowsでは、次のバッチファイルが機能します。

for /f "tokens=2*" %%i in ('svn status %1 ^| find "?"') do svn add "%%i"  
for /f "tokens=2*" %%i in ('svn status %1 ^| find "!"') do svn delete "%%i"  
svn commit -m "Automatic commit" %1  

上記の3行を「autocommit.bat」というファイルに保存するだけです。作業ディレクトリから実行する場合、パラメーターを指定する必要はありません。別のディレクトリにいる場合は、 autocommit.bat c:\ MyProjectFolder のように呼び出すことができます。

Nader Shirazieは、投稿されたスクリプトに正しいコマンドがありました。 Linux用の単一行バージョンは次のとおりです。

svn add  $(svn st | sed -n 's/^[A?] *\(.*\)/\1/p')

その機能が長い間欲しかったので、ここで検索したことを嬉しく思います!

SVNコマンドはありませんが、バージョン管理されていないファイルや欠落しているファイルをスキャンして適切なコマンドを発行できるスクリプトが1つまたは2つあるはずです...

ここで見つけました: http://gael-varoquaux.info/computers/ svnautocommit / index.html

完全なスクリプトの追加

#!/bin/bash


#------------------------------- Subroutines ---------------------------------
usage(){
echo " Usage: $(basename <*>) PATH"
echo ""
echo "Automatically commits the changes of svn working copy located in PATH."
echo "The new files are automatically added and the files that have been removed"
echo "are removed."
echo ""
echo "By Gael Varoquaux"
}

#------------------------------- Process the options -------------------------
if [ $# -eq 1 ]
then
    workingdir="$1"
else
    usage
    exit 1
fi

if ! cd $workingdir
then
    echo $workingdir is not a accessible path.
    usage
    exit 1
fi

#------------------------------- Find out what has changed -------------------

# A warning if this fails :
echo "SVN autocommit failed" > $HOME/local/motd

svnstatus=$(svn status $workingdir)
added=$(printf "$svnstatus" | sed -n 's/^[A?] *\(.*\)/\1/p')
removed=$(printf "$svnstatus" | sed -n 's/^! *\(.*\)/\1/p')

if [ "x$added" != "x" ]
then
    echo adding "$added" to repository
    svn add $added
fi

if [ "x$removed" != "x" ]
then
    echo removing "$removed" to repository
    svn remove $removed
fi

svn commit -m "autocommit" && rm $HOME/local/motd

残念ながら、Pythonバージョンは存在しないようです。

スクリプトを変更してコメントのパラメーターを取得することもできますが、これは開始点です。また、追加/削除を簡単に実行できるように変更し、手動でコミットすることもできます。

追加するには:

svn status | grep "^\?" | sed -e 's/? *//' | sed -e 's/ /\\ /g' | xargs svn add

削除するには:

svn status | grep "^\!" | sed -e 's/! *//' | sed -e 's/ /\\ /g' | xargs svn remove

私にとっては問題なく動作します。

PowerShellで実行する場合は、 svn status を使用する簡単な関数を次に示します。

svn status | ? { 

PowerShellで実行する場合は、 svn status を使用する簡単な関数を次に示します。

# Delete missing files
svn status | ? { 

PowerShellで実行する場合は、 svn status を使用する簡単な関数を次に示します。

svn status | ? { 

PowerShellで実行する場合は、 svn status を使用する簡単な関数を次に示します。

<*>

クレジットはスタックオーバーフローの質問への回答 SVNコマンドでローカルに存在しないすべてのファイルを削除 。新しいファイルで動作するように彼を調整しました。

作成したPowerShellファイルは次のようになりました。

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

クレジットはスタックオーバーフローの質問への回答 SVNコマンドでローカルに存在しないすべてのファイルを削除 。新しいファイルで動作するように彼を調整しました。

作成したPowerShellファイルは次のようになりました。

<*> -match '^!\s+(.*)' } | % { svn rm $Matches[1] } # Added new files svn status | ? {

PowerShellで実行する場合は、 svn status を使用する簡単な関数を次に示します。

svn status | ? { 

PowerShellで実行する場合は、 svn status を使用する簡単な関数を次に示します。

<*>

クレジットはスタックオーバーフローの質問への回答 SVNコマンドでローカルに存在しないすべてのファイルを削除 。新しいファイルで動作するように彼を調整しました。

作成したPowerShellファイルは次のようになりました。

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

クレジットはスタックオーバーフローの質問への回答 SVNコマンドでローカルに存在しないすべてのファイルを削除 。新しいファイルで動作するように彼を調整しました。

作成したPowerShellファイルは次のようになりました。

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] } # Commit repository svn commit -m "This commit is done by a PowerShell bat"

クレジットはスタックオーバーフローの質問への回答 SVNコマンドでローカルに存在しないすべてのファイルを削除 。新しいファイルで動作するように彼を調整しました。

作成したPowerShellファイルは次のようになりました。

<*> -match '^\?\s+(.*)' } | % { svn add $Matches[1] }

クレジットはスタックオーバーフローの質問への回答 SVNコマンドでローカルに存在しないすべてのファイルを削除 。新しいファイルで動作するように彼を調整しました。

作成したPowerShellファイルは次のようになりました。

<*>

要するに、いいえ。各アイテムを svn add および svn delete する必要があります。

SVNに縛られていない場合、他のいくつかのソース管理システムがこの機能を提供します。たとえば、Mercurial&#8217; s hg addremove などです。

行引数を使用した簡潔なコマンドは強力ですが、スペースを含むファイル名を含めることができない(または失敗する)場合があります。次のコマンドは、への回答からのものですすべてのファイルが含まれる同様の質問

svn add --force * --auto-props --parents --depth infinity -q

新しいファイルを自動的に追加します:

svn st | sed -rn '/^\?/s/^.{8}(.+)$/\1/p' | xargs -r svn add

削除されたファイルを自動的に削除する:

svn st | sed -rn '/^!/s/^.{8}(.+)$/\1/p' | xargs -r svn rm

説明

これは基本的に、 luca&#8217; sの回答の要約版で、 grep および2つの sed 呼び出しを1つに。

sed

参照: http://www.grymoire.com/Unix/sed.html

xargs

-r (または-no-run-if-empty )オプション-pages / man1 / xargs.1.html "rel =" nofollow noreferrer "> xargs (GNUバージョン)は、 sed からの入力がない場合に処理を停止します、したがって、SVNエラー十分な引数が提供されていませんを排除します。

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