3

一部のプロジェクト ファイルの上部に小さなヘッダーがあり、変更を加えるたびに現在の年に更新されるようにしたいと考えています。エラーをスローする git のクリーン フィルターに問題があります。

testClass.csまず、 master ブランチで次のファイルを呼び出します。

// *********************
// File active 2011-2014
// *********************

次に、ファイルに小さな変更を加えます。

// *********************
// File active 2011-2014
// *********************

// First commit, wahoo!

次にgit add testClass.cs、次のコミットのために変更をステージングします。sedこれにより、ファイルをインプレースで編集してヘッダーの年を 2015 に更新しようとするgit clean フィルターが実行されます (つまり、2011-2014 は 2011-2015 に変更する必要があります)。フィルター設定を含む構成は次のとおりです。

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly

[filter "updatedate"]
    clean = sed -i "s/2011-[[:digit:]]\\{4\\}/2011-$(date '+%Y')/" %f

私が抱えている問題は、「デバイスまたはリソースがビジー」エラーのために追加/更新が失敗することです。sed が作成する一時ファイルと関係があるようです。sed コマンドは、コマンド ラインでテストすると正常に動作しますが、フィルターとして使用すると失敗します。

$ git add testClass.cs
sed: cannot rename ./sed0jmaI2: Device or resource busy
error: external filter sed -i s/2011-[[:digit:]]\{4\}/2011-$(date '+%Y')/ %f failed 4
error: external filter sed -i s/2011-[[:digit:]]\{4\}/2011-$(date '+%Y')/ %f failed

git bash バージョン 2.5.3 (MINGW64) を使用しています。

4

1 に答える 1