Ignore files in git log -p

六月ゝ 毕业季﹏ 提交于 2019-12-07 09:53:24

问题


I'm trying to summarize my work on a project. The problem is that I do not want to include test files in the output of git log --patch.

The files are in a single directory called mtest; however, that folder also contains test suite code that I do want to show. Test files, which I want to exclude, have extension mscx or xml, so I would want the filter to work based on that.

I have looked at Making 'git log' ignore changes for certain paths but this looks like it excludes commits that modified a file instead of simply excluding the file.

Is there a way to do this?

I have tried Jubobs answer, and it seemed worked, but surprisingly 2 files came up even with the filter on.

I have reproduced this with this small repository:

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"

I noticed that files are not filtered when a directory is created. I have tried the following commands:

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

which resulted in both xml files to be included.

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

This surprisingly filters out the test4.xml but not test2.xml.


回答1:


I don't know which version of Git you are/were using, but the problem you report appears to have been fixed in Git 1.9.5 (for more details about the bugfix, see this). The following command

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

does what you want in your toy example: as you can see below, all *.xml files get filtered out, as desired.

$ 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


来源:https://stackoverflow.com/questions/25339828/ignore-files-in-git-log-p

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!