自分のgit alias晒す(20/08/14)

##記事を書いた目的

- 毎回行うaliasの設定手順の備忘録
- .fileで管理できるみたいだけど設定できなかったので毎回コピペしている（反省）


### 早速.gitconfigをいじってみる
下記コマンドを実施する

```
git config -e
```


## 解決策1 - set pasteでペースト前入力し、ペーストするときのズレを防ぐ。

```
:set paste

# こんな表示になる
-- INSERT (paste) --
```

モードを元に戻したい時はこれ。

```
:set nopaste
```

```
:set paste!
```
を使えば、履歴で再度 ```:set paste!``` を打てば  元のモードに戻れる。簡単！

### alias

```

[core]
         repositoryformatversion = 0
         filemode = false
         bare = false
         logallrefupdates = true
         symlinks = false
         ignorecase = true
         autocrlf = false

[color]
         status = auto
         diff = auto
         branch = auto
         interactive = auto
         grep = auto

[alias]
         f = fetch -p
         c = commit -m
         ca = commit --amend -m
         a = add
         m = merge
         b = branch
         l = log
         cl = clean
         st = status
         sh = show
         mg = merge
         al = config --get-regexp alias.*

         # branch関連
         sw = switch
         br = branch
         ba = branch -a           # originも含めた全てのbranchを表示
         bm = branch --merged     # merge済みのbranchを表示
         bn = branch --no-merged  # mergeしてないbranchを表示
         co = checkout
         cob = checkout -b

         # stash関連
         sl = stash list
         sa = stash apply

         # log関連
         wc = whatchanged         # logに変更されたファイルも一緒に出す
         ls = log --stat          # logに変更されたファイルも一緒に出す
         untracked = ls-files --others --exclude-standard   #管理対象外のファイルのみ表示
         lp = log -p              # diffも一緒に出す
         la = log --pretty=\"format:%ad %h (%an): %s\" --date=short  # ざっくりログ出す
         lr = log origin          # originのlog
         lm = log --merges
         lo = log --oneline
         lc = log --no-merges
         oneline = log --pretty=oneline
         ranking = shortlog -s -n --no-merges
         # logをtree表示
         lg = log --graph --date=short --pretty=format:'%Cgreen%h %cd %Cblue%cn %Creset%s'
         tree = log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'
         # diff関連
         dn = diff --name-only      # name-only
         dm = diff master           # masterとのdiff
         dd = diff develop          # developとのdiff
         dw = diff --color-words    # 単語単位でいろつけてdiff
         dc = diff --cached         # addされているものとのdiff
         ds = diff --staged         # 同上(1.6.1移行)
         d1 = diff HEAD~            # HEADから1つ前とdiff
         d2 = diff HEAD~~           # HEADから2つ前とdiff
         d3 = diff HEAD~~~          # HEADから3つ前とdiff
         d4 = diff HEAD~~~~         # HEADから4つ前とdiff
         d5 = diff HEAD~~~~~        # HEADから5つ前とdiff
         d10 = diff HEAD~~~~~~~~~~  # HEADから10前とdiff
         dfm = diff --diff-filter=M
         dfm1 = diff HEAD~ --diff-filter=M
         dfa = diff --diff-filter=A
         dfa1 = diff HEAD~ --diff-filter=A
         dfc = diff --diff-filter=C
         dfc1 = diff HEAD~ --diff-filter=C
         dfd = diff --diff-filter=D
         dfd1 = diff HEAD~ --diff-filter=D
         dfr = diff --diff-filter=R
         dfr1 = diff HEAD~ --diff-filter=R

         # mergeの際にconflictが起きたファイルを編集
         edit-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; vim `f`"

         # mergeの際にconflictが起きたファイルをadd
         add-unmerged = "!f() { git ls-files --unmerged | cut -f2 | sort -u ; }; git add `f`"

         # grep関連
         gr = grep
         gn = grep -n
         grf = grep -F
         # gc
         gcn = gc --prune=now
```

### 設定したaliasを確認したいときの設定

```unix:.gitconfig
git config --global alias.al "config --get-regexp alias.*"
#エイリアスの一覧を確認する。又は
vi ~/.gitconfig
で確認する。
```

$ source ~/.bashrc で先ほどの変更を有効にする


### 他

```:bash_profile
# terraform
alias t='terraform'
alias ta='terraform apply'
alias taa='terraform apply -auto-approve'
alias tp='terraform plan'
alias tf='terraform fmt -diff'
alias tv='terraform validate'
alias td='terraform destroy'
```

### pre-commitの作成方法

```bash
# レポジトリ直下に .githooks というディレクトリを作る。
$ mkdir .githooks
$ cd .githooks
$ touch pre-commit

#  .githooks/pre-push ファイルを読み込むようにlinuxコマンドを打つ。
$ git config core.hooksPath .githooks

# ファイルに実行権限を与える
$ chmod a+x pre-commit
```

```:pre-commit
terraform fmt -diff
tflint

# 未削除、ステージング済、変更されたファイル名のみ
for FILE in `git diff --diff-filter=d --staged --name-only`; do
  git add $FILE
done
```

###読んでいただきありがとうございます！（コメントお待ちしております。）