gitを便利にしよう　めも

備忘録としていろんな記事を参考に
設定したものを記載していきます

## gitconfigの読み込み順
[参考](https://qiita.com/cointoss1973/items/40ecabe1db24aa4b5cde)
#### Linux or Mac
```
/etc/gitconfig
~/.gitconfig か ~/.config/git/config
.git/config (リポジトリ内)
```

## gitconfigの外部読込

[参考](https://qiita.com/knt45/items/51b8a8645f36fb0a6d01)

```~/.gitconfig
[include]
    path = .gitconfig.local
```

```~/.gitconfig.local
[user]
    name = xxx xxx
    email = xxx@xxx
```

## git監視から除外したいファイルを定義

プロジェクトで個別のものなら`[プロジェクト]/.gitignore` に書けばよい・・・が
vimなどの管理にて発生するようなもの（tagsなど）を除くために全体で除くよう定義したい。

かつ、`$HOME/.gitignore`となると、dotfilesの管理で設定しなければいけないシンボリックリンクを増やすこととなる・・・

ということで
.gitconfigのなかに書こう！！と思い下記でやってみた

```.gitconfig
[core]
  excludefiles = $XDG_CONFIG_HOME/.gitignore.global
```

とすると$XDG_CONFIG_HOMEを正しく読み取ってくれない・・・・
いろいろ{}付けてみたり試したが、どれも上手くいかなかった。

調べてみるとデフォルトで`$XDG_CONFIG_HOME/git/ignore`を読むようになっているとのこと

nvimの管理が$XDG_CONFIG_HOMEで行うためdotfilesの管理的にもいい！！解決！！

## push時のユーザー名の省略

[参考](https://qiita.com/azusanakano/items/8dc1d7e384b00239d4d9)

パスワードはセキュリティ的にもやりたくない・・・ので
ユーザー名のみ記載しておきます

{cloneしたリポジトリDir}/.git/configを編集

`github.com`の前に`username@`を追加する

before

```
[remote "origin"]
  url = https://github.com/rytkmt/dotfiles.git
```

after

```
[remote "origin"]
  url = https://rytkmt@github.com/rytkmt/dotfiles.git
```

## カラー表示

それぞれ色を付けて表示させる

```:.gitconfig
[color]
  diff = auto
  status = auto
  branch = auto
```

## logのグラフ表示

[参考1](https://qiita.com/qurage/items/daa67763e5a0090af06a)
[参考2](https://qiita.com/harukasan/items/9149542584385e8dea75)

```
[alias]
    ll = log --graph --date=format:'%y/%m/%d %H:%M:%S' --pretty=format:'\t\b\b\b%C(yellow)%h%Creset %C(cyan)%ad%Creset %C(green)%an%Creset%C(auto)%d%Creset%n\t%C(white bold)%w(80)%s%n%Creset%w(80,2,2)%b'
```
![image.png](https://qiita-image-store.s3.amazonaws.com/0/219776/5c6f9b9d-15f5-fd57-2933-0933bbc063eb.png)

## gitの補完

[参考](https://qiita.com/growsic/items/1fff6286061e0cd27d54)

```
sudo find / -name git-completion.bash
```

見つかったものを.bashrcに記載

```:.bashrc
# gitの補完
source /usr/share/doc/git2u-core-doc-2.16.5/contrib/completion/git-completion.bash
```

## gitのブランチ名をプロンプトに表示

[参考1](https://qiita.com/hmmrjn/items/60d2a64c9e5bf7c0fe60)
[参考2](http://code.i-harness.com/ja-jp/q/f25c98)

PS1に `\$(parse_git_branch)` を入れればok

```sh
function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

function prompt {
    # 色は気分で変えたいかもしれないので変す宣言しておく
    local  LIGHT_BLUE="\[\e[36m\]"
    local  PURPLE="\[\e[95m\]"
    local  WHITE="\[\e[0m\]"
    export PS1="${LIGHT_BLUE}\w [\u]${PURPLE}\$(parse_git_branch)${WHITE} \$ "
}
prompt
```

![prompt_git.PNG](https://qiita-image-store.s3.amazonaws.com/0/219776/b0bb0e10-84db-48e6-09b5-a04ba1adffa0.png)

## WARNING: terminal is not fully functional を解消する

`TERM`という環境変数に入っている値が適していないことが原因っぽい
/usr/share/terminfo/{TERMの頭文字}/
にTERMに設定されているファイルがないとエラーとなる？よう

合わせれば解消しました
xterm-256colorなのにxterm-color256って設定してた・・・しょうもないミス

## 文字化け対策

```
[core]
  quotepath = false
```


## エイリアス公開

私の設定しているエイリアスを公開しておきます
他にもいいのがあれば教えてください

```
[alias]
  sn = "!f() { \
    if [ $# -ne 1 ];\
    then \
      echo 'required comment message by first args';\
    else \
      git add -A; \
      git commit -m \"$1\"; \
    fi; \
  }; f"
  h = help
  st = status -sb
  cm = commit -m
  amm = commit --amend -m
  amc = commit --amend --no-edit
  co = checkout
  aa = add -A
  b = branch
  ba = branch -a -vv
  bd = !git branch --merged | grep -v \\* | xargs -I % git branch -d %
  fe = fetch -p
  mf = merge FETCH_HEAD
  mod = merge origin/develop -m "behind解消"
  mom = merge origin/master -m "behind解消"
  d = diff
  ds = diff --name-status
  di = diff --cached
  l = log --oneline --no-merges -n 18
  la = log --oneline -n 18
  ls = log --oneline --no-merges -n 18 --name-status
  lsa = log --oneline -n 18 --name-status
  lsr = log --oneline --no-merges -n 18 --name-status --author='r_tsukamoto' origin/develop..HEAD
  lsra = log --oneline -n 18 --name-status --author='r_tsukamoto' origin/develop..HEAD
  ll = log --graph --date=format:'%y/%m/%d %H:%M:%S' --pretty=format:'\t\b\b\b%C(yellow)%h%Creset %C(cyan)%ad%Creset %C(green)%an%Creset%C(auto)%d%Creset%n\t%C(white bold)%w(80)%s%n%Creset%w(80,2,2)%b'
  lls = log --graph --date=format:'%y/%m/%d %H:%M:%S' --pretty=format:'\t\b\b\b%C(yellow)%h%Creset %C(cyan)%ad%Creset %C(green)%an%Creset%C(auto)%d%Creset%n\t%C(white bold)%w(80)%s%n%Creset%w(80,2,2)%b' --name-status
  lll = log
  lf = log -p
  ss = stash push -u
  sss = stash show -p
  ssl = stash list --pretty='%C(yellow)%gd%Creset %gs'
  ssa = stash apply --index
  ssd = stash drop
  ssp = stash pop --index
  ssb = stash branch
  ig = rm --cached
  uncm = reset --soft
  unst = reset --mixed
  unch = reset --hard
  po = push origin
  pob = "!f() { \
    git branch --no-color 2> /dev/null | \
    sed -e '/^[^*]/d' | \
    sed -e 's/* // ' | \
    xargs -I@ git push origin @; \
  }; f"
  als = !"git config --list | grep ^alias\\. | sort | sed s/^alias\\.// | sed -e 's/=/ /' | awk '{printf \"%-10s %s\",$1,c=\"\";for(i=2;i<=NF;i++) c=c $i\" \"; print c}'"
```

alsむっちゃ便利です、エイリアス忘れたときに確認できます

![image.png](https://qiita-image-store.s3.amazonaws.com/0/219776/c6ad4831-9ff3-f56b-bb90-19f67abf6c4b.png)

まだこれからgitを使い始める　ってところなので
今後増えていくと思いますのでまた追記します