使用git-restoremtime脚本,可以根据提交消息中的日期修改从 git 存储库中签出的文件的修改时间。
但是,如何使目录的 mtime 显得直观、确定和一致?
我认为将每个目录的 mtime 设置为最新提交的时间是最有意义的,该提交触及此类目录或其任何子目录中的任何类型的文件。这种递归 mtime 传播听起来合理吗?用git很容易做到吗?
使用git-restoremtime脚本,可以根据提交消息中的日期修改从 git 存储库中签出的文件的修改时间。
但是,如何使目录的 mtime 显得直观、确定和一致?
我认为将每个目录的 mtime 设置为最新提交的时间是最有意义的,该提交触及此类目录或其任何子目录中的任何类型的文件。这种递归 mtime 传播听起来合理吗?用git很容易做到吗?
因此,事实证明,脚本很容易修改以支持具有确定性 mtime 的目录。
https://github.com/cnst/git-tools/commit/89d09da9f362651ce9a0ca66362913c09e6b57cb https://github.com/cnst/git-tools/commit/b20207dc8fd9b791b8371dab94e98aca0a8412f6
与https://stackoverflow.com/a/13284558/1122270集成的最短代码段如下:
dirlist = dict()
...
dir = file
while dir:
dir = os.path.dirname(dir)
if dir in dirlist:
if dirlist[dir] < mtime:
dirlist[dir] = mtime
else:
if os.path.isdir(dir):
dirlist[dir] = mtime
...
for file, mtime in dirlist.iteritems():
try:
os.utime(os.path.join(workdir, file), (mtime, mtime))
touches += 1
except Exception as e:
logger.error("ERROR: %s\n", e)
errors += 1
用 git 能轻松搞定吗
这与 Git(或其他分布式VCS)无关,它根本不记录任何类型的时间戳
因此,尽管您的策略在您的上下文中有意义,但它只是脚本的结果,应用在您的本地存储库中,不能保证在其任何克隆中复制。