我有一个 2020 年的旧源代码存档 (
tar.gz
)。我决定在 git 中检查它以开始增量修改。但我想要的是,在我的初始提交中,文件应该具有提取 ls -ltr
时得到的原始修改时间戳(如 tar.gz
中所示)。通过这样做,我想给后来浏览该存储库的任何人留下一条消息,表明原始文件来自 2020 年。
但是当我将文件添加到 git、提交并更改分支并再次切换回原始分支时,文件修改时间(如
ls -ltr
中)更改为提交时间戳。
有没有办法在第一次提交时保留原始修改时间?
当 Git 签出文件时,它不会明确设置修改时间。需要更新的文件将使用默认时间戳进行更新,不需要更新的文件将保持不变。此功能使像 Make 这样的工具能够正常工作并且不可配置。
如果您想设置特定权限、所有权或时间戳等内容,那么执行此操作的工具称为
mtree
。这是一个 BSD 实用程序(在 Debian 中以 mtree-netbsd
的形式提供),您可以使用它根据树的当前状态创建带有某些标签的清单。然后,您可以 mtree -U
使用同一清单,稍后修改文件的所有者、组和权限。
请注意,您需要对内容进行一些小的编辑,以排除诸如
.git
目录之类的内容,您不想包含这些内容。如果您首先使用 mtree -C -f MANIFEST
转换清单,这会更容易做到,这会将其设置为每行一个文件的格式。