8

.hファイルと.mファイルのそれぞれの上部にあるコメントを編集するgitのpre-commitフックを作成しようとしています。x-codeによって追加されたヘッダーコメントを変更して、アプリのバージョンとライセンス情報を含めたいと思います。これは、新しいバージョンに変更するときに役立ちます。

これは、xコードでファイルを作成するときに自動的に挿入されるテキストです。

//
//  myFile.h
//  myApp 
//
//  Created by Developer on 11/13/12.
//  Copyright (c) 2012 myCompany LLC. All rights reserved.
//

フックでこれに変更したいのですが:

/*

myFile.h
myApp
Version: 1.0

myApp is free software: you can redistribute it and/or modify it under the terms 
of the GNU General Public License as published by the Free Software Foundation,
either version 2 of the License, or (at your option) any later version.

myApp is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with myApp.
If not, see <http://www.gnu.org/licenses/>

Copyright 2012 myCompany. All rights reserved.


This notice may not be removed from this file.

*/

変更したいヘッダーテキストを含むテキストファイルがあると思っていました。または、アプリのバージョン番号が変更されたことを検出します。このファイルが新しいバージョン番号で更新され、gitがgit commitを実行すると、他のすべてのファイルが新しいバージョンで更新され、新しいファイルが正しいヘッダーテキストを持つように変更されます。これは役に立つかもしれないようです。

4

3 に答える 3

2

スマッジ/クリーンフィルターを使用しますか(全章、「キーワード拡張」に最も注意深くリンクされています)?

于 2013-01-20T01:16:53.510 に答える
0

perl inplace-edit'-i'に相当するものを使用する前に同様のことを行いましたが、データが大きいため、コマンドラインだけでなくperlスクリプトを使用しています。

いくつかの調整とテストを考慮して、私はあなたのニーズに合うはずの次のことを行いました:D。

新しいソースヘッダーは__DATA__、perlスクリプトのセクションで定義されています。

環境変数を介してVERSIONとCOPY_YEARを渡す方法の図があります。

私がいくつかの深刻なperlを実行してからしばらく経ちますが、それは私のテストケースで機能し、バックアップを作成しますが、最初にファイルをバックアップすることをお勧めします。

何らかの形でお役に立てば幸いです。

使用例:

$ perl add_header *.h *.m 

脚本:

use strict;
my $extension = '.orig';
local $/ = undef; # slurp
my $oldargv = undef;

my $replacement = <DATA>;
$replacement =~ s/{VERSION}/$ENV{VERSION} or '1.0.alpha'/e;
$replacement =~ s/{COPY_YEAR}/$ENV{COPY_YEAR} or '2013'/e;

LINE: while (<>) {
    if ( $ARGV ne $oldargv) {
        my $backup = undef;
        if ($extension !~ /\*/) {
            $backup = $ARGV . $extension;
        }
        else {
             ($backup = $extension) =~ s/\*/$ARGV/;
        }
        rename($ARGV, $backup);
        open(ARGVOUT, ">$ARGV");
        select(ARGVOUT);
        my $oldargv = $ARGV;
    }
    s!^//.*Copy.*?//$!$replacement!sm; # THE BUSINESS END.
}
continue {
    print;
}
select(STDOUT);
__DATA__
/**
 *  My New Header...
 *  Version info {VERSION} ]}
 *  made {COPY_YEAR}
 */
于 2013-01-20T01:05:30.333 に答える
0

私はかつて似たようなことをしましたが、リリースバージョンが完成したときに作成した注釈付きタグからバージョン番号を取得しました。ビルドプロセスは次のようになります。

  • 指定されたタグを使用してコードをチェックアウトします
  • タグからバージョン番号を生成し(「foo_version_1_2」-> 1.2の形式でした)、ファイルに書き込みます。これは、テンプレートがアプリに表示するためにそれを取り込むことができるようにするためでした
  • ビルドを実行します
  • パッケージ化

スクリプトを簡単に実行して、ビルド時に好きな場所にバージョン番号を入力することもできます。スマッジ/クリーンフィルターを見たのを覚えていますが、それは厄介なアプローチのようでした。

上記は、ファイル固有の番号を入力しようとしている場合はあまり役に立ちませんが、gitで個々のファイルをバージョン管理しないため、とにかくその値に疑問があります。なぜあなたはそれをしようとしているのですか?

于 2013-05-10T17:43:04.203 に答える