2009-06-07 4 views
14

内のすべてのコミットされていない地元のレポを探しますコミットされていない変更があるフォルダどうやってやるの?一種の再帰的なグローバルgit statusのようなものです。gitの:/私は私のファイルシステム上のどこかのローカルのgitリポジトリの束(10-15)を持っていますが、フォルダ内の/データ/</p> <p>すべては私がすべて検索するディレクトリツリー

すべての回答が間違っていると思います。すべてのgitコマンドは、git制御下にあるフォルダ内でのみ動作します。私はそのようなフォルダを検索する何かが必要です。


#!/usr/bin/env ruby 
require 'find' 
require 'fileutils' 

#supply directory to search in as argument 

@pat = ARGV[0] 
(puts "directory argument required"; exit) unless @pat 
Dir.chdir(@pat) 
Find.find(@pat) do |path| 
    if FileTest.directory?(path) 
    Dir.chdir(path) 
    resp = `git status 2>&1` 
    unless resp =~ /fatal|nothing to commit \(working directory clean\)/i 
     puts "#{'#'*10}\n#{Dir.pwd}#{'#'*10}\n#{resp}" 
     Find.prune 
    end 

    Dir.chdir(@pat) 
    end 
end 
 

答えて

6

これらの線に沿って何かを:

はので、代わりに私がこれを行い、このスクリプトを書きましたか?あなたはすべての変更やファイルの削除(--exclude-standardは、おそらくそこに必要とされていませんが、念のためにあなたはすべての未知のファイルを一覧表示したいを一覧表示する「git ls-files --modified --deleted --exclude-標準」を使用することができます

 
$ for i in /data/*/; do (cd $i && (echo $i; git status)); done 
$ for i in /data/*/; do (cd $i \ 
> && (git status | grep -qx 'nothing to commit (working directory clean)' \ 
> || (echo $i && git status))); done 
+0

ために仕事をするのgit-ステータスを使用しないでくださいと思います。代わりに、git-ls-filesとgit-diff/git-diff-filesを使用してください。 –

+0

git-statusの何が問題なのですか? – Bombe

+4

git-statusは磁器と呼ばれており、ユーザ向けであり、スクリプトではありません。その出力は予告なしに変更されることがあります。 –

0

それらは無視されません​​...)。このコマンドの出力が空であるかどうかを確認できます。

"git commit -a"が何かを拾っているかどうかをチェックする場合は、 "git diff --quiet HEAD"の終了ステータスを確認するか、または "git diff -cached --quiet HEAD" "git commit"が何か(またはその配管系の親戚の一つ:git-diff-filesまたはgit-diff-index)を選ぶかどうかチェックしたい。

0
for rp in /srv/*/ 
do 
    printf '\ec' 
    cd "$rp" 
    git status 
    echo "${rp%/}" 
    read 
done 

Example

4

私は、このようにI(も)これを実行するスクリプトを作成し、gitのはこれがで構築しているとは思わない:https://github.com/mnagel/clustergit

ここに掲載スニペットに問題が彼らということですgit statusの出力形式が変更されたときに中断します。私のスクリプトは同じ問題を抱えています(基本的に同じ方法で動作します)。しかし、少なくともあなたは常に最新のバージョンを取得します。 enter image description here

+0

私はこのスクリプトが好きです! – ben

0

これは、書式設定のために非常に派手ではないですが

find . -iname ".git" -type d | sed -rne "s|(.+)/\.git|echo \1;cd \1;git status;cd /data|p" | bash 
10

のような何かについてfindコマンドは、いくつかのシェル魔法と一緒に、あなたの友達ですか。

find . -type d -name '.git' | while read dir ; do sh -c "cd $dir/../ && echo -e \"\nGIT STATUS IN ${dir//\.git/}\" && git status -s" ; done 

から:https://gist.github.com/tafkey/664266c00387c98631b3

+2

そのコマンドが何をしているのか説明しておけば助かります。 –