2016-12-18 1 views
0

通常、gitリポジトリを探すときには.gitディレクトリを探しますが、それは必ずしも機能しません。サブモジュール作業ツリーには.gitファイルがあり、サブモジュールは常にチェックアウトされているわけではなく、サブモジュールリポジトリ(および裸のリポジトリ)はどこにでも置くことができます。裸のリポジトリを含め、すべてのgitリポジトリを見つけるにはどうしたらいいですか?

私は、githubからクローン化されたすべてのリポジトリを探していますが、すべてのリポジトリを十分に見つけ出したいと思います。これを行うためのコマンドやオンライナーはありますか?

+0

ある場合github URLが必要ですか?または、ローカルディスク上のパスを探していますか?もしそうなら、メタデータディレクトリまたはソースディレクトリが必要ですか? – Guildencrantz

+0

@Guildencrantz私はすべてのリポジトリで 'git config remote.origin.url'を実行したいと言っています。コマンドを実行するのは難しくありません。 – jthill

答えて

1

最小限のgitリポジトリは2つのファイルHEADconfig、および2つの ディレクトリ、objectsrefsが含まれています。

findには、これらの基準を満たすディレクトリがあります。 HEADはかなり珍しい名前である、のは、そのために見てみましょう:

# find all repositories 
find -name HEAD -execdir \ 
    [ -d refs -a -d objects -a -f config ] \; \ 
    -printf %h\\n # or if your `find` doesn't have `-printf`, just `-print` 

を行います。これにより、ワークツリーではなくリポジトリが検索されます。 worktreesを見つけるために、 は.gitを見つけることは、あなたが `私が言うのgithub`からクローン化されたすべてのリポジトリを見つけたいとはどういう意味ですか?まだ

find -name .git 

最良の方法であるか、末尾の.gitは迷惑

find -name .git -printf %h\\n 
+1

これは 'find 'に' -execdir'と '-printf'の両方が必要であることに注意してください。前者はかなり標準的なようですが、少なくともMacOSとFreeBSDシステムでは '-printf'がまだ欠けています。 '$ PATH'から' .'を削除したり、 '$ PATH'に' .'がある場合に '-execdir'を許可しないことを拒否します。それはおそらく良いです。 :-)(私は '.'を私のパスに入れません) – torek

+0

Yow。 'PATH'に' .'をつけて走っている人の無邪気さを笑顔にしてください...ノートのおかげで、私は '-printf'ノートを折り返しました。 – jthill

関連する問題