0

SVN に新しいタグを作成し、いくつかのファイルを追加するスクリプトがあります。このタスクを自動化したいので、タグ名を 1.0 から X.0 に自動的にインクリメントする方法を見つけたいと思います。

最初のバージョン番号として「1.0」を含み、スクリプトを呼び出すたびに上書きされるconfファイルについて考えました。しかし、ファイルから「1.0」の値を取得して、スクリプトでそれをインクリメントできるかどうかはわかりません。

どんな助けでも本当に感謝します。

前もって感謝します

4

3 に答える 3

2

シード構成ファイルを作成しないでください。代わりに、ファイルが存在しない場合、バッチ スクリプトのデフォルトを 1.0 にします。

@echo off
setlocal
set "conf=version.conf"
if not exist "%conf%" (set version=1.0) else (
  for /f "usebackq delims=." %%N in ("%conf%") do set /a version=%%N+1
)
set "version=%version%.0"
(echo %version%)>"%conf%"

このプロセスを複数回並行して実行することは決してないと想定しています。並行して実行すると失敗する可能性があります。必要に応じて並行して実行できるように、conf ファイルをロックするように変更を加えることができます。特定のファイルまたはディレクトリがロックされている場合にコマンドラインでチェックインする方法に対する受け入れられた回答を参照してください。プロセスによって使用されていますか? 詳細については。

于 2013-01-21T14:13:30.683 に答える
2

autoprops を使用して Subversion のキーワードを見てみましょう。

まず、キーワード展開を尊重するようにSubversionをセットアップします

enable-auto-props = yes

[auto-props]
version.txt = svn:keywords=Revision

次に、単純なファイルをセットアップしますversion.txt。$revision$ キーワードといくつかのランダムなコンテンツを使用して呼び出しましょう。

$revision$
Random content

次に、バッチ ファイルで、新しいランダム コンテンツを使用して version.txt ファイルを再作成します。

echo $revision$ >version.txt
echo %random% %date% %time% >>version.txt

バッチファイルが実行されるたびにこの新しいファイルをチェックインすると、次のようになります

$revision 32 $
4214 Mon 21/01/2013 15:53:27,62 

このようにして、Subversion は、複数のクライアントで同時に実行された場合でも、バッチ ファイルのすべての実行の正確なバージョン番号を保持します。

次に、次のようなコードで version.txt からリビジョン番号を抽出して使用できます。

for /f "tokens=1,2" %%a in (version.txt) do (
   if %%a==$revision (
     echo Revision number is %%b
     echo do something with %%b, create %%b tag or whatever
   )
)
于 2013-01-21T12:00:01.930 に答える
1

使用したい言語を言わないので、一般的なコメントだけを与えることができます:

確かに、「ドットバージョン番号」を保持する小さな「バージョン」ファイルを維持することは可能です。そのファイルの内容は、どのプロセスでも読み取ることができます。そのコンテンツを数値トークン(メジャーバージョンとマイナーバージョンなど)に分割するためのメソッドの小さなコレクションを実装する必要があります。これらの数値は、使用したい任意の数学関数で処理できます。たとえば、それらをインクリメントできます。もう1つの方法は、数値トークンを取得して「ドットバージョン番号」を再度作成する「 implode 」関数です(現在は多分0.2.60.2.7...)そして最後に、その情報をファイルに書き戻すことができます。バージョンのどの部分をインクリメントするかを制御する引数を許可することは確かに理にかなっています。

このようなスキームは実際には効率的ではありませんが、多くの場合十分です。

このようなアプローチは、そのバージョンファイルにアクセスするのが常に単一のプロセスであることが保証できる場合にのみ機能することに注意してください。そうしないと、複数のプロセスが相互に結果を上書きする可能性があり、これは確かに問題の原因になります。

別の方法として、おそらくもっと洗練された方法として、Subversionリポジトリ自体をバージョン番号のシードストレージとして扱うことを検討してください。特別なファイルのコンテンツを読み取る代わりに(そのファイルが削除された場合、または何か他のことが起こった場合はどうなりますか?) Subversion内のtagsフォルダー。以前にタグ付けされたすべてのバージョンが含まれている必要があります。まさにそれがあなたが望む情報です。すべてのバージョン番号を取得し、それらを並べ替え、最も高いバージョン番号を取得して、上記のように処理します。

于 2013-01-21T09:52:03.377 に答える