一部のプロジェクト ファイルの上部に小さなヘッダーがあり、変更を加えるたびに現在の年に更新されるようにしたいと考えています。エラーをスローする 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) を使用しています。