1

是否有人知道将 mtime 更改为 repo 提交时间(或任何其他,但取决于提交元数据)以添加/更新文件的方法?

我们有一些逻辑,可以测试文件 mtime,但是后端服务器对更改的文件有不同的 mtime,因此我们有一些错误。

4

2 回答 2

1

假设您在执行 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改用。

于 2013-09-28T20:22:59.227 回答
-1

调整文件时间戳是非常危险的,而且更危险的是,正如您在这里所做的那样,假设时间戳的含义与通常的含义不同。对于任何事情,不仅仅是时间戳,这样做会损害可靠性和可维护性,它会使理解和审计变得困难。文件出于正当原因更改,您的系统崩溃了。

您要检查的时间戳记录在提交元数据中,获取它们的效率不够高。切换到将时间戳提取到索引文件或类似文件并在那里检查它们。否则,您只能告诉人们学习您的设置“并非一切都是它看起来的样子”。

于 2013-09-29T05:56:49.487 回答