feat: add gitignore option to exclude ignored files from sources/generates

When `gitignore: true` is set at the Taskfile or task level, files
matching .gitignore rules are automatically excluded from sources and
generates glob resolution. This prevents rebuilds triggered by changes
to files that are in .gitignore (build artifacts, generated files, etc.).

Uses go-git to load .gitignore patterns including nested .gitignore
files, .git/info/exclude, and global gitignore configuration.
This commit is contained in:
Valentin Maerten
2026-04-03 22:35:04 +02:00
parent 81d621d8aa
commit fe542d5418
16 changed files with 395 additions and 20 deletions

1
testdata/gitignore/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
ignored.txt

25
testdata/gitignore/Taskfile.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
version: '3'
gitignore: true
tasks:
build:
cmds:
- cp ./source.txt ./generated.txt
sources:
- ./*.txt
- exclude: ./generated.txt
generates:
- ./generated.txt
method: checksum
build-no-gitignore:
gitignore: false
cmds:
- cp ./source.txt ./generated.txt
sources:
- ./*.txt
- exclude: ./generated.txt
generates:
- ./generated.txt
method: checksum

1
testdata/gitignore/source.txt vendored Normal file
View File

@@ -0,0 +1 @@
source content