-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsetup.sh
More file actions
executable file
·353 lines (309 loc) · 14.5 KB
/
setup.sh
File metadata and controls
executable file
·353 lines (309 loc) · 14.5 KB
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
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
#!/bin/bash
accent='\033[1;36m'
pro='\033[1;31m'
success='\033[0;32m'
normal='\033[0m'
proMode=false
updateOnly=false
setProMode()
{
if [[ $1 == "-p" ]] || [[ $1 == "--pro" ]]
then
proMode=true
echo -e "${pro}Pro Mode aktiviert${normal}"
fi
}
setUpdateOnly()
{
if [[ $1 == "-u" ]] || [[ $1 == "--update-only" ]]
then
updateOnly=true
echo -e "${accent}Update-Only aktiviert${normal}"
fi
}
setConfig()
{
local question=$1
local callback=$2
local config=$3
if $proMode
then
if [[ -z $config || -z `git config --global $config` ]]
then
default="[ja]"
setValue=true
else
default="[nein]"
setValue=false
fi
echo ""
echo -e "${pro}$question $default${normal}"
echo -e "${pro}ja${normal}"
echo -e "${pro}nein${normal}"
read choice
case $choice in
j | ja) setValue=true
;;
n | nein) setValue=false
;;
esac
else
setValue=true
fi
if $setValue
then
$callback
fi
}
setUsername()
{
local username
echo -e "${accent}Benutzername eingeben (Format: Vorname Nachname)${normal}"
read username
git config --global user.name "$username"
}
setEmail()
{
local email
echo -e "${accent}E-Mail Adresse eingeben${normal}"
read email
git config --global user.email "$email"
}
setMeldDiffTool()
{
git config --global diff.tool meld
}
setKDiff3DiffTool()
{
git config --global diff.tool kdiff3
}
setVisualStudioDiffTool()
{
git config --global diff.tool "vsdiffmerge"
git config --global difftool.prompt true
git config --global difftool.vsdiffmerge.cmd "\"C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\vsdiffmerge.exe\" \"$LOCAL\" \"$REMOTE\" //t"
git config --global difftool.vsdiffmerge.keepbackup false
git config --global difftool.vsdiffmerge.trustexistcode true
}
setDiffTool()
{
echo -e "${accent}Welches Diff Tool soll konfiguriert werden? [Standard: Meld]${normal}"
echo -e "${accent}1: Meld${normal}"
echo -e "${accent}2: KDiff3${normal}"
echo -e "${accent}3: Visual Studio${normal}"
read choice
case $choice in
1) setMeldDiffTool
;;
2) setKDiff3DiffTool
;;
3) setVisualStudioDiffTool
;;
*) setMeldDiffTool
esac
}
setMeldMergeTool()
{
git config --global merge.tool meld
}
setKDiff3MergeTool()
{
git config --global merge.tool kdiff3
}
setVisualStudioMergeTool()
{
git config --global merge.tool "vsdiffmerge"
git config --global mergetool.prompt true
git config --global mergetool.vsdiffmerge.cmd "\"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\vsdiffmerge.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\" //m"
git config --global mergetool.vsdiffmerge.keepbackup false
git config --global mergetool.vsdiffmerge.trustexistcode true
}
setMergeTool()
{
echo -e "${accent}Welches Merge Tool soll konfiguriert werden? [Standard: KDiff3]${normal}"
echo -e "${accent}1: Meld${normal}"
echo -e "${accent}2: KDiff3${normal}"
echo -e "${accent}3: Visual Studio${normal}"
read choice
case $choice in
1) setMeldMergeTool
;;
2) setKDiff3MergeTool
;;
3) setVisualStudioMergeTool
;;
*) setMeldMergeTool
esac
}
setGeneralGitConfig()
{
echo -e "${accent}Setze allgemeine Git Konfiguration${normal}"
git config --global push.default simple
git config --global fetch.prune true
git config --global url."https://".insteadOf git://
git config --global pull.rebase true
git config --global mergetool.keepBackup false
# Disable git's own logic for displaying umlauts and using the bash logic
# So german umlauts are displayed correctly with this configuration
git config --global core.quotepath false
git config --global color.status always
}
setBashAliase()
{
if [ ! -f ~/.bashrc ]
then
touch ~/.bashrc
fi
if ! grep -q "~/.cpx_aliases" ~/.bashrc
then
echo "if [ -f ~/.cpx_aliases ]; then . ~/.cpx_aliases; fi" >> ~/.bashrc;
fi
rm -f ~/.cpx_aliases
echo -e "${accent}Setze Bash Aliase${normal}"
echo "#!/bin/bash" > ~/.search-in-files.sh
echo "pattern=\"*\"" >> ~/.search-in-files.sh
echo "[[ ! -z \$2 ]] && pattern=\"\$2\"" >> ~/.search-in-files.sh
echo "echo -e \"Searching for ${accent}\\\"\$1\\\"${normal} in current directory matching files ${accent}\\\"\$pattern\\\"${normal}\"" >> ~/.search-in-files.sh
echo "find . -type f -name \"\$pattern\" -print0 | xargs -I {} -0 grep -H --color \"\$1\" \"{}\"" >> ~/.search-in-files.sh
echo "#!/bin/bash" > ~/.git-status-all.sh
echo "dir=\${1-.}" >> ~/.git-status-all.sh
echo "find \$dir -maxdepth 1 -mindepth 0 -type d -exec sh -c \"test -d \\\"{}/.git\\\" && (echo \\\"--------------------------------\\\" && echo \\\"{}\\\" && cd \\\"{}\\\" && git status -sb && echo && echo \\\"Branches:\\\" && git branch -vv --color && echo && echo)\" \\; | less -R" >> ~/.git-status-all.sh
echo "#!/bin/bash" > ~/.git-fetch-merge.sh
echo "git fetch" >> ~/.git-fetch-merge.sh
echo "currentBranch=\$(git symbolic-ref HEAD)" >> ~/.git-fetch-merge.sh
echo "for branch in \$(git for-each-ref --format='%(refname)' refs/heads/); do" >> ~/.git-fetch-merge.sh
echo "if [ \$currentBranch != \$branch ]" >> ~/.git-fetch-merge.sh
echo "then" >> ~/.git-fetch-merge.sh
echo "git fetch origin +\$branch:\$branch" >> ~/.git-fetch-merge.sh
echo "fi" >> ~/.git-fetch-merge.sh
echo "done" >> ~/.git-fetch-merge.sh
echo "git fetch origin \$currentBranch" >> ~/.git-fetch-merge.sh
echo "git merge --ff-only" >> ~/.git-fetch-merge.sh
echo "alias g='git '" >> ~/.cpx_aliases
echo "alias gsa='~/.git-status-all.sh'" >> ~/.cpx_aliases
echo "alias sif='~/.search-in-files.sh'" >> ~/.cpx_aliases
echo "alias gs='git status -sb '" >> ~/.cpx_aliases
echo "alias gdt='git difftool -dir--diff '" >> ~/.cpx_aliases
echo "alias gdts='git difftool -dir--diff --staged '" >> ~/.cpx_aliases
echo "alias gd='git diff --word-diff '" >> ~/.cpx_aliases
echo "alias gds='git diff --staged --word-diff '" >> ~/.cpx_aliases
echo "alias gl='git -c core.pager=\"less -SRF\" log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" '" >> ~/.cpx_aliases
echo "alias gls='git -c core.pager=\"less -SRF\" log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" -10 '" >> ~/.cpx_aliases
echo "alias glm='git -c core.pager=\"less -SRF\" log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" --merges '" >> ~/.cpx_aliases
echo "alias gr='git reset '" >> ~/.cpx_aliases
echo "alias grh='git reset --hard '" >> ~/.cpx_aliases
echo "ga() { git add \"./*\$1*\"; }" >> ~/.cpx_aliases
echo "alias gap='git add --patch '" >> ~/.cpx_aliases
echo "alias gcm='git commit -m '" >> ~/.cpx_aliases
echo "alias gcma='git commit --amend '" >> ~/.cpx_aliases
echo "alias gc='git checkout '" >> ~/.cpx_aliases
echo "alias gp='git push '" >> ~/.cpx_aliases
echo "alias gpt='git push --tags '" >> ~/.cpx_aliases
echo "alias gb='git branch '" >> ~/.cpx_aliases
echo "alias gf='git fetch '" >> ~/.cpx_aliases
echo "alias gm='git merge '" >> ~/.cpx_aliases
echo "alias gmff='git merge --ff-only '" >> ~/.cpx_aliases
echo "alias gmr='git merge --no-ff '" >> ~/.cpx_aliases
echo "alias gmt='git mergetool '" >> ~/.cpx_aliases
echo "alias grb='git rebase '" >> ~/.cpx_aliases
echo "alias grbc='git rebase --continue '" >> ~/.cpx_aliases
echo "gacm() { git add --all; git commit -m \"\$1\"; }" >> ~/.cpx_aliases
echo "gacmp() { git add --all; git commit -m \"\$1\"; git push; }" >> ~/.cpx_aliases
echo "gundo() { git reset --hard \$1; git clean -df \$1; }" >> ~/.cpx_aliases
echo "gfrb() { git fetch && git rebase; }" >> ~/.cpx_aliases
echo "alias gsw='git show --word-diff --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %B%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" '" >> ~/.cpx_aliases
echo "alias gswn='git show --word-diff --name-status --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" '" >> ~/.cpx_aliases
echo "alias gcl='git clean -xdf '" >> ~/.cpx_aliases
echo "alias gcln='git clean -xdfn '" >> ~/.cpx_aliases
echo "alias gst='git stash '" >> ~/.cpx_aliases
echo "alias gstp='git stash pop '" >> ~/.cpx_aliases
echo "__git_complete g _git" >> ~/.cpx_aliases
echo "__git_complete gdt _git_difftool" >> ~/.cpx_aliases
echo "__git_complete gdts _git_difftool" >> ~/.cpx_aliases
echo "__git_complete gd _git_diff" >> ~/.cpx_aliases
echo "__git_complete gds _git_diff" >> ~/.cpx_aliases
echo "__git_complete gr _git_reset" >> ~/.cpx_aliases
echo "__git_complete grh _git_reset" >> ~/.cpx_aliases
echo "__git_complete ga _git_add" >> ~/.cpx_aliases
echo "__git_complete gap _git_add" >> ~/.cpx_aliases
echo "__git_complete gcm _git_commit" >> ~/.cpx_aliases
echo "__git_complete gcma _git_commit" >> ~/.cpx_aliases
echo "__git_complete gc _git_checkout" >> ~/.cpx_aliases
echo "__git_complete gb _git_branch" >> ~/.cpx_aliases
echo "__git_complete gf _git_fetch" >> ~/.cpx_aliases
echo "__git_complete gm _git_merge" >> ~/.cpx_aliases
echo "__git_complete gmff _git_merge" >> ~/.cpx_aliases
echo "__git_complete gmr _git_merge" >> ~/.cpx_aliases
echo "__git_complete gmt _git_merge" >> ~/.cpx_aliases
echo "__git_complete grb _git_rebase" >> ~/.cpx_aliases
echo "__git_complete grbc _git_rebase" >> ~/.cpx_aliases
}
setGitAliase()
{
echo -e "${accent}Setze Git Aliase${normal}"
git config --global alias.s "status -sb"
git config --global alias.si "status -sb --ignored"
git config --global alias.dt "difftool --dir-diff"
git config --global alias.dts "difftool --dir-diff --staged"
git config --global alias.d "!f() { git diff --word-diff \"./*\$1*\"; }; f"
git config --global alias.ds "!f() { git diff --staged --word-diff \"./*\$1*\"; }; f"
git config --global alias.l "-c core.pager='less -SRF' log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\""
git config --global alias.lm "-c core.pager='less -SRF' log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" --merges"
git config --global alias.ln "-c core.pager='less -SRF' log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" --name-status"
git config --global alias.ld "-c core.pager='less -SRF' log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" --date-order"
git config --global alias.lp "-c core.pager='less -SRF' log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" -p"
git config --global alias.ls "-c core.pager='less -SRF' log --graph --all --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\" --simplify-by-decoration"
git config --global alias.r "!f() { git reset -- \"./*\$1*\"; }; f"
git config --global alias.rh "reset --hard"
git config --global alias.rs "reset --soft"
git config --global alias.a "!f() { git add \"./*\$1*\"; }; f"
git config --global alias.ap "!f() { git add --patch \"./*\$1*\"; }; f"
git config --global alias.cm "commit -m"
git config --global alias.cma "commit --amend"
git config --global alias.acm "!f() { git add --all && git commit -m \"\$1\"; }; f"
git config --global alias.acmp "!f() { git add --all && git commit -m \"\$1\" && git push; }; f"
git config --global alias.p "push"
git config --global alias.pt "push --tags"
git config --global alias.c "checkout"
git config --global alias.b "branch"
git config --global alias.bd "branch -d"
git config --global alias.ba "branch -a"
git config --global alias.bnm "branch --no-merged"
git config --global alias.f "fetch"
git config --global alias.fm "!f() { . ~/.git-fetch-merge.sh; }; f"
git config --global alias.m "merge"
git config --global alias.ma "merge --abort"
git config --global alias.mff "merge --ff-only"
git config --global alias.mr "merge --no-ff"
git config --global alias.mt "mergetool"
git config --global alias.rb "rebase"
git config --global alias.rbc "rebase --continue"
git config --global alias.rba "rebase --abort"
git config --global alias.undo "!f() { git reset --hard \$1 && git clean -df \$1; }; f"
git config --global alias.frb "!f() { git fetch && git rebase; }; f"
git config --global alias.dummy "commit --allow-empty -m 'dummy commit, contains no change'"
git config --global alias.sw "show --word-diff --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %B%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\""
git config --global alias.swn "show --word-diff --name-status --format=\"%C(yellow)%h%C(reset) - %C(cyan)(%ar)%C(reset) %s%C(reset) %C(dim white)- %an%C(reset)%C(auto)%d%Creset\""
git config --global alias.cl "clean -xdf"
git config --global alias.cln "clean -xdfn"
git config --global alias.st "stash"
git config --global alias.stp "stash pop"
git config --global alias.t "tag"
git config --global alias.td "tag -d"
git config --global alias.tl "tag --list"
git config --global alias.tlr "!f() { git show-ref --tags | sed 's?.*refs/tags/??'; }; f"
git config --global alias.upgrade "!bash -c 'source <(curl -s https://raw.githubusercontent.com/cpx-appdev/git-init/master/setup.sh) -u'"
}
setProMode $1
setUpdateOnly $1
if ! $updateOnly
then
setConfig "Benutzernamen setzen?" setUsername user.name
setConfig "E-Mail Adresse setzen?" setEmail user.email
setConfig "Setze Diff Tool?" setDiffTool diff.tool
setConfig "Setze Merge Tool?" setMergeTool merge.tool
fi
setConfig "Allgemeine Git Konfiguration setzen?" setGeneralGitConfig
setConfig "Bash Aliase setzen?" setBashAliase
setConfig "Git Aliase setzen?" setGitAliase
echo -e "${success}Installation abgeschlossen${normal}"