| ... | ... | @@ -260,6 +260,19 @@ | 
| 260 | 260 |  	  | eval \"LESS=${LESS-FRX} $(git var GIT_PAGER)\"; \ | 
| 261 | 261 | }; f" | 
| 262 | 262 |  | 
| 263 | + ; Filter meta. | |
| 264 | +	filter-meta = "!f() { : git filter-branch ; \ | |
| 265 | + name=\"$1\"; shift; \ | |
| 266 | + email=\"$1\"; shift; \ | |
| 267 | + git filter-branch \"$@\" --env-filter \" \ | |
| 268 | + GIT_AUTHOR_NAME=\\\"$name\\\"; \ | |
| 269 | + GIT_AUTHOR_EMAIL=\\\"$email\\\"; \ | |
| 270 | + GIT_COMMITTER_NAME=\\\"$name\\\"; \ | |
| 271 | + GIT_COMMITTER_EMAIL=\\\"$email\\\"; \ | |
| 272 | + GIT_COMMITTER_DATE=\\\"\\$GIT_AUTHOR_DATE\\\"; \ | |
| 273 | + \" ; \ | |
| 274 | + }; f" | |
| 275 | + | |
| 263 | 276 | ; Log. | 
| 264 | 277 |  	l = "!f() { : git log ; \ | 
| 265 | 278 | git config --get-colorbool color.diff && color_diff=always; \ | 
| ... | ... | @@ -245,6 +245,21 @@ | 
| 245 | 245 | done; \ | 
| 246 | 246 | }; f" | 
| 247 | 247 |  | 
| 248 | + ; Refdiff. | |
| 249 | +	refdiff = "!f() { : git diff ; \ | |
| 250 | + git config --get-colorbool color.diff && color_diff=always; \ | |
| 251 | + git reflog --pretty='format:%h: %gs' \ | |
| 252 | +	  | awk -F': ' '$2~/(commit|rebase).*\\((amend|finish)\\)/{print $1}' \ | |
| 253 | + | while read -r ref; \ | |
| 254 | + do \ | |
| 255 | + git -c color.diff=$color_diff show --no-patch $ref; \ | |
| 256 | + echo; \ | |
| 257 | + git -c color.diff=$color_diff diff \"$@\" $ref HEAD; \ | |
| 258 | + echo; \ | |
| 259 | + done \ | |
| 260 | +	  | eval \"LESS=${LESS-FRX} $(git var GIT_PAGER)\"; \ | |
| 261 | + }; f" | |
| 262 | + | |
| 248 | 263 | ; Log. | 
| 249 | 264 |  	l = "!f() { : git log ; \ | 
| 250 | 265 | git config --get-colorbool color.diff && color_diff=always; \ | 
| ... | ... | @@ -231,6 +231,20 @@ | 
| 231 | 231 | | sort -u; \ | 
| 232 | 232 | }; f" | 
| 233 | 233 |  | 
| 234 | + ; Browse. | |
| 235 | +	browse ="!f() { : ; \ | |
| 236 | + set --; \ | |
| 237 | +	  urls=\"$(git remote get-url ${@:-$(git remote)})\"; \ | |
| 238 | + for url in $urls; \ | |
| 239 | + do \ | |
| 240 | + echo $url; \ | |
| 241 | +	    { [ $(command -v xdg-open) ] && xdg-open \"$url\"; } || \ | |
| 242 | +	    { [ $(command -v open)     ] && open     \"$url\"; } || \ | |
| 243 | +	    { [ $(command -v start)    ] && start    \"$url\"; } || \ | |
| 244 | + echo \"$@\"; \ | |
| 245 | + done; \ | |
| 246 | + }; f" | |
| 247 | + | |
| 234 | 248 | ; Log. | 
| 235 | 249 |  	l = "!f() { : git log ; \ | 
| 236 | 250 | git config --get-colorbool color.diff && color_diff=always; \ | 
| ... | ... | @@ -224,6 +224,13 @@ | 
| 224 | 224 |  	  git ls-files \"$@\" | tree -n ${color_tree+-C} --fromfile; \ | 
| 225 | 225 | }; f" | 
| 226 | 226 |  | 
| 227 | + ; Users. | |
| 228 | +	users = "!f() { : git log ; \ | |
| 229 | + git log --pretty=full \"$@\" \ | |
| 230 | + | sed -n 's/^\\(Author\\|Commit\\): \\(.*\\)/\\2/p' \ | |
| 231 | + | sort -u; \ | |
| 232 | + }; f" | |
| 233 | + | |
| 227 | 234 | ; Log. | 
| 228 | 235 |  	l = "!f() { : git log ; \ | 
| 229 | 236 | git config --get-colorbool color.diff && color_diff=always; \ | 
| ... | ... | @@ -218,6 +218,12 @@ | 
| 218 | 218 |  	  | eval \"LESS=${LESS-FRX} $(git var GIT_PAGER)\"; \ | 
| 219 | 219 | }; f" | 
| 220 | 220 |  | 
| 221 | + ; Tree. | |
| 222 | +	tree = "!f() { : git ls-files ; \ | |
| 223 | + git config --get-colorbool color.tree && color_tree=always; \ | |
| 224 | +	  git ls-files \"$@\" | tree -n ${color_tree+-C} --fromfile; \ | |
| 225 | + }; f" | |
| 226 | + | |
| 221 | 227 | ; Log. | 
| 222 | 228 |  	l = "!f() { : git log ; \ | 
| 223 | 229 | git config --get-colorbool color.diff && color_diff=always; \ | 
| ... | ... | @@ -172,6 +172,52 @@ | 
| 172 | 172 | compactt = tformat:%C(BrightYellow)%h%x09%C(BrightMagenta)%>(1 )%ar%x09%C(BrightBlue)%<(1 )%aN%x09%C(BrightWhite)%s%C(auto)%d | 
| 173 | 173 |  | 
| 174 | 174 | [alias] | 
| 175 | + ; All. | |
| 176 | +	all = "!f() { : ; \ | |
| 177 | + [ -t 1 ] && terminal=y; \ | |
| 178 | + git config --get-colorbool color.all && color_all=always; \ | |
| 179 | + git config --get-colorbool color.ui && color_ui=always; \ | |
| 180 | + find . -type d -name '*.git' -prune \ | |
| 181 | + | sed 's#^\\./\\.git$\\|^\\./\\|/\\.git$##g' \ | |
| 182 | + | sort \ | |
| 183 | +	  | awk '{ \ | |
| 184 | + for (parent in parents) \ | |
| 185 | + if ($0 ~ \"^\" parent) \ | |
| 186 | + next; \ | |
| 187 | + parents[$0]; \ | |
| 188 | + print; \ | |
| 189 | + }' \ | |
| 190 | +	  | { \ | |
| 191 | + if [ $# -eq 0 ]; \ | |
| 192 | + then \ | |
| 193 | + if [ $terminal ]; \ | |
| 194 | + then \ | |
| 195 | +	        tree -n ${color_all+-C} --fromfile; \ | |
| 196 | + else \ | |
| 197 | + cat; \ | |
| 198 | + fi; \ | |
| 199 | + else \ | |
| 200 | + if [ $color_all ]; \ | |
| 201 | + then \ | |
| 202 | +	        get_color() { git -C \"$path\" config --get-color \"$@\"; }; \ | |
| 203 | + color_reset=$(get_color '' reset); \ | |
| 204 | + color_all_header=$(get_color color.all.header yellow); \ | |
| 205 | + fi; \ | |
| 206 | + while read -r path; \ | |
| 207 | + do \ | |
| 208 | + output=$(git -C \"$path\" -c color.ui=$color_ui \"$@\" 2>&1); \ | |
| 209 | + [ \"$output\" ] || continue; \ | |
| 210 | + printf '%s%s%s\\n%s\\n\\n' \ | |
| 211 | + \"$color_all_header\" \ | |
| 212 | + \"$path\" \ | |
| 213 | + \"$color_reset\" \ | |
| 214 | + \"$output\"; \ | |
| 215 | + done; \ | |
| 216 | + fi; \ | |
| 217 | + } \ | |
| 218 | +	  | eval \"LESS=${LESS-FRX} $(git var GIT_PAGER)\"; \ | |
| 219 | + }; f" | |
| 220 | + | |
| 175 | 221 | ; Log. | 
| 176 | 222 |  	l = "!f() { : git log ; \ | 
| 177 | 223 | git config --get-colorbool color.diff && color_diff=always; \ | 
| ... | ... | @@ -167,12 +167,21 @@ | 
| 167 | 167 | maxStack = 100 | 
| 168 | 168 |  | 
| 169 | 169 | [pretty] | 
| 170 | - patch = format:%C(BrightYellow)commit %h%C(auto)%d%n%C(BrightYellow)Author: %aN <%aE>%n%C(BrightYellow)Date: %ad%n%n%C(Yellow)%s%n | |
| 171 | - compact = tformat:%C(BrightYellow)%h %C(BrightMagenta)%>(13,trunc)%ar %C(BrightBlue)%<(15,trunc)%aN %C(BrightWhite)%s%C(auto)%d | |
| 170 | + patch = format:%C(BrightYellow)commit %h%C(auto)%d%n%C(BrightYellow)Author: %aN <%aE>%n%C(BrightYellow)Date: %ad%n%n%C(Yellow)%s%n | |
| 171 | + compact = tformat:%C(BrightYellow)%h%x20%C(BrightMagenta)%>(13,trunc)%ar%x20%C(BrightBlue)%<(15,trunc)%aN%x20%C(BrightWhite)%s%C(auto)%d | |
| 172 | + compactt = tformat:%C(BrightYellow)%h%x09%C(BrightMagenta)%>(1 )%ar%x09%C(BrightBlue)%<(1 )%aN%x09%C(BrightWhite)%s%C(auto)%d | |
| 172 | 173 |  | 
| 173 | 174 | [alias] | 
| 174 | 175 | ; Log. | 
| 175 | - l = log --graph --pretty=compact | |
| 176 | +	l = "!f() { : git log ; \ | |
| 177 | + git config --get-colorbool color.diff && color_diff=always; \ | |
| 178 | + git -c color.diff=$color_diff log --graph --pretty=compactt \"$@\" \ | |
| 179 | + | sed -E 's/^([^\\t]+\\t[^\\t,]+)(,.+)? ago(.*\\t.*)$/\\1\\3/' \ | |
| 180 | +	  | sed -E 's/^(.*) +(.*[0-9a-f]{7}.*\\t)/\\1\\t\\2/' \ | |
| 181 | + | sed -E 's/ *$//' \ | |
| 182 | + | column -t -o ' ' -s \"$(printf '\\t')\" \ | |
| 183 | +	  | eval \"LESS=${LESS-FRX} $(git var GIT_PAGER)\"; \ | |
| 184 | + }; f" | |
| 176 | 185 | ls = log --oneline --decorate=no | 
| 177 | 186 | lf = log --first-parent | 
| 178 | 187 | lp = log --patch --pretty=patch | 
| ... | ... | @@ -165,3 +165,77 @@ | 
| 165 | 165 | [absorb] | 
| 166 | 166 | ; https://github.com/tummychow/git-absorb | 
| 167 | 167 | maxStack = 100 | 
| 168 | + | |
| 169 | +[pretty] | |
| 170 | + patch = format:%C(BrightYellow)commit %h%C(auto)%d%n%C(BrightYellow)Author: %aN <%aE>%n%C(BrightYellow)Date: %ad%n%n%C(Yellow)%s%n | |
| 171 | + compact = tformat:%C(BrightYellow)%h %C(BrightMagenta)%>(13,trunc)%ar %C(BrightBlue)%<(15,trunc)%aN %C(BrightWhite)%s%C(auto)%d | |
| 172 | + | |
| 173 | +[alias] | |
| 174 | + ; Log. | |
| 175 | + l = log --graph --pretty=compact | |
| 176 | + ls = log --oneline --decorate=no | |
| 177 | + lf = log --first-parent | |
| 178 | + lp = log --patch --pretty=patch | |
| 179 | + lpw = lp --color-words='[_[:alnum:]]+|[^[:space:]]' | |
| 180 | + lpww = lp --color-words='.' | |
| 181 | + la = l --all | |
| 182 | + lsa = ls --all | |
| 183 | + lfa = lf --all | |
| 184 | + lpa = lp --all | |
| 185 | + lpwa = lpw --all | |
| 186 | + lpwwa = lpww --all | |
| 187 | + | |
| 188 | + ; Status. | |
| 189 | + s = status | |
| 190 | + ss = status --short | |
| 191 | + sb = status --short --branch | |
| 192 | + sa = s --ignored | |
| 193 | + ssa = ss --ignored | |
| 194 | + sba = sb --ignored | |
| 195 | + | |
| 196 | + ; Diff. | |
| 197 | + d = diff | |
| 198 | +	du = diff @{upstream} | |
| 199 | +	dp = diff @{push} | |
| 200 | + dc = d --cached | |
| 201 | + duc = du --cached | |
| 202 | + dpc = dp --cached | |
| 203 | + dw = d --color-words='[_[:alnum:]]+|[^[:space:]]' | |
| 204 | + duw = du --color-words='[_[:alnum:]]+|[^[:space:]]' | |
| 205 | + dpw = dp --color-words='[_[:alnum:]]+|[^[:space:]]' | |
| 206 | + dcw = dc --color-words='[_[:alnum:]]+|[^[:space:]]' | |
| 207 | + ducw = duc --color-words='[_[:alnum:]]+|[^[:space:]]' | |
| 208 | + dpcw = dpc --color-words='[_[:alnum:]]+|[^[:space:]]' | |
| 209 | + dww = d --color-words='.' | |
| 210 | + duww = du --color-words='.' | |
| 211 | + dpww = dp --color-words='.' | |
| 212 | + dcww = dc --color-words='.' | |
| 213 | + ducww = duc --color-words='.' | |
| 214 | + dpcww = dpc --color-words='.' | |
| 215 | + | |
| 216 | + ; Add. | |
| 217 | + au = add -u | |
| 218 | + aa = add -A | |
| 219 | + | |
| 220 | + ; Commit. | |
| 221 | + c = commit | |
| 222 | + ca = commit --amend | |
| 223 | + | |
| 224 | + ; Rebase. | |
| 225 | + ri = rebase -i | |
| 226 | + ro = rebase -i --root | |
| 227 | + rr = rebase --continue | |
| 228 | + | |
| 229 | + ; Fetch. | |
| 230 | + f = fetch | |
| 231 | + | |
| 232 | + ; Push. | |
| 233 | + p = push | |
| 234 | + pf = push --force-with-lease | |
| 235 | + | |
| 236 | + ; Clean ignored files (requires either `-f`, `-i` or `-n`). | |
| 237 | + x = clean -Xd | |
| 238 | + | |
| 239 | + ; Contains. | |
| 240 | + contains = tag --contains | |
| 241 | + ; contains = describe --contains | 
| ... | ... | @@ -104,3 +104,60 @@ | 
| 104 | 104 |  | 
| 105 | 105 | [blame] | 
| 106 | 106 | date = relative | 
| 107 | + | |
| 108 | +[log] | |
| 109 | + graphColors = \ | |
| 110 | + BrightRed, \ | |
| 111 | + BrightGreen, \ | |
| 112 | + BrightYellow, \ | |
| 113 | + BrightBlue, \ | |
| 114 | + BrightMagenta, \ | |
| 115 | + BrightCyan | |
| 116 | + | |
| 117 | +[diff] | |
| 118 | + colorMoved = zebra | |
| 119 | + colorMovedWS = ignore-space-change | |
| 120 | + | |
| 121 | +[color "diff"] | |
| 122 | + meta = BrightBlue | |
| 123 | + frag = Blue | |
| 124 | + func = Blue | |
| 125 | + commit = BrightYellow | |
| 126 | + whitespace = BrightRed | |
| 127 | + plain = Yellow | |
| 128 | + context = BrightWhite | |
| 129 | + contextBold = BrightWhite | |
| 130 | + contextDimmed = White | |
| 131 | + old = BrightRed | |
| 132 | + oldBold = BrightRed | |
| 133 | + oldDimmed = Red | |
| 134 | + new = BrightGreen | |
| 135 | + newBold = BrightGreen | |
| 136 | + newDimmed = Green | |
| 137 | + oldMoved = BrightMagenta | |
| 138 | + oldMovedDimmed = Magenta | |
| 139 | + oldMovedAlternative = Magenta | |
| 140 | + oldMovedAlternativeDimmed = Magenta | |
| 141 | + newMoved = BrightCyan | |
| 142 | + newMovedDimmed = Cyan | |
| 143 | + newMovedAlternative = Cyan | |
| 144 | + newMovedAlternativeDimmed = Cyan | |
| 145 | + | |
| 146 | +[blame] | |
| 147 | + coloring = repeatedLines | |
| 148 | + ; coloring = highlightRecent | |
| 149 | + | |
| 150 | +[color "blame"] | |
| 151 | + repeatedLines = White | |
| 152 | + highlightRecent = \ | |
| 153 | + 245, 1 years ago, \ | |
| 154 | + 246, 6 months ago, \ | |
| 155 | + 247, 5 months ago, \ | |
| 156 | + 248, 4 months ago, \ | |
| 157 | + 249, 3 months ago, \ | |
| 158 | + 250, 2 months ago, \ | |
| 159 | + 251, 4 weeks ago, \ | |
| 160 | + 252, 3 weeks ago, \ | |
| 161 | + 253, 2 weeks ago, \ | |
| 162 | + 254, 1 weeks ago, \ | |
| 163 | + 255 | 
| ... | ... | @@ -54,3 +54,33 @@ | 
| 54 | 54 | [diff] | 
| 55 | 55 | renames = copies | 
| 56 | 56 | algorithm = histogram | 
| 57 | + | |
| 58 | +[url "ssh://git@"] | |
| 59 | + pushInsteadOf = https:// | |
| 60 | + | |
| 61 | +[protocol] | |
| 62 | + allow = never | |
| 63 | + | |
| 64 | +[protocol "file"] | |
| 65 | + allow = always | |
| 66 | + | |
| 67 | +[protocol "ssh"] | |
| 68 | + allow = always | |
| 69 | + | |
| 70 | +[protocol "https"] | |
| 71 | + allow = always | |
| 72 | + | |
| 73 | +[transfer] | |
| 74 | + fsckObjects = true | |
| 75 | + | |
| 76 | +[fsck] | |
| 77 | + zeroPaddedFilemode = warn | |
| 78 | + badTimezone = warn | |
| 79 | + | |
| 80 | +[receive "fsck"] | |
| 81 | + zeroPaddedFilemode = warn | |
| 82 | + badTimezone = warn | |
| 83 | + | |
| 84 | +[fetch "fsck"] | |
| 85 | + zeroPaddedFilemode = warn | |
| 86 | + badTimezone = warn | 
| ... | ... | @@ -13,3 +13,33 @@ | 
| 13 | 13 |  | 
| 14 | 14 | [init] | 
| 15 | 15 | templateDir = ~/.gittemplate | 
| 16 | + defaultBranch = master | |
| 17 | + ; defaultBranch = main | |
| 18 | + | |
| 19 | +[remote] | |
| 20 | + pushDefault = origin | |
| 21 | + | |
| 22 | +[push] | |
| 23 | + default = current | |
| 24 | + recurseSubmodules = check | |
| 25 | + | |
| 26 | +[branch] | |
| 27 | + autoSetupMerge = always | |
| 28 | + autoSetupRebase = always | |
| 29 | + | |
| 30 | +[fetch] | |
| 31 | + prune = true | |
| 32 | + pruneTags = true | |
| 33 | + | |
| 34 | +[rebase] | |
| 35 | + autoSquash = true | |
| 36 | + autoStash = true | |
| 37 | + updateRefs = true | |
| 38 | + missingCommitsCheck = error | |
| 39 | + | |
| 40 | +[pull] | |
| 41 | + rebase = merges | |
| 42 | + | |
| 43 | +[merge] | |
| 44 | + ff = false | |
| 45 | + autoStash = true | 
| ... | ... | @@ -1,2 +1,9 @@ | 
| 1 | 1 | [include] | 
| 2 | 2 | path = ~/.gitconfig-user | 
| 3 | + | |
| 4 | +[core] | |
| 5 | + ; Git sets `$LESS` to `FRX` if it's not already set. `X` disables | |
| 6 | + ; sending termcap initialization and deinitialization strings to the | |
| 7 | + ; terminal, which leaves (potentially log) text on the screen and | |
| 8 | + ; disables mouse scrolling. | |
| 9 | + pager = less -+X |