我的一些项目文件的顶部有一个小标题,我想确保每次对它们进行更改时都会更新到当前年份。我在 git 中的干净过滤器出现问题并抛出错误:
testClass.cs
首先,我的主分支上有一个文件:
// *********************
// File active 2011-2014
// *********************
然后我对文件做一个小改动:
// *********************
// File active 2011-2014
// *********************
// First commit, wahoo!
然后我运行git add testClass.cs
为下一次提交暂存更改。这将运行我的 git clean 过滤器,该过滤器用于sed
尝试就地编辑文件以将标题中的年份更新为 2015(即,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)。