Some Git Tips useful for contributors and developers
Here we put some tips and cheatsheets, the full documentations are at Git Primer in Committer's Guide and Using Git in Handbook, which is recommended to read and editing is always welcomed. This FreeBSD Journal article also has some git tips.
.gitconfig
There are two common places for git config, global (~/.gitconfig) and project wise (/path/to/the/project/.git/config).
You can set your preferred name and email for different projects:
[user] name = email =
Please note, that email set in the global user config (~/.gitconfig) will get used in all repositories that do not set per repo value.
format
To show both for author and committer information for checking the credit is given to the submitter, set fuller format for git log and git show
[format] pretty = fuller
dealing with pgp keys
When updating pgp keys in the handbook, it's helpful to be able to confirm what actually changed to your key before committing.
Consider adding this stanza to your $HOME/.gitconfig:
[diff "gpg"] textconv = "f(){ gpg --list-packets < \"$1\" | grep -v \"^# off=\"; }; f"
and this to /path/to/your/doc-repo-clone/.git/info/attributes:
*.key diff=gpg
When you now "git diff" or "git show" in the doc repo, the base64 encoded blobs will be decoded to (slightly) more readable PGP packets.
rewriting history
To rewrite history, including separating out components from FreeBSD src, see the examples in git-filter.
commit count (replacement of revision number)
git rev-list --first-parent --count HEAD
Show your diff while writing commit msg
If you want to see your uncommitted diff while writing a commit message, either run:
git commit --verbose
…or configure it accordingly:
[commit] verbose = true
Show (long enough) hash
git rev-parse --short <long hash>
Worktree
It's handy to tracking multiple branches simultaneously with git-worktree(1)
cd freebsd-ports; git worktree add -b 2021Q3 ../freebsd-ports-2021Q3 freebsd/2021Q3 cd freebsd-src; git worktree add -b stable/13 ../freebsd-src-13 freebsd/stable/13
Helper Scripts
ports
year=$(date +"%Y") month=$(date +"%-m") quarter=$(((month-1)/3+1)) branch="${year}Q${quarter}" git worktree add -b ${branch} ../freebsd-ports-${branch} freebsd/${branch}