Subversionでコミットして、新しいファイル/フォルダーを追加し、古いファイル/フォルダーを自動的に削除するにはどうすればよいですか?
-
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
-
-r
は拡張正規表現を使用します -
-n
は入力を通過しません -
?
する>または!
(それぞれ/ ^ \?/
および/ ^!/
) - 最初の8文字(フラグを含む)を切り取ります:
s / ^。{8} //
- 残りの行を出力に出力します:< code> s /(。+)$ / \ 1 / p
参照: http://www.grymoire.com/Unix/sed.html
xargs
-no-run-if-empty
)オプション-pages / man1 / xargs.1.html "rel =" nofollow noreferrer "> xargs
(GNUバージョン)は、 sed
からの入力がない場合に処理を停止します、したがって、SVNエラー十分な引数が提供されていません
を排除します。