gpt4 book ai didi

git - 在 Git 存储库中查找早于特定日期的文件

转载 作者:太空狗 更新时间:2023-10-29 13:37:15 25 4
gpt4 key购买 nike

我试图在 Git 存储库中查找早于过去特定日期的文件,例如,cpp 源文件 2 个月未修改。

如果我使用 Linux find shell 命令,我将无法找到它,因为我工作区中的文件被标记为“git sync”-ed 的日期。

我该怎么做?

最佳答案

首先我们需要找到当前在 repo 中的文件。这很简单:

git ls-files

对于这些文件中的每一个,我们想看看它是否在给定日期之后被修改过。 git log 将在这里工作:

git log --since "<some date>" -- somefile.cpp

(如果自给定日期以来文件未被修改,这将不提供任何输出。)

将其与另一个 git log 命令放在一起以提供用户友好的输出,这里是 应该完成这项工作的脚本:

#!/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

用法:

/path/to/myscript.sh "2017-01-01 12:00"

这将只显示自 2017 年 1 月 1 日中午之前未修改过的文件。

它是 Bash,因此您当然可以将其浓缩为一行:

git ls-files | while read path; do if [ "$(git log --since \"$1\" -- $path)" == "" ]; then echo "$path $(git log -1 --pretty='%h %ad' -- $path)"; fi done

要将结果限制为某些类型的文件,请在中间添加一个 grep 命令,如下所示:

git ls-files | grep -e ".cpp$" -e ".h$" -e ".c$" | while read path; ...

下面是上述脚本的一个版本,可让您将这些文件类型作为参数传递:

#!/bin/bash

date=$1
grepargs=""
shift
while [ $? -eq 0 ]
do
grepargs="$grepargs -e \"$1\""
shift
done
git ls-files | grep $grepargs | while read path
do
if [ "$(git log --since \"$date\" -- $path)" == "" ]
then
echo "$path $(git log -1 --pretty='%h %ad' -- $path)"
fi
done

用法:

/path/to/myscript.sh "2017-01-01 12:00" ".cpp$" ".h$" ".c$"

关于git - 在 Git 存储库中查找早于特定日期的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42032035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com