# go-gitignore [![Build Status](https://travis-ci.org/monochromegane/go-gitignore.svg)](https://travis-ci.org/monochromegane/go-gitignore)
A fast gitignore matching library for Go.
This library use simple tree index for matching, so keep fast if gitignore file has many pattern.
## Usage
```go
gitignore, _ := gitignore.NewGitIgnore("/path/to/gitignore")
path := "/path/to/file"
isDir := false
gitignore.Match(path, isDir)
```
### Specify base directory
go-gitignore treat `path` as a base directory.
If you want to specify other base (e.g. current directory and Global gitignore), you can like the following.
```go
gitignore, _ := gitignore.NewGitIgnore("/home/you/.gitignore", ".")
```
### From io.Reader
go-gitignore can initialize from io.Reader.
```go
gitignore, _ := gitignore.NewGitIgnoreFromReader(base, reader)
```
## Simple tree index
go-gitignore parse gitignore file, and generate a simple tree index for matching like the following.
```
.
├── accept
│ ├── absolute
│ │ └── depth
│ │ ├── initial
│ │ └── other
│ └── relative
│ └── depth
│ ├── initial
│ └── other
└── ignore
├── absolute
│ └── depth
│ ├── initial
│ └── other
└── relative
└── depth
├── initial
└── other
```
## Features
- Support absolute path (/path/to/ignore)
- Support relative path (path/to/ignore)
- Support accept pattern (!path/to/accept)
- Support directory pattern (path/to/directory/)
- Support glob pattern (path/to/\*.txt)
*note: glob pattern*
go-gitignore use [filepath.Match](https://golang.org/pkg/path/filepath/#Match) for matching meta char pattern, so not support recursive pattern (path/`**`/file).
## Installation
```sh
$ go get github.com/monochromegane/go-gitignore
```
## Contribution
1. Fork it
2. Create a feature branch
3. Commit your changes
4. Rebase your local changes against the master branch
5. Run test suite with the `go test ./...` command and confirm that it passes
6. Run `gofmt -s`
7. Create new Pull Request
## License
[MIT](https://github.com/monochromegane/go-gitignore/blob/master/LICENSE)
## Author
[monochromegane](https://github.com/monochromegane)