Gitのすべてのリビジョンのすべてのファイルをリストする方法(Mercurialのhg manifest --allなど)?


10

Mercurialには、リポジトリがすべてのリビジョンに対して持っているすべてのファイルをリストするコマンドがあります。

hg manifest --all

Gitに同等のコマンドはありますか?


git log --statのようなもの?
jmreicha

4
git ls-files
NN

好奇心旺盛ですが、どんな理由でこれが必要ですか?
スティーブンジェニングス

@StephenJennings:バージョン管理下にあるファイルの種類を知るには、精神的に「ls -Rマイナス.gitignore」を行うよりも良い方法です。一般的に有用性:何が起こっているのかは多かれ少なかれ知っているかもしれませんが、リポジトリの内省は、人が知っている確信を与えます。特に初心者のユーザーにとって、このような自信は、プログラムの使いやすさに大きな違いをもたらします。Gitはユーザーを安心させることを優先事項とはしていません。そのため、多くの人が理解するまで理解することはできません。
Esteis 2012

回答:


3

私はシェルスクリプトが本当にひどいので、これは間違いなく次善の策ですが、bashを使用しているとすれば、このようなことでうまくいくかもしれません。うまくいけば、他の誰かがやって来て、それを片付けたり、より良いものと交換したりできます。私はMacでのみテストしたので、注意してください。

現在のHEADの祖先であるコミットですべてのファイルを印刷する必要があります。ファイルに保存しmanifest.sh、あなたのパス内のどこかに:

#!/bin/bash

TFILE=$(mktemp -t git-manifest)

for sha in $(git log --pretty=format:%H)
do
    git ls-tree --name-only --full-tree -r $sha >> $TFILE
done

sort -u $TFILE
rm $TFILE

1
する必要はありませんexport、それは子プロセスで利用できるようにする必要がないので。ループがSHAハッシュを超えている場合、ループは正常に機能します。それ以外の場合readは、変数を使用して引用する方が適切です。何をsortする-uオプションがありますuniqrm途中でキャンセルしてもファイルはdになりません。そのためにはaが必要trapですが、このスクリプトではおそらくそれは過剰です。
ダニエルベック

@DanielBeck:ありがとう、少し更新しました。mktempGit Bashには存在しません。Windowsでも再生できるように、これに対処する方法を見つけなければなりません。
スティーブンジェニングス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.