是否有人知道将 mtime 更改为 repo 提交时间(或任何其他,但取决于提交元数据)以添加/更新文件的方法?
我们有一些逻辑,可以测试文件 mtime,但是后端服务器对更改的文件有不同的 mtime,因此我们有一些错误。
假设您在执行 a 时正在更新/添加文件git fetch
,您可以创建一个 git-rebase-and-touch 脚本文件,该文件会为您执行 rebase,同时触摸每个新修订版中的所有文件/目录。
该脚本如下所示:
#!/bin/bash
saveIFS=${IFS}
IFS=$'\n'
startrev=$(git rev-parse HEAD)
git rebase
for rev in $(git rev-list --reverse ${startrev}..HEAD); do
stamp=$(git log --pretty="%aD" ${rev}~..${rev})
IFS=$'\n'
for filename in $(git diff --name-only ${rev}~..${rev}); do
file=""
IFS='/'
for part in ${filename}; do
file=${file}/${part}
file=${file#/}
touch -c --date="${stamp}" "${file}"
done
done
done
IFS=${saveIFS}
如果您现在使用git pull
,请git fetch
改用。
调整文件时间戳是非常危险的,而且更危险的是,正如您在这里所做的那样,假设时间戳的含义与通常的含义不同。对于任何事情,不仅仅是时间戳,这样做会损害可靠性和可维护性,它会使理解和审计变得困难。文件出于正当原因更改,您的系统崩溃了。
您要检查的时间戳记录在提交元数据中,获取它们的效率不够高。切换到将时间戳提取到索引文件或类似文件并在那里检查它们。否则,您只能告诉人们学习您的设置“并非一切都是它看起来的样子”。