11

TortoiseSVNに甘やかされてしまったので、Linux でコマンドラインを使用して SVN リポジトリとやり取りしています。

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

コマンドラインでは、svn addファイルを追加するsvn rmときとファイルを削除するときにやらなければならないことがあり、それがすべて完了したら、入力svn commitすると、追加、削除、および変更がコミットされます。

削除したファイル/フォルダ、追加したファイル/フォルダ、および変更したファイルをすべて一度にコミットするコマンドはありますか?

4

9 に答える 9

9

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

于 2011-05-27T16:03:24.340 に答える
7

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

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

その機能がずっと欲しかったので、ここで検索してよかったです!

于 2012-10-30T14:56:06.543 に答える
4

たす:

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

それは私にとってはうまくいきます。

于 2009-07-31T14:33:19.720 に答える
3

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

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

完全なスクリプトの追加

#!/bin/bash


#------------------------------- Subroutines ---------------------------------
usage(){
echo " Usage: $(basename $0) 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のバージョンはないようです。

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

于 2009-07-30T23:48:00.503 に答える
3

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

于 2009-07-30T23:55:05.620 に答える
1

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

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

クレジットは、Stack Overflow の質問SVN command to delete all local missing filesへの回答に移動します。新しいファイルで機能するように調整しました。

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

# Delete missing files
svn status | ? { $_ -match '^!\s+(.*)' } | % { svn rm $Matches[1] }

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

# Commit repository
svn commit -m "This commit is done by a PowerShell bat"
于 2015-08-27T19:00:03.650 に答える
0

要するに、いいえ。あなたはsvn addsvn delete各アイテムを持っている必要があります。

SVN に縛られていない場合は、他のソース管理システムがこの機能を提供しています。たとえば、Mercurial のhg addremove.

于 2009-07-30T23:51:11.900 に答える