Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.4k views
in Technique[技术] by (71.8m points)

git log - Why isn't the pathspec magic :(exclude) excluding the specified files from git log's output?

This is a follow-up to Ignore files in git log -p and is also related to Making 'git log' ignore changes for certain paths.

I'm using Git 1.9.2. I'm trying to use the pathspec magic :(exclude) to specify that some patches should not be shown in the output of git log -p. However, patches that I want to exclude still show up in the output.

Here is a minimal working example that reproduces the situation:

$ cd ~/Desktop
$ mkdir test_exclude
$ cd test_exclude
$ git init
$ mkdir testdir
$ printf "my first cpp file
" > testdir/test1.cpp
$ printf "my first xml file
" > testdir/test2.xml
$ git add testdir/
$ git commit -m "added two test files"

Now I want to show all patches in my history expect those corresponding to XML files in the testdir folder. Therefore, following VonC's answer, I run

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

but the patch for my testdir/test2.xml file still shows up in the output:

commit 37767da1ad4ad5a5c902dfa0c9b95351e8a3b0d9
Author: xxxxxxxxxxxxxxxxxxxxxxxxx
Date:   Mon Aug 18 12:23:56 2014 +0100

    added two test files

diff --git a/testdir/test1.cpp b/testdir/test1.cpp
new file mode 100644
index 0000000..3a721aa
--- /dev/null
+++ b/testdir/test1.cpp
@@ -0,0 +1 @@
+my first cpp file
diff --git a/testdir/test2.xml b/testdir/test2.xml
new file mode 100644
index 0000000..8b7ce86
--- /dev/null
+++ b/testdir/test2.xml
@@ -0,0 +1 @@
+my first xml file

What am I doing wrong? What should I do to tell git log -p not to show the patch associated with all XML files in my testdir folder?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Nevermind. The problem appears to have been fixed in Git 1.9.5 (more specifically, in commit ed22b4173bd8d6dbce6236480bd30a63dd54834e). The toy example in my question above works as expected in Git 2.2.1:

$ git --version
git version 2.2.1
$ mkdir test_exclude
$ cd test_exclude/
$ git init
Initialized empty Git repository in /Users/jubobs/Desktop/test_exclude/.git/
$ mkdir testdir
$ printf "my first cpp file
" > testdir/test1.cpp
$ printf "my first xml file
" > testdir/test2.xml
$ git add testdir/
$ git commit -m "added two test files"
[master (root-commit) 5429d04] added two test files
 2 files changed, 2 insertions(+)
 create mode 100644 testdir/test1.cpp
 create mode 100644 testdir/test2.xml

$ git log --patch -- . ":(exclude)testdir/*.xml"
commit 5429d047f140f96c5d6167d083fc1a5eab05fb19
Author: xxxxxxxxxxxxxxxxxxxxxxxxx
Date:   Fri Dec 26 23:40:18 2014 +0100

    added two test files

diff --git a/testdir/test1.cpp b/testdir/test1.cpp
new file mode 100644
index 0000000..3a721aa
--- /dev/null
+++ b/testdir/test1.cpp
@@ -0,0 +1 @@
+my first cpp file

As you can see, there is no mention of test2.xml in the output of that git log command, as desired.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...