Check out my first novel, midnight's simulacra!

Git

From dankwiki
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Here's a good crash course for subversion users.

Hosting

  • GitHub provides pretty reasonable git hosting services; open source projects eat free.
  • github-trac is a trac extension for working with GitHub
  • Remote repacks/compressions can consume a great deal of memory. To cap the remote packing at, say, 2G, enter the remote repository and run:
git config pack.windowMemory 1000m
git config pack.packSizeLimit 2000m

Configuration

Dump your user configuration with git config -l:

[recombinator](129) $ git config -l
user.name=Nick Black
user.email=dank@qemfd.net
github.user=dankamongmen
[recombinator](0) $

Dump the system configuration, if one exists, via git config --system -l:

[recombinator](129) $ git config --system -l
color.diff=auto
color.status=auto
color.branch=auto
[recombinator](0) $

Subversion equivs

goal subversion git
Add an external repository repo at point dir/path svn propedit svn:externals dir, and add repo path git submodule add repo dir/path (there's a Submodule Tutorial)

Recipes

Create bare repo from existing files

We have existing, untracked files at workpath. We want to initialize a (possibly remote) bare repository repo with the contents of workpath.

  • In repo/, run git init --bare
  • In workpath/, run git init
  • In workpath/, run git remote add origin repo
  • In workpath/, run git add .
  • In workpath/, run git push

Prune remote branches

git remote prune origin

This can be made automatic with git config remote.origin.prune true since git 1.8.5.

Hard sync to upstream

Warning: this will throw away even committed local changes! Assuming remote upstream and branch master:

git reset --hard upstream/master

then, to force your own fork to match:

git push origin master --force

Congratulations! You've just thrown away any local work.

Remove local+remote tag

  • git tag -d TAG
  • git push --delete origin TAG

Rename local+remote branch

Remote branches cannot be renamed in a single step. Instead,

  • Check out the remote branch if it is not checked out
  • Rename the local branch with git branch -m newname
  • Delete the remote branch with git push origin ––delete oldname
  • Re-add and reset the remote branch with git push origin –u newname

Find commit corresponding to tag

  • git rev-list -n 1 TAG

List all commits between two hashes Ce and Cb

  • git rev-list Ce..Cb

Update local list of remote branches

  • git remote update origin --prune

Change base branch BBase of branch Bbranch to BNewbase

  • git rebase --onto BNewbase BBase Bbranch

Show changes in commit C, even if it's a merge commit

  • git show --diff-merges=on C

See also

Links