go-pathspec implements gitignore-style pattern matching for paths.
There are a few alternatives, that try to be gitignore compatible or even state gitignore compatibility:
go-git states it would be gitignore compatible, but actually they are missing a few special cases. This issue describes one of the not working patterns: https://github.com/go-git/go-git/issues/108
What does not work is global filename pattern matching. Consider the following .gitignore file:
# gitignore test file parse.go
Then parse.go should match on all filenames called parse.go. You can test this via this shell script:
mkdir -p /tmp/test/internal/util touch /tmp/test/internal/util/parse.go cd /tmp/test/ git init echo "parse.go" > .gitignore
With git parse.go will be excluded. The go-git implementation behaves different.
monochromegane's go-gitignore does not support the use of **-operators. This is not consistent to real gitignore behavior, too.
Sander van Harmelen (sander@xanzy.io)
Christian Rebischke (chris@shibumi.dev)