Git检出(checkout)时能否保留文件的原始创建时间?
Git检出时保留文件原始创建时间的解决方案
Git本身不原生存储文件的创建时间,它仅追踪文件的提交时间与内容变更记录——这就是你拉取后文件显示次日日期的原因:默认情况下,Git检出文件时会使用当前系统时间作为文件的创建/修改时间。不过可以通过以下两种方法实现检出时还原原始创建时间:
方法1:使用git-restore-mtime工具
这是最简便的方案,该工具会遍历仓库提交历史,将文件的修改时间同步到对应文件最后一次被提交的时间(新创建的文件则同步到第一次提交的时间,即你在iOS端创建的当日)。
- 安装(以Mac为例):
brew install git-restore-mtime - 在目标Git仓库内执行命令:
git restore-mtime
执行后,仓库内所有文件的时间都会被还原到对应提交的时间点。
方法2:自定义post-checkout钩子
通过Git的post-checkout钩子,实现每次检出代码后自动修复文件时间。
- 在仓库的
.git/hooks目录下创建post-checkout文件(无后缀),写入以下脚本:#!/bin/bash # 遍历仓库内所有非Git忽略的文件 git ls-files -z | while IFS= read -r -d '' file; do # 获取文件第一次提交的时间(格式:YYYYMMDDHHMM.SS) first_commit_time=$(git log --reverse --pretty=format:%ai -- "$file" | head -n1 | awk '{print $1$2}' | sed -e 's/-//g' -e 's/:/./' -e 's/://') if [ -n "$first_commit_time" ]; then # 修改文件的创建和修改时间 touch -t "$first_commit_time" "$file" fi done - 给钩子文件添加执行权限:
chmod +x .git/hooks/post-checkout
此后每次通过Fork或命令行检出代码时,脚本会自动将文件时间还原到第一次提交的时间。
注意事项
- 以上方法还原的"原始创建时间"实际是文件第一次被提交到Git仓库的时间,只要你在iOS端创建文件后及时提交同步,这个时间就和实际创建时间一致。
- Fork客户端本身没有相关设置,核心还是依赖Git层面的工具或钩子来实现时间还原。
内容的提问来源于stack exchange,提问作者John Doe
相关产品推荐
相关产品推荐

