虽然是一个古老的问答。我想我会扔一个,因为这已经困扰了我很长时间。
我习惯于按逆时间顺序列出目录中的文件(有趣的是,嘿?)。原因是我想看看我(或其他任何人)最近更改了哪些文件。
Git 会打乱我的计划,因为在切换分支时,本地 repo 将完全覆盖来自打包本地 repo 中的(增量......我知道......)副本中的跟踪文件。
这样,所有签出的文件都将带有签出的时间戳,并且不会反映它们的最后修改时间......真烦人。
因此,我在 bash 中设计了一个单行,它将根据文件系统上的内容更新任何文件中的 $Date:$ 属性,以便我将立即知道上次修改的状态无需浏览git log
, 或任何其他在责备模式下git show
提供提交时间的工具。
以下过程将仅在将提交到 repo 的跟踪文件中修改 $Date: $ 关键字。它使用git diff --name-only
which 将列出已修改的文件,仅此而已....
在提交代码之前,我手动使用了这个单行代码。但有一件事是我必须在应用它之前导航到 repo 的根目录。
这是 Linux 的代码变体(为了便于阅读,粘贴为多行)
git diff --name-only | xargs stat -c "%n %Y" 2>/dev/null | \
perl -pe 's/[^[:ascii:]]//g;' | while read l; do \
set -- $l; f=$1; shift; d=$*; modif=`date -d "@$d"`; \
perl -i.bak -pe 's/\$Date: [\w \d\/:,.)(+-]*\$/\$Date: '"$modif"'\$/i' $f; \
git add $f; done
和 OSX
git diff --name-only | xargs stat -f "%N %Sm" | while read l; do \
set -- $l; f=$1; shift; d=$*; modif=`date -j -f "%b %d %T %Y" "$d"`; \
perl -i.bak -pe 's/\$Date: [\w \d\/:,.)(+-]*\$/\$Date: '"$modif"'\$/i' $f; \
git add $f; done