避免/解决git stash / rebase更改文件时间戳的问题

时间:2015-03-26 10:26:42

标签: git

我的问题是,更改时间戳会导致构建时间比需要的时间长很多,具体取决于我在本地修改的文件。这是令人头疼的问题,我们的远程接收每10分钟发生一次新的更改,我不得不在没有验证的情况下推送我的更改,或者永久地一次又一次地获取和构建。不知道我喜欢哪两个更少。

我想这不是git本身应该处理的事情,但是可能有一个工具或脚本我可以用来在rebase之前喜欢示例文件校验和和时间戳,然后恢复其文件的时间戳内容没有改变?

1 个答案:

答案 0 :(得分:0)

在写完自己的答案后,我发现了2个类似的问题,答案很好herehere。它们提供了用于保存和恢复文件时间戳的python脚本。

以下是我的解决方案。我决定保留它,因为它简单 - 它只是bash one-liner。

这不是一个完整的解决方法,因为它是一种将所有未更改文件的时间戳更改为某个请求时间而不是之前修改日期的方法,但对于大多数情况来说应该足够了。但是,有时候它可能是不安全的 - 如果你没有更新你的版本,可能会阻止它更新(询问是否不清楚)。

您可以列出所有未使用

更改的文件
 git ls-files | grep -Fv '$\n'"$(git diff HEAD@{1} --name-only)"

(用您实际需要的任何承诺替换HEAD@{1}

这个'$\n'有点奇怪 - 即使没有文件被更改,它也能保持工作,所以它不是很重要。

要更改所有文件的修改日期,请使用

touch -chmd "2015-03-24" $(git ls-files | grep -Fv '$\n'"$(git diff HEAD@{1} --name-only)")

(将HEAD@{1}"2015-03-24"替换为您想要的任何提交和日期)

小心文件名中的空格 - 它们无法正常工作,并可能导致其他文件被意外触摸。设置IFS='$\n'应解决此问题。