💾 Archived View for nox.im › snippets › git-config-and-snippets captured on 2023-12-28 at 15:27:13. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2023-09-28)

-=-=-=-=-=-=-

Git Config and Snippets

Setup user name and email on a per repository basis:

git config user.name "dre"
git config user.email "email@example.org"

Git Commit Time & Timezone

With a team in multiple timezones we're all starting to think in UTC. Commits have two timestamps, the "author date" and the "commit date". Both can be changed by setting the TZ environment variable.

TZ=UTC git commit

Multiple SSH Keys

See how to setup and use multiple SSH keys in my other post[1].

1: use multiple SSH keys in my other post

Commit in the past

There are easy ways to specify time for specific commits and add git commits in the past. Remember that merging branches with such commits can retroactively change the timeline of a git repository.

git commit --date="yesterday" -m "commit msg"
git commit --date="3 day ago" -m "commit msg"
git commit --date="2006-01-02 15:04:05" -m "message"

Format and apply git patch files

Creating git patches in order to exchange diff files of changes made to a git repository, between two branches or unstaged.

git format-patch <branch> <options>

Example, we're making changes on a feature branch and committing there.

git branch patch-branch
git checkout patch-branch
git commit -am "committing changes"

We can then create patch files from commits

git format-patch master
0001-my-changes.patch
0002-my-other-changes.patch

Another example, we want to create a patch set for the last 10 commits from HEAD:

git format-patch -10 HEAD

Someone else can now apply this patch set, ideally on a branch and not master.

git am <patch_file>
git apply <patch_file>

Or bulk apply 10 patch sets:

git am -3k 00*.patch

Github CLI

Signing into multiple GitHub accounts while working on the same day on different projects can be tedious. The GitHub CLI allows for some more convenience:

brew install gh
gh auth login
# go through the browser auth process

before doing anything, check that you're on the correct account

gh api user --jq '"You are @\(.login) (\(.name))."'

and now we can add a repository without opening a browser

gh repo create --source . --public --remote git@github.com:n0x1m/opentelemetry-logger.git

Github Token

In order to go get private GitHub repositories, create a new personal access token at github.com/settings/tokens/new[1].

1: github.com/settings/tokens/new

export GITHUB_TOKEN=gh...
git config --global url."https://${GITHUB_TOKEN}:x-oauth-basic@github.com/".insteadOf "https://github.com/"
export GOPRIVATE=github.com/username/repo

Test

go get -u -f github.com/username/repo

Change Git History Email & Author

In situations where we are open sourcing a company internal repository, we often have the options to wipe the history and publish with a single "initial commit" or rewrite authors with publicly acceptable names and emails. Branch out for the rewrite:

git branch rewrite
git checkout rewrite

set the correct author in this repository

git config user.name "dre"
git config user.email "noxim@nox.im"

change everything after commit d18590053de58631da12cb2c6c11210fd1f548c8

git rebase -r d18590053de58631da12cb2c6c11210fd1f548c8 --exec 'git commit --amend --no-edit --reset-author'

OR change all including root

git rebase -r --root --exec 'git commit --amend --no-edit --reset-author'

then push the rewrite branch to a new master target

git push backup rewrite:master