私はSVNリポジトリに作業コピーのすべてのバージョン管理外のファイルを自動的に「svn add」する良い方法を探しています。
ソース管理下にある必要があるいくつかのファイルを作成できるライブサーバーがあります。これらを一度に1つずつ追加するのではなく、これらを自動的に追加するために実行できる短いスクリプトが必要です。
私のサーバーは Windows Server 20 を実行していますので、Unixソリューションは動作しません。
svn add --force * --auto-props --parents --depth infinity -q
素晴らしいヒント! 1つのコメント:my Eclipse は、新しいファイルを無視リストに自動的に追加します。それは設定の問題かもしれませんが、とにかく:役立つ--no-ignore
オプションがあります。
この後、コミットできます:
svn commit -m 'Adding a file'
これは異なる 私の質問 ですが、この質問に属する答えがあります:
svn status | grep '?' | sed 's/^.* /svn add /' | bash
これは何ですか:
c:\work\repo1>svn add . --force
サブディレクトリの内容を追加します。
無視されたファイルを追加しません。
追加されたファイルをリストします。
コマンド内のドットは現在のディレクトリを示します。現在のディレクトリとは異なるディレクトリを追加する場合は、これを特定のディレクトリ名またはパスに置き換えることができます。
これは私のために働いた:
svn add `svn status . | grep "^?" | awk '{print $2}'`
( ソース )
すでにWindowsの問題を解決しているので、これはUNIXソリューションです(Samに続く)。 (タイトルに「WINDOWS」というキーワードが含まれていないため)この質問に答えて同じことを求めている人にはまだ役立つと思うので、ここに追加しました。
注(2015年2月):「bdrx」でコメントされているように、上記のコマンドは次のようにさらに簡略化できます。
svn add `svn status . | awk '/^[?]/{print $2}'`
このメソッドは、任意の数/スペースの組み合わせを含むファイル名を処理する必要があります...
svn status /home/websites/website1 | grep -Z "^?" | sed s/^?// | sed s/[[:space:]]*// | xargs -i svn add \"{}\"
このコマンドの機能の説明は次のとおりです。
Xargsの-i引数を使用して、スペース付きのファイル名を 'svn add'にインポートできるようにします-基本的に、-iは{}をプレースホルダーとして使用するため、 'svnで使用されるファイル名の周りに "追加」。
この方法の利点は、スペースを含むファイル名を処理できることです。
TortoiseSVN には、コマンドライン以外のソリューションを使用する場合にこの機能が組み込まれています。最上位のフォルダーを右クリックして、Add...を選択します...
私はいつも使用します:
コピー&ペースト
svn st | grep "^\?" | awk "{print \$2}" | xargs svn add $1
svn add --force .
これにより、現在のディレクトリとすべてのバージョン管理された子ディレクトリにバージョン管理されていないファイルが追加されます。
これはsvn bookに文書化されているとおりで、最も単純で、私に最適です
svn add * --force
この投稿にはWindowsというタグが付いているため、Windows向けのソリューションを考え出すことにしました。プロセスを自動化したかったので、batファイルを作成しました。 C#でconsole.exeを作成することに抵抗しました。
コミットプロセスを開始するときに、リポジトリに追加されていないファイルまたはフォルダーを追加したいです。
多くの回答の問題は、バージョン管理されていないファイルをリストすることです- TortoiseSVN 。の無視リストに従って無視する必要があります
ここに私のフック設定とそれを行うバッチファイルがあります
亀のフックスクリプト:
"start_commit_hook".
(where I checkout) working copy path = C:\Projects
command line: C:\windows\system32\cmd.exe /c C:\Tools\SVN\svnadd.bat
(X) Wait for the script to finish
(X) (Optional) Hide script while running
(X) Always execute the script
svnadd.bat
@echo off
rem Iterates each line result from the command which lists files/folders
rem not added to source control while respecting the ignore list.
FOR /F "delims==" %%G IN ('svn status ^| findstr "^?"') DO call :DoSVNAdd "%%G"
goto end
:DoSVNAdd
set addPath=%1
rem Remove line prefix formatting from svn status command output as well as
rem quotes from the G call (as required for long folder names). Then
rem place quotes back around the path for the SVN add call.
set addPath="%addPath:~9,-1%"
svn add %addPath%
:end
つかいます:
svn st | grep ? | cut -d? -f2 | xargs svn add
Linuxを使用している場合、またはWindowsでCygwinまたはMinGWを使用している場合は、次のようなbashのようなソリューションを使用できます。ここに示されている他の同様のものとは対照的に、これはファイルの名前空間を考慮に入れています。
svn status| grep ^? | while read line ; do svn add "`echo $line|cut --complement -c 1,2`" ;done
for /f "usebackq tokens=2*" %%i in (`svn status ^| findstr /r "^\?"`) do svn add "%%i %%j"
この実装内では、フォルダー/ファイル名に以下のような複数のスペースがある場合に問題が発生します。
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Sega Mega 2"
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\One space"
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Double space"
"C:\PROJECTS\BACKUP_MGs_via_SVN\TEST-MG-10\data\destinations\Single"
そのような場合は単純でカバーされます:
for /f "usebackq tokens=1*" %%i in (`svn status ^| findstr /r "^\?"`) do svn add "%%j"
いくつかのファイルのみを再帰的に追加する方法を見つけようとして少し時間を費やした後、私がうまくいったことを共有することは有効だと思いました:
FOR /F %F IN ('dir /s /b /a:d') DO svn add --depth=empty "%F"
FOR /F %F IN ('dir /s /b /a *.cs *.csproj *.rpt *.xsd *.resx *.ico *.sql') DO svn add "%F"
ここにいくつか説明があります。
最初のコマンドは、すべてのディレクトリを追加します。 2番目のコマンドは、指定されたパターンに応じてファイルのみを追加します。
詳細を教えてください:
2番目のコマンドでは、唯一の違いはdirコマンドとsvnコマンドです。十分に明確であると思います。
Linuxでは次のコマンドを入力できます。
find ./ -name "*." | xargs svn add
彼はawkとsedが標準ではないWindowsを指定したので:
for /f "tokens=1*" %e in ('svn status^|findstr "^\?"') do svn add "%f"
またはバッチファイル内:
for /f "tokens=1*" %%e in ('svn status^|findstr "^\?"') do svn add "%%f"
コマンドを使用できます
svn add * force--
または
svn add <directory/file name>
再帰的な追加はデフォルトのプロパティです。 SVN book で見ることができます。
問題は無視リストまたはグローバルプロパティにある可能性があります。
私は解決策を得ました google issue tracker
TortoiseSVN > Properties
を選択します。svn:global-ignores with a value of *
がないかどうかを確認しますstar(*)
を持つプロパティがある場合、再帰的な追加は無視されます。したがって、このプロパティを削除します。TortoiseSVN > Settings > General
を選択します。star(*)
が見つかった場合、このプロパティを削除します。この男 説明もあります このプロパティがプロジェクトに追加された理由。
最もよく似た方法は、誰かが拡張子のないファイルを右クリックし、TortoiseSVN-> SVN Ignore-> *(再帰的に)を選択し、それをコミットしたことです。
ログをチェックして、そのプロパティの変更をコミットしたユーザーを確認し、実際に何をしようとしていたかを調べ、今後はもっと注意するように依頼できます。 :)