[user]
	email = git@einverne.info
	name = Ein Verne
	signingkey = 926634D64ACAD792
[push]
	default = matching
#[http]
#postBuffer = 524288000
[alias]
	unstage = reset HEAD --
	a = add
	b = branch
	c = commit
	d = diff
	f = fetch
	g = grep
	l = log
	m = merge
	o = checkout
	p = pull
	r = remote
	s = status
	st = status
	w = whatchanged

	### commit ###
	ca = commit --amend

	### checkout ###
	co = checkout

	### cherry-pick ###

	### diff ###
	# diff - show changes not yet staged
	dc = diff --cache

	# diff - changes about to be commited
	ds = diff --staged

	### log ###
	# log key - our favorite way to show our key performance indicators, i.e. our most useful summary.
	lk = log --graph --topo-order --abbrev-commit --date=short --decorate --all --boundary --pretty=format:'%Cgreen%ad %Cred%h%Creset -%C(yellow)%d%Creset %s %Cblue[%cn]%Creset %Cblue%G?%Creset'

	### merge ###

	### pull ###
	# pull if a merge can be resolved as a fast-forward, otherwise fail.
	pf = pull --ff-only

	# pull with rebase - to provide a cleaner, linear, bisectable history.
	#
	# To integrate changes between branches, you can merge or rebase.
	#
	# When we use "git pull", git does a fetch then a merge.
	# If we've made changes locally and someone else has pushed changes
	# to our git host then git will automatically merge these together
	# and create a merge commit that looks like this in the history:
	#
	#    12345678 - Merge branch 'foo' of bar into master
	#
	# When we use "git pull --rebase", git does a fetch then a rebase.
	# A rebase resets the HEAD of your local branch to be the same as
	# the remote HEAD, then replays your local commits back into repo.
	# This means you don't get any noisy merge messages in your history.
	# This gives us a linear history, and also helps with git bisect.
	#
	# To automatically do "pull --rebase" for any branch based on master:
	#
	#    git config branch.master.rebase true
	#
	# To automatically do "pull --rebase" for all branches:
	#
	#     git config --global branch.autosetuprebase always
	#
	# pr = pull --rebase
    pr="!f() { \
        BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD); \
        git push -u origin $BRANCH_NAME; \
        hub pull-request; \
    };f "

	### rebase ###

	# rebase - forward-port local commits to the updated upstream head.
	rb = rebase

	# rebase - continue the rebasing process after resolving a conflict manually and updating the index with the resolution.
	rbc = rebase --continue

	# rebase - restart the rebasing process by skipping the current patch.
	rbs = rebase --skip

	### remote ###


	### tags ###
	lasttag = describe --tags --abbrev=0
	tags = tag -n1 --list

# Stash aliases
	save = stash save
	pop = stash pop
[commit]
	gpgSign = false

[branch]
	autosetuprebase = always
[core]
    editor = vim
	autocrlf = input
	quotepath = false
[pull]
	rebase = true

[merge]
    tool = meld
    conflictstyle = diff3
[mergetool "meld"]
    cmd = meld $LOCAL $BASE $REMOTE --output=$MERGED --auto-merge
[gpg]
	program = gpg
[hub]
    protocol = ssh

[includeIf "gitdir:~/projects/"]
    path = ~/projects/.gitconfig

[includeIf "gitdir:~/smart/"]
	path = .gitconfig-work
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true
[init]
	defaultBranch = master
[log]
	date = local
[http]
	postBuffer = 524288000