22714


git において、 staging された、 index 上のファイルに対して、その index
上でのパーミッション一覧を表示したくなりました。実行権限を正しく設定した上で add できているかどうかの確認を行いたいのが目的です。

これを実現する方法はありますか。

特に、いろいろ chmod しながら作業を行っていて (worktree 上の権限はいくつか変更されていて)、そのうち部分的に add
をした場合など、今まさに stage
されたファイルたちだけについてのパーミッションを取得したくなっているのですが、これを自明に行える方法がわからないと感じているので、質問しています。


CC BY-SA 3.0
2016-03-01T15:00:26.867
22711
2016-03-02T01:45:32.580
2016-03-01T15:09:03.297
754
754
question
git
git において、 stage されたファイルに対するパーミッション一覧を取得するには？


とりあえず `git diff --summary --cached`
はいかがでしょうか。ただし、これは新規作成またはパーミッション変更があったファイルしか表示してくれませんが。

[code]

    $ git init .
    $ touch a b c
    $ chmod +x a
    $ git add -A
    $ git diff --summary --cached
     create mode 100755 a
     create mode 100644 b
     create mode 100644 c
    $ git commit -m 'first commit'
    [master (root-commit) 151bf09] first commit
     3 files changed, 0 insertions(+), 0 deletions(-)
     create mode 100755 a
     create mode 100644 b
     create mode 100644 c
    $ chmod +x b
    $ echo c > c
    $ git add -A
    $ git diff --summary --cached
     mode change 100644 => 100755 b
    
[/code]

ステージしたファイルすべてについて情報を表示したいのであれば、無理矢理ですが次のようにすればできます。

[code]

    $ git diff --summary --cached 4b825dc642cb6eb9a060e54bf8d69288fbee4904 -- $(git diff --name-only --cached)
     create mode 100755 b
     create mode 100644 c
    
[/code]

`4b825dc642cb6eb9a060e54bf8d69288fbee4904` は空のブランチのハッシュです。これからの diff
をステージされたファイルについてのみ表示しています。

ただしこれはリポジトリのルートで実行しなければいけません。またファイル名に空白が含まれる場合はこのままではうまくいきません。


CC BY-SA 3.0
2016-03-01T20:07:17.560
22714
2016-03-01T20:07:17.560
9873
22711
answer


xargsが使えるなら、こんな感じでも取得できそうですかね。

`git diff --cached --name-only | xargs ls -l`


CC BY-SA 3.0
2016-03-02T01:45:32.580
22721
2016-03-02T01:45:32.580
9424
22711
answer