summaryrefslogtreecommitdiffstats
path: root/docs/configuration/gitlint_file.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/configuration/gitlint_file.md')
-rw-r--r--docs/configuration/gitlint_file.md179
1 files changed, 179 insertions, 0 deletions
diff --git a/docs/configuration/gitlint_file.md b/docs/configuration/gitlint_file.md
new file mode 100644
index 0000000..f1d3c55
--- /dev/null
+++ b/docs/configuration/gitlint_file.md
@@ -0,0 +1,179 @@
+# The .gitlint file
+You can modify gitlint's behavior by adding a `.gitlint` file to your git repository.
+
+Generate a default `.gitlint` config file by running:
+```sh
+gitlint generate-config
+```
+You can also use a different config file like so:
+
+```sh
+gitlint --config myconfigfile.ini
+```
+
+# Example `.gitlint`
+
+```{ .ini .copy title=".gitlint"}
+### GENERAL CONFIG ### (1)
+[general]
+# Ignore rules, reference them by id or name (comma-separated)
+ignore=title-trailing-punctuation, T3
+
+# verbosity should be a value between 1 and 3
+verbosity = 2
+
+# By default gitlint will ignore certain commits (21)
+ignore-merge-commits=true
+ignore-revert-commits=true
+ignore-fixup-commits=true
+ignore-fixup-amend-commits=true
+ignore-squash-commits=true
+
+# Ignore any data sent to gitlint via stdin
+ignore-stdin=true
+
+# Fetch additional meta-data from the local repository when manually passing a
+# commit message to gitlint via stdin or --commit-msg. Disabled by default.
+staged=true
+
+# Hard fail when the target commit range is empty.
+fail-without-commits=true # (2)
+
+# Whether to use Python `search` instead of `match` semantics in rules (3)
+regex-style-search=true
+
+# Enable community contributed rules
+contrib=contrib-title-conventional-commits,CC1 # (4)
+
+# Set the extra-path where gitlint will search for user defined rules # (5)
+extra-path=examples/
+
+
+### RULE CONFIGURATION ### (6)
+[title-max-length]
+line-length=80
+
+[title-min-length]
+min-length=5
+
+[title-must-not-contain-word]
+# Comma-separated list of words that should not occur in
+# the commit message title (case-insensitive).
+words=wip,foobar
+
+[title-match-regex]
+regex=^US[0-9]* # (7)
+
+[body-max-line-length]
+line-length=120
+
+[body-min-length]
+min-length=5
+
+[body-is-missing]
+# Ignore this rule on merge commits (default=true) # (8)
+ignore-merge-commits=false
+
+[body-changed-file-mention]
+# Files that need to be explicitly mentioned in the body when they change
+files=gitlint-core/gitlint/rules.py,README.md # (9)
+
+[body-match-regex]
+regex=My-Commit-Tag: foo$ # (10)
+
+[author-valid-email]
+# E.g.: Only allow email addresses from foo.com
+regex=[^@]+@foo.com # (11)
+
+
+### NAMED RULES ### (20)
+[title-must-not-contain-word:Additional-Words]
+words=foo,bar
+
+
+### CONTRIB RULES ### (12)
+[contrib-title-conventional-commits]
+types = bugfix,user-story,epic
+
+
+### USER DEFINED RULES ### (19)
+[body-max-line-count]
+max-line-count = 5
+
+
+### IGNORE RULES CONFIGURATION ### (13)
+[ignore-by-title]
+# Ignore rules for commits of which the title matches a regex
+regex=^Release(.*) # (14)
+ignore=T1,body-min-length # (15)
+
+[ignore-by-body]
+# Ignore rules for commits of which the body has a line that matches a regex
+regex=(.*)release(.*) # (16)
+ignore=T1,body-min-length
+
+[ignore-body-lines]
+# Ignore all lines that start with 'Co-Authored-By'
+regex=^Co-Authored-By # (17)
+
+[ignore-by-author-name]
+regex=(.*)dependabot(.*) # (18)
+ignore=T1,body-min-length
+```
+
+1. This section of the `.gitlint` file sets overall gitlint behavior. Details about all available `[general]` options can be found in [General Options](general_options.md).
+2. Gitlint will fail by default on invalid commit ranges. This option is specifically to tell gitlint to fail
+ on *valid but empty* commit ranges. Disabled by default.
+3. Disabled by default, but will be enabled by default in the future. [More information](general_options.md#regex-style-search).
+4. See [Contrib Rules](../rules/contrib_rules.md).
+5. See [User Defined Rules](../rules/user_defined_rules/getting_started.md).
+6. All sections below sets rule specific behavior. <br/>
+ Rules and sections can be referenced by their full name or by id. For example, this rule
+ `[title-max-length]` could also be referenced as `[T1]`.
+ ```ini
+ [T1]
+ line-length=80
+ ```
+7. [Python style regex](https://docs.python.org/3/library/re.html) that the commit-msg title must be matched to.
+ Note that the regex can contradict with other rules if not used correctly (e.g. `title-must-not-contain-word`).
+8. Merge commits often don't have a body, so by default gitlint will ignore this rule for merge commits to avoid
+ unncessary violations.
+9. This is useful for when developers often erroneously edit certain files or git submodules.
+ By specifying this rule, developers can only change the file when they explicitly reference it in the commit message.
+10. [Python style regex](https://docs.python.org/3/library/re.html) that the commit-msg body must match. In this case
+ the commit message body must end in <br> `My-Commit-Tag: foo`
+11. [Python style regex](https://docs.python.org/3/library/re.html) that the commit author email address should be
+ matched to.
+12. [Community **Contrib**uted rules](../rules/contrib_rules.md) are disabled by default. You need to explicitly enable
+ them one-by-one by adding them to the `contrib` option under `[general]` section.
+ You can then just configure their options like any other rule.
+ ```ini
+ [general]
+ # Enable contrib rules (comma-separated list)
+ contrib=contrib-title-conventional-commits
+
+ # Configure contrib rule
+ [contrib-title-conventional-commits]
+ types = bugfix,user-story,epic
+ ```
+13. You can configure gitlint to ignore specific commits or parts of a commit.
+14. [Python style regex](https://docs.python.org/3/library/re.html). This example matches commit titles that start
+ with "Release".
+15. Which rules to ignore (reference by id or name). Use `all` to ignore all rules.
+16. [Python style regex](https://docs.python.org/3/library/re.html). This example matches bodies that have a line
+ that contains `release`.
+17. [Python style regex](https://docs.python.org/3/library/re.html). This example will make gitlint ignores all lines
+ that start with `Co-Authored-By`.
+18. [Python style regex](https://docs.python.org/3/library/re.html). This example will make gitlint ignore certain rules
+ for commits made by `dependabot`. You can also ignore the the commit all-together by setting `ignore=all`:
+ ```ini
+ [ignore-by-author-name]
+ regex=(.*)dependabot(.*) # (18)
+ ignore=all
+ ```
+
+19. [User-Defined rules](../rules/user_defined_rules/getting_started.md) can be written in python to tailor gitlint to your specific needs.
+20. [Named Rules](../rules/named_rules.md) allow you to specify multiple instances of the same rule by given them an extra name of your
+ choosing after the colon sign `:`. <br><br> In the example below we're configuring another instances of the
+ `title-must-not-contain-word` rule (the existing one will remain active as well) and naming it `Additional-Words`.
+21. [Gitlint ignores merge, revert, fixup, and squash commits by default.](../ignoring_commits.md#merge-fixup-squash-and-revert-commits) \ No newline at end of file