3

私はいつもsvn:ignoreで問題を抱えていますが、今回は不可能なことを試みているのではないかと思います。

dir構造を想定:

/
   /foo
   /bar
   /web
      /uploads
          /assets
          /avatars
              /fu
                  /*.jpg
              /ba
                  /*.jpg
              keepme.jpg
              keepmetoo.jpg

アバターディレクトリのすべてのサブフォルダを無視したいが、そのディレクトリのファイル(keepme.jpg、keepmetoo.jpg)は無視したい。

アバターサブフォルダー(fu、ba)は自動生成され、名前を事前に決定することはできないため、すべての/avatarサブフォルダーを完全に無視する必要があります。

これは可能ですか?そしてどうやって?

コミット後のフックを使用したくない編集。これは単に好みの問題です。私たちは多くの確立されたアプリケーションを持っており、物事を行うための標準化された方法を開発し、コミット後のフックはまだ利用されていません。不要な可動部品を追加しない方が簡単です。率直に言って、コミット後のフックを追加することを検討する前に、ディレクトリ構造(これは小さな作業ではありません)に対処する可能性が高くなります。

4

3 に答える 3

2

/ avataurs/fuとavatars/ba(実際にはすべてのavatars / xxx)を除いて、ロット全体をsvnに保存しますか?

最初に残りのディレクトリ構造をsvnに追加する必要があります。Tortoiseを使用してルートディレクトリを追加し、追加しないディレクトリのチェックを外してからコミットします。これにより、問題のあるサブディレクトリをコミットしないという最初の問題が解決されます。

ただし、次の問題は、新しく生成されたサブディレクトリを他の人に「誤って」追加させたくないということです。この場合、事前コミットフックが不可欠です。それらは確かに非常に単純です-着信ファイルのパスでaregexを実行するクイックバッチファイルまたはperlスクリプトを記述し、含まれている場合は1を返すだけです".*/avatars/.*/.*"(これにより、新しいファイルをそのディレクトリに追加できます)。フックは、ファイルを追加していたユーザーに表示されるテキストを返すこともできます。禁止リストのファイル拡張子(.objなど)でファイルがチェックインされないようにするために1つ使用します。

アバターのサブディレクトリがSVNに組み込まれない場合は、それらをチェックアウトすることはありません-明らかに-そしてあなたの仕事は完了です!


これが私のpre-commit.cmdフックファイルのコピーです。それを(Windowsの)hooksディレクトリにドロップするだけで、準備は完了です。

@echo off

svnlook changed -t %2 %1 > c:\temp\pre-commit.txt

findstr /G:"%1\hooks\ignore-matches.txt"  c:\temp\pre-commit.txt > c:\temp\precommit-bad.txt
if %ERRORLEVEL% NEQ 0 exit 0

echo disallowed file extension >> c:\temp\precommit-bad.txt

type c:\temp\precommit-bad.txt 1>&2
exit 1

ignore-matches.txtファイルには、次のような行が含まれています。

^[^D].*\.obj$

ignore-matches.txtファイルのエントリに一致するものはすべて、コミットが拒否されたことを意味します。ユーザーは今度は正しく再試行する必要があります。

于 2011-02-09T13:35:43.923 に答える
1

つまり、config-onlyの純粋なSVNでは、これは不可能です。ただし、これらのプロパティを設定したり、チェックしたりするためのオプションがいくつかあります。

  • アバターの自動生成ツールを強化し、
  • 自動生成後にSVN設定を更新するバッチファイルを呼び出します。
  • コミットする前に、SVN設定を更新するバッチファイルを呼び出します。

サーバー側では、次のことができます

  • ルールに従わない場合、事前コミットでコミットを拒否します。
  • コミット後フックの設定を自動的に更新し、
  • または、賢い開発者を必要とし、CIシステムにのみチェックインします。

まず、フォルダーの自動生成後にsvn:ignoreプロパティを自動的に更新することをお勧めします。最も簡単な方法は、生成を行った後にバッチファイルを呼び出すことです。バッチファイル自体は単純です。

@echo off
echo.>~svnignore
dir /b /aD >~svnignore
svn propset svn:ignore --file ~svnignore .
del ~svnignore

もちろん、ファイル~svnignoreは他の用途に使用しないことを保証できるファイル名である必要があります。これが生成時に自動的に呼び出される場合、これはすべての人に有効です。

次に、pre-commitフックのいずれかで整合性をチェックすることをお勧めします。ポストコミットでそれを行うことは許容できるかもしれませんが、継続的インテグレーションシステムでそれを行うことは間違いなく手遅れになります。

最後に、別のオプションがありますが、このルートを使用することはお勧めしません。質問にタグを付けたのでtortoisesvn、このツールを使用すると思います。これにより、クライアント側のpre-commitフックを使用するための追加オプションが提供されます。これを行うには、TortoiseSVN設定ダイアログに移動します。左側のツリーには、フックスクリプトのエントリがあります。ここでは、コミット前の時間など、特定の時間に実行される実行可能ファイル(バッチファイルなど)を構成できます。

これの欠点は、SVNのすべてのコンソール使用を実質的に中断することです。また、一部のビルド/タグなどの自動化が必要な場合、これは無意味になります。

于 2011-02-09T13:16:37.597 に答える
-2

start-commitフックを設定することが解決策になる可能性があります。

于 2010-09-17T06:17:48.143 に答える