7
6

More than 5 years have passed since last update.

gitのサブコマンドで.gitディレクトリのあるパスまで戻りたかったけど無理だった話

Last updated at Posted at 2016-04-21

背景

ただ、弊社であったり自分でAnsible書くときはだいたいGit管理するので、そのルートに移動できればいいんじゃないかと思いました。

試作

~/.gitconfig[alias] にはだいたいこんな感じで内容を書くと思います。

.gitconfig
[alias]
    co = checkout
    ci = commit
    st = status
    br = branch

実はここで、こういう風に書くとシェルスクリプトの内容が実行できます。

.gitconfig
[alias]
        echo = "!echo 'hello world'"

これを使って、cdさせればいいんじゃないかと思った次第です。

設定案

いずれも、git top と打ったときにgitconfigのあるディレクトリへカレントを移動させることを想定しています。

結果的にいうと、いずれもだめでした。

設定案1

.gitconfig
  top = "!f() { export TOPDIR=$(git rev-parse --show-toplevel); }; f; cd ${TOPDIR};"

設定案2

.gitconfig
  top = "!f() { TOPDIR=$(git rev-parse --show-toplevel);  cd ${TOPDIR};}; f"

設定案3

PATHの通ったディレクトリに以下のファイルを置く。実行権限もつけておく。

git-top
cd $(git rev-parse --show-toplevel)

理由の考察

どうやら、サブシェルで実行されているようです。

コマンド発行→サブシェルに潜る→サブシェル内でカレント移動→元のシェルに戻る(元のカレントのまま)

緩和策

.bashrcに以下の内容を記載して、 source ~/.bashrc

.bashrc
alias gitroot='cd `(git rev-parse --show-toplevel)`'

他にもやり方はいろいろあると思いますが、一番手を抜いた方法ですね。
関数作ったりでも良いと思います。

まとめ

残念でした。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6