aboutsummaryrefslogtreecommitdiff
path: root/files/.gitconfig
blob: d89fa3d181ba8d4131b6d441217aa834db2d5b4c (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
[user]
  name = Anton Bobov
  email = anton@bobov.name
  signingkey = B4DCCEF7CE0E6AF3
[commit]
  gpgsign = true
  verbose = true
[tag]
  gpgsign = true
  sort = version:refname
[http]
  sslVerify = false
[color "diff-highlight"]
  oldNormal = red bold
  oldHighlight = red bold reverse
[color "diff"]
  meta = 11
  frag = magenta bold
  commit = yellow bold
  old = red bold
  new = green bold
  whitespace = red reverse
[diff]
  algorithm = histogram
  tool = vimdiff
  colorMoved = true
  submodule = log
  mnemonicprefix = true
[diff-so-fancy]
  stripLeadingSymbols = false
  markEmptyLines = false
[grep]
  lineNumber = true
[merge]
  conflictstyle = zdiff3
  stat = true
  tool = vimdiff
[core]
  pager = diff-so-fancy | less -+$LESS -FRX
  excludesfile = ~/.gitignore
  quotepath = false
  attributesfile = ~/.gitattributes
[log]
  decorate = short
  mailmap = true
  date = iso-local
[alias]
  aa = add --all
  amend = commit --amend
  ar = !sh -c 'git archive --format=tar --prefix="$(basename "$PWD")-$1/" $1^{tree} | bzip2 >"$(basename "$PWD")-$1.tar.bz2"' -
  br = branch --sort=-committerdate
  b = blame -w -C -C -C
  acm = !git add --all && git commit -m
  c = commit --verbose
  co = checkout
  ci = commit
  diffstat = diff --stat -r
  dc = diff --find-copies-harder --cached
  di = diff --find-copies-harder
  dshow = "!f() { DFT_BACKGROUND=light git -c diff.external=difft show --ext-diff $@; }; f"
  dlog = "!f() { DFT_BACKGROUND=light git -c diff.external=difft log -p --ext-diff $@; }; f"
  ddiff = "!f() { DFT_BACKGROUND=light git -c diff.external=difft diff $@; }; f"
  fp = format-patch --find-renames --find-copies
  fix = commit --amend -C HEAD
  try = merge --no-commit --no-ff
  history-all = "!gitk --all $( git fsck | awk '/dangling commit/ {print $3}'; git log -g --pretty='format:%H')"
  k =  !sh -c 'gitk $1' -
  ka = !sh -c 'gitk --all' -
  kb = !sh -c 'gitk --branches' -
  lg = log --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%aN>%Creset' --abbrev-commit --date=relative
  l = "!git lg -10"
  f = !sh -c 'git branch | grep -F "feature/$1" | xargs -r -n 1 git co' -
  st = status
  stashlist = stash list --date=short
  stash-all = stash save --include-untracked
  sha = rev-parse --short
  addnw = !sh -c 'git diff --unified=0 --ignore-all-space --no-color "$@" | git apply --cached --ignore-whitespace --unidiff-zero -'
  branch-name = "!git rev-parse --abbrev-ref HEAD"
  pushf = push --force-with-lease
  publish = "!git push -u origin $(git branch-name)"
    # https://datagrok.org/git/git-serve/
  quickserve="daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"
    # https://github.com/anishathalye/dotfiles/blob/master/gitconfig
  update-submodules = submodule update --init --recursive
  upgrade-submodules = submodule update --init --remote
  wc = whatchanged -p --abbrev-commit --pretty=medium
  undo = reset --soft HEAD~
  whoami = config user.email
  fugitive = mergetool --tool fugitive
  clean-branches = !sh -c 'git branch --merged | grep -v '^*' | fzf -m | xargs -rp git branch -d'
  co-before = !sh -c 'git rev-list -1 --before="$@" HEAD | xargs -r git checkout' -
  ri = rebase --interactive
  rc = rebase --continue
  ra = rebase --abort
  rx = rebase --exec
  prebase = rebase -x 'chronic pre-commit run --from-ref HEAD~ --to-ref HEAD'

    # Gitlab merge requests helpers
  mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -
  mr-clean = "!git for-each-ref refs/heads/mr/* --format='%(refname)' | while read ref ; do branch=${ref#refs/heads/} ; git branch -D $branch ; done"

  recent = "!git for-each-ref --color=always --sort=-committerdate refs/heads --format='%(HEAD)%(color:yellow)%(refname:short)|%(color:magenta)%(authorname)%(color:reset)|%(color:bold green)%(committerdate:relative)|%(color:red)%(objectname:short)%(color:reset)'|column -ts'|'"

  edit-exclude = "!f() { GIT_DIR=\"$(git rev-parse --git-dir 2>/dev/null)\"; $EDITOR \"$GIT_DIR/info/exclude\"; }; f"

[advice]
  statusHints = false
  detachedHead = false
[branch]
  autosetupmerge = always
  autosetuprebase = local
  sort = -committerdate
[rebase]
  instructionFormat = %s [%aN] {%ar}
  autoStash = true
  updateRefs = true
  autoSquash = true
[rerere]
  autoUpdate = true
  enabled = true
[status]
  submoduleSummary = true
[help]
  autocorrect = 10
[remote-hg]
  hg-git-compat = true
[filter "tabs"]
    ;clean = unexpand --tabs=4 --first-only
[gui]
  tabsize = 2
  gcwarning = false
[pull]
  rebase = true
[push]
  followTags = true
  gpgSign = if-asked
  autoSetupRemote = true
[guitool "meld"]
  cmd = meld $FILENAME
  noconsole = yes
  needsfile = yes
[guitool "gvim"]
  cmd = gvim $FILENAME
  noconsole = yes
  needsfile = yes
[include]
  path = ~/.gitconfig.local
[filter "lfs"]
  required = true
  clean = git-lfs clean -- %f
  smudge = git-lfs smudge -- %f
  process = git-lfs filter-process
[mergetool "fugitive"]
  cmd = vim -c \"Gdiff\" \"$MERGED\"
[fetch]
  prune = true
  writeCommitGraph = true
  all = true
[column]
  ui = auto

# Allow pushing changes when working with a "read-only" remote from GitHub.
[url "git@github.com:"]
  pushInsteadOf = https://github.com/
  pushInsteadOf = git://github.com/