LoginSignup
49
46

More than 5 years have passed since last update.

Git tips: ローカルリポジトリのルートやカレントディレクトリとの相対パスを取得する&その応用

Last updated at Posted at 2014-05-27

あらまし

Gitリポジトリのワーキングツリーのルートディレクトリや、カレントディレクトリとの相対パスが取得できると、リポジトリ全体に対する処理が楽にかけて便利です。

gitにはその機能が備わっていますので、それを使ってみました。

おことわり

Git 1.9で確認しています。
マニュアル見た限りでは大丈夫そうですが、ちょっと古いバージョンでは動作しない、または挙動が異なる場合があります。

時間のない人用まとめ

$ # Prepare
$ pwd
/home/myname
$ git init foo-repo
/home/myname/foo-repo/.git/
$ cd foo-repo/
$ mkdir -p bar/baz/
$ touch bar/baz/.gitkeep
$ git add bar/baz/.gitkeep 
$ git commit -m "Initial commit"
$ # Example
$ pwd
/home/myname/foo-repo/bar/baz
$ git rev-parse --show-toplevel
/home/myname/foo-repo
$ git rev-parse --git-dir # 常に絶対パスを返すとは限らない
/home/myname/foo-repo/.git
$ git rev-parse --show-cdup
../../
$ git rev-parse --show-prefix
bar/baz/

時間のある人用

/home/myname/foo-repoがワーキングツリーのルートディレクトリです。

ワーキングツリーのルートの絶対パスを表示する
git rev-parse --show-toplevel

$ pwd
/home/myname/foo-repo/bar/baz
$ git rev-parse --show-toplevel
/home/myname/foo-repo

カレントディレクトリから.git へのパスを表示する
git rev-parse --git-dir

このコマンドは少しややこしい振る舞いをします。

カレントディレクトリがワーキングツリーのルートであるとき、相対パスを返します。
つまり、.gitです。

$ pwd
/home/myname/foo-repo/
$ git rev-parse --git-dir
.git

カレントディレクトリがワーキングツリーのサブディレクトリであるとき、絶対パスを返します。

$ pwd
/home/myname/foo-repo/bar/baz
$ git rev-parse --git-dir
/home/myname/foo-repo/.git

カレントディレクトリからのワーキングツリーのルートへの相対パスを表示する
git rev-parse --show-cdup

ルート への 相対パスを表示します。

$ pwd
/home/myname/foo-repo/bar/baz
$ git rev-parse --show-cdup
../../

cd $(git rev-parse --show-cdup) で、ワーキングツリーのルートへ移動します。

ワーキングツリーのルートからカレントディレクトリの相対パスを表示する
git rev-parse --show-prefix

ルート からの 相対パスを表示します。

$ pwd
/home/myname/foo-repo/bar/baz
$ git rev-parse --show-prefix
bar/baz/

ルートへの絶対パスを組み合わせると、カレントディレクトリになります。
つまり、pwdecho $(git rev-parse --show-toplevel)/$(git rev-parse --show-prefix) は等しくなります。

ワーキングツリーの外で実行した場合

いずれも、ワーキングツリーの外で実行するとエラーメッセージを発して0以外の戻り値を返します。

$ git rev-parse --git-dir
fatal: Not a git repository (or any of the parent directories): .git
$ echo $?
128

応用

ワーキングツリーに含まれる.gitignoreを列挙する。

$ find $(git rev-parse --show-cdup) -type f -name .gitignore

参考

49
46
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
49
46