====== Short snippets ======
These short bash commands or code snippets have proven useful. I will try to collect them here, and maybe freeze some of them into a proper ''.bashrc'' (and the relevant equivalent on Windows). Alternatively, I could bundle related snippets into blog posts. Or I finally start one of those ''.dotfiles'' repositories. But then, I don't want to over-engineer my settings handling. Let's see where this goes.
===== Convert pictures to lower resolution in subfolder =====
Using [[http://imagemagick.org/script/index.php|ImageMagick]] (version 7), this is a handy one-liner, ready to be integrated into an only slightly longer script, moving the result to a fixed, desired output location:
==== Bash ====
mkdir export && magick mogrify -resize 3000x3000 -quality 80 -path export *.jpg
==== PowerShell ====
mkdir (get-item $PWD).Name; magick mogrify -resize 3000x3000 -quality 80 -path (get-item $PWD).Name *.jpg
===== Git config =====
First, the full configuration, then some comments by section:
[color]
ui = auto
[init]
defaultBranch = main
[alias]
al = "!git config -l | grep "^alias" | cut -c 7-"
bl = for-each-ref --format='%(align:50,left)%(color:bold green)%(refname:short)%(color:reset)%(end)%0a %(color:dim green)%(objectname:short)%(color:reset) %(color:dim cyan)%(authordate:short)%(color:reset) %(color:cyan)%(authorname)%(color:reset) %(subject)%0a' --sort=-authordate refs/heads/
ce = config --global --edit
d = diff
dc = diff --cached
lg = log --pretty=tformat:'%C(dim white)%m%C(dim green)%h %C(dim cyan)%cd %C(reset)%<(50,trunc)%s %C(cyan)%aN%C(reset)%C(auto)%w(0,0,8)%+d%C(reset)' --decorate --graph
ll = log --pretty=format:'%C(dim white)%m%C(dim green)%h %C(dim cyan)%cd %C(reset)%s %C(cyan)%aN%C(auto)%w(0,0,8)%+d%Creset' --decorate --name-status
ls = log --pretty=format:'%C(dim white)%m%C(dim green)%h %C(dim cyan)%cd %C(reset)%s %C(cyan)%aN%C(auto)%d%Creset' --decorate --date=short
nl = "!author_names() { git log --pretty=format:'%aN' -- "${@-.}" | sort | uniq -c | sort -n -r; }; author_names"
s = status
[merge]
tool = vimdiff
[log]
date = format:%Y-%m-%d %H:%M
graphColors = 1,2,3,4,5,6,7,8,46,63,124,136,148,160,172,184,196,208,201,220,228
[push]
default = simple
[pull]
ff = only
[core]
editor = vim
==== Aliases ====
My main workhorse in day-to-day work is the ''lg'' (log graph) command, allowing for a quick overview on latest changes with ''git lg %%--%%all'' after a fetch. In case I want briefer output for a linear slice of commits, I use ''ls'' short (no graph). If I want to additionally see the changed files, ''ll'' (log long) can be used. Meta-alias ''al'' (alias list) does exactly that.
Saying ''git dc'' instead of ''git diff %%--%%cached'' for a commit preview is very nice. I hardly remember the ''git d'' instead of ''git diff'', though. But then, typing that out does not hurt too much. Newcomer: ''bl'' (branch list) lists all local branches, together with its latest commit. It's designed to look similar to the output of ''lg''. I might extend it to output remotes in red; it already can list them by calling ''git bl refs/remotes''.
The ''nl'' (name list) lists all commit authors for the current state (HEAD). The optional argument allows to specify a directory or file, by default it operates on the current working directory (''.''). Quite useful to quickly determine the contributors for a particular component.
See chapter [[https://git-scm.com/book/en/v2/Git-Basics-Git-Aliases|2.7 Git Basics - Git Aliases]] from the Git Book for other generally useful aliases. I kind of like ''unstage'', but have already embraced the concept behind ''reset HEAD'', so I am too late for that alias.
==== vim ====
It's easier on the (ok, //my//) brain to switch from tool to tool without having to transfer from CLI to GUI window. But that's just opinion.
==== log ====
My preferred ISO-inspired default date format, but without the unneeded precision of seconds. Date and time are split by a space, not the standard ''T'' which makes ''20010214T2359'' easier to parse, but harder to read. The graphColors allow to specify which of the (typically) 256 terminal colours are used to differentiate between different branches. Here I recommend using much more than the (randomly) chosen 5 values I have shown here.