Игнорировать файлы в журнале git -p

Я пытаюсь подвести итоги своей работы над проектом. Проблема в том, что я не хочу включать тестовые файлы в вывод git log --patch.

Файлы находятся в одном каталоге с именем mtest; однако эта папка также содержит код набора тестов, который я хочу показать. Тестовые файлы, которые я хочу исключить, имеют расширение mscx или xml, поэтому я бы хотел, чтобы фильтр работал на основе этого.

Я просмотрел Заставить "git log" игнорировать изменения для определенных путей но похоже, что он исключает коммиты, изменяющие файл, а не просто исключает файл.

Есть ли способ сделать это?

Я попробовал ответ Jubobs, и, похоже, это сработало, но на удивление 2 файла появились даже с включенным фильтром.

Я воспроизвел это с помощью этого небольшого репозитория:

mkdir test
cd test
git init
echo 'readme' > README
git add .
git commit -m "Initial commit"

mkdir test2
cd test2
echo 't1' > test1.cpp
echo 't2' > test2.xml
git add .
git commit -m "c2"

echo 't3' > test3.cpp
echo 't4' > test4.xml
git add .
git commit -m "c3"

Я заметил, что файлы не фильтруются при создании каталога. Я пробовал следующие команды:

git log --patch -- . ":(exclude)**/*.xml"

в результате были включены оба xml-файла.

git log --patch -- . ":(exclude)*.xml"

Это удивительно отфильтровывает test4.xml, но не test2.xml.


person Bartlomiej Lewandowski    schedule 16.08.2014    source источник
comment
Возможный дубликат Заставить 'git log' игнорировать изменения для определенных путей   -  person Kenny Evitt    schedule 02.02.2017


Ответы (1)


Я не знаю, какую версию Git вы используете/использовали, но проблема, о которой вы сообщаете, была исправлена ​​в Git 1.9.5 (более подробную информацию об исправлении см. в это). Следующая команда

git log --patch -- . ":(exclude)*.xml"

делает то, что вы хотите в вашем игрушечном примере: как вы можете видеть ниже, все файлы *.xml отфильтровываются по желанию.

$ mkdir test
$ cd test
$ git init
Initialized empty Git repository in /Users/jubobs/Desktop/test/.git/

$ echo 'readme' > README
$ git add .
$ git commit -m "initial commit"
[master (root-commit) ad6cc73] initial commit
 1 file changed, 1 insertion(+)
 create mode 100644 README

$ mkdir test2
$ cd test2
$ echo 't1' > test1.cpp
$ echo 't2' > test2.xml
$ git add .
$ git commit -m "c2"
[master 8d733a2] c2
 2 files changed, 2 insertions(+)
 create mode 100644 test2/test1.cpp
 create mode 100644 test2/test2.xml

$ echo 't3' > test3.cpp
$ echo 't4' > test4.xml
$ git add .
$ git commit -m "c3"
[master 3e8a3f6] c3
 2 files changed, 2 insertions(+)
 create mode 100644 test2/test3.cpp
 create mode 100644 test2/test4.xml

$ git log --patch -- . ":(exclude)*.xml"
commit 3e8a3f6c627576e8f7d1863b92d4f631ae309417
Author: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Date:   Sat Dec 27 00:19:56 2014 +0100

    c3

diff --git a/test2/test3.cpp b/test2/test3.cpp
new file mode 100644
index 0000000..6d6ea65
--- /dev/null
+++ b/test2/test3.cpp
@@ -0,0 +1 @@
+t3

commit 8d733a27a0e2c9f4c71e7b64742107255035d6cd
Author: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Date:   Sat Dec 27 00:19:33 2014 +0100

    c2

diff --git a/test2/test1.cpp b/test2/test1.cpp
new file mode 100644
index 0000000..795ea43
--- /dev/null
+++ b/test2/test1.cpp
@@ -0,0 +1 @@
+t1
person jub0bs    schedule 16.08.2014
comment
Отличный ответ! Для тех, кто, как и я, ищет способ прочитать git log -p для проекта узла, в котором package-lock.json делает журнал нечитаемым, вот мой псевдоним журнала: alias log='git log -p -- . ":(exclude)package-lock.json"' - person Tom Boutell; 11.09.2018