Сначала мы должны найти файлы, находящиеся на данный момент в репо. Это просто:
git ls-files
Для каждого из этих файлов, мы хотим, чтобы увидеть, если он был изменен после указанной даты. git log
будет работать здесь:
git log --since "<some date>" -- somefile.cpp
(Это не даст никакого вывода, если файл не был изменен с момента указанной даты.)
Собирает все вместе с другим git log
команды для удобного вывода, вот bash скрипт, который должен сделать работу:
#!/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"
Это покажет вам только те файлы, которые не были изменены с момента до полудня 1 января 2017.
Это 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; ...
Вот ве rsion приведенного выше сценария, который позволяет передавать эти типы файлов в качестве аргументов:
#!/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$"
как передать расширения файлов в качестве аргумента в Баш myscript.sh? например, myscript.sh «2017-01-01» «cpp, c» только для источников C и C++. – electro
@electro Обновлен мой ответ снова. –
Спасибо. вызов сценария с «.cpp $», похоже, вызывает ошибку имени нелегальной переменной в оболочке. Я думаю, что это знак $. – electro