我正在尝试查找早于过去特定日期的文件,例如,在 Git 存储库中 2 个月未修改的 cpp 源文件。
如果我使用 Linux findshell 命令,我将无法找到它,因为我工作区中的文件标有“git sync”-ed 的日期。
我怎样才能做到这一点?
首先,我们需要找到当前在 repo 中的文件。这很容易:
git ls-files
Run Code Online (Sandbox Code Playgroud)
对于这些文件中的每一个,我们想查看它是否在给定日期之后被修改。 git log将在这里工作:
git log --since "<some date>" -- somefile.cpp
Run Code Online (Sandbox Code Playgroud)
(如果自给定日期以来文件没有被修改,这将不会给出任何输出。)
将所有这些与另一个git log用于用户友好输出的命令放在一起,这是一个应该完成这项工作的bash脚本:
git ls-files
Run Code Online (Sandbox Code Playgroud)
用法:
/path/to/myscript.sh "2017-01-01 12:00"
Run Code Online (Sandbox Code Playgroud)
这将仅显示自 2017 年 1 月 1 日中午之前尚未修改的文件。
它是 Bash,所以你当然可以将其压缩为一行:
git log --since "<some date>" -- somefile.cpp
Run Code Online (Sandbox Code Playgroud)
要将结果限制为某些类型的文件,请grep在中间添加一个命令,如下所示:
git ls-files | grep -e ".cpp$" -e ".h$" -e ".c$" | while read path; ...
Run Code Online (Sandbox Code Playgroud)
这是上述脚本的一个版本,可让您将这些文件类型作为参数传递:
#!/bin/bash
date=$1
git ls-files | while read path
do
if [ "$(git log --since \"$date\" -- $path)" == "" ]
then
echo "$path $(git log -1 --pretty='%h %ad' -- $path)"
fi
done
Run Code Online (Sandbox Code Playgroud)
用法:
/path/to/myscript.sh "2017-01-01 12:00" ".cpp$" ".h$" ".c$"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
940 次 |
| 最近记录: |