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
.
If you want to ignore a file that you've committed in the past, you'll need to delete the file from your repository and then add a .gitignore rule for it. Using the --cached option with git rm means that the file will be deleted from your repository, but will remain in your working directory as an ignored file.
Sometimes we might need to check if a single file is ignored by git. To do this, execute the check-ignore command with the file path. It will output the file name if it is ignored by git.
gitignore will prevent untracked files from being added (without an add -f ) to the set of files tracked by Git. However, Git will continue to track any files that are already being tracked. The removal of the file from the head revision will happen on the next commit.
gitignore file is a text file that tells Git which files or folders to ignore in a project. A local . gitignore file is usually placed in the root directory of a project. You can also create a global . gitignore file and any entries in that file will be ignored in all of your Git repositories.
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With