Some Git Tips useful for contributors and developers
Here we put some tips and cheatsheets, the full documentations are at [[https://docs.freebsd.org/en/articles/committers-guide/#git-primer|Git Primer]] in Committer's Guide and [[https://docs.freebsd.org/en/books/handbook/mirrors/#git|Using Git]] in Handbook, which is recommended to read and editing is always welcomed.
==== .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
==== Worktree ====
It's handy to tracking multiple branches simultaneously with [[https://git-scm.com/docs/git-worktree|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
#!/bin/sh
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}