diff options
author | Wolfgang Müller | 2021-08-11 16:42:36 +0200 |
---|---|---|
committer | Wolfgang Müller | 2021-08-11 16:42:36 +0200 |
commit | 0d17c0c99a95180f2877404d20a26f4388a06f64 (patch) | |
tree | 9487a31143f3283ad6e6a9dc3bfea05d2f4b1bd5 /content/11 | |
parent | f4212f2ff805d6b91b2710b7f1edb93d5b3460b6 (diff) | |
download | zunzuncito-0d17c0c99a95180f2877404d20a26f4388a06f64.tar.gz |
content: Add new post: "Better hunk headers with gitattributes(5)"
Diffstat (limited to 'content/11')
-rw-r--r-- | content/11/index.md | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/content/11/index.md b/content/11/index.md new file mode 100644 index 0000000..e356ee5 --- /dev/null +++ b/content/11/index.md @@ -0,0 +1,50 @@ ++++ +date = 2021-08-11T16:41:49+02:00 +title = "Better hunk headers with gitattributes(5)" + +[taxonomies] +tags = ["git", "TIL"] ++++ + +Yesterday whilst catching up on the Git mailing list I stumbled upon this +[patch](https://public-inbox.org/git/20210810190937.305765-1-tsdh@gnu.org/) +proposing to improve the hunk header regex for Java. I had never paid much +attention to how [`git-diff(1)`](https://git-scm.com/docs/git-diff) finds the +right method signature to show in the headers though I was vaguely aware of a +bunch of regexes for different languages. + +Turns out that by default, as explained in the manual for +[`gitattributes(5)`](https://git-scm.com/docs/gitattributes#_defining_a_custom_hunk_header), +`git-diff(1)` emulates the behaviour of GNU `diff -p` and does **not** consult +any of the language-specific regular expressions. This came as a bit of a +surprise to me, as Git usually has relatively sane and extensive defaults. Why +define all these regexes and then not use them by default? + +Perhaps one reason is that it is hard to tell when to use which. Git can only +look at the filename, and not all shell scripts share the `.sh` ending, for +example. Surely it would not be too invasive, however, to define sensible +defaults for, say, files ending in `.py` or `.rs`. + +In any case I updated my `~/.config/git/attributes` with the following, and am +now enjoying better hunk headers across the board: + +``` +*.c diff=cpp +*.cpp diff=cpp +*.go diff=go +*.md diff=markdown +*.pl diff=perl +*.py diff=python +*.rs diff=rust +*.sh diff=bash +*.tex diff=tex +``` + +The markdown setting is especially neat since it will now display the nearest +section right in the diff, like so: + +```diff +--- a/posts/weltschmerz.md ++++ b/posts/weltschmerz.md +@@ -24,6 +24,10 @@ ## Download +``` |