2009-06-07 186 views
14

我有本地Git倉庫某處我的文件系統的一堆(10-15)的所有未提交當地人回購,但所有的文件夾/數據/混帳:查找目錄樹

我想找到所有的/任何有未得到改變的文件夾。我怎樣才能做到這一點?有點像遞歸全局git status變種。

所有的答案錯了,我想。任何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

東西沿着這些路線?

 
$ 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。 – 2009-06-07 17:44:12

+0

git-status有什麼問題? – Bombe 2009-06-08 08:53:36

+4

git-status是所謂的瓷器,它意味着用戶,而不是腳本。其輸出可能會改變,恕不另行通知 – 2009-06-09 11:05:46

0

您可以使用「git ls-files --modified --deleted --exclude標準」列出所有修改和刪除文件(--exclude-standard沒有可能需要在那裏,但爲了以防萬一,你要列出所有未知文件不會被​​...忽略)。然後您可以檢查該命令的輸出是否爲空。

或者你可以查看「git diff --quiet HEAD」的退出狀態,如果你想檢查「git commit -a」是否會提取任何東西,或者「git diff --cached --quiet HEAD」想要檢查「git commit」是否會選擇任何東西(或其管道親屬之一:git-diff-filesgit-diff-index)。

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

Example

4

我不認爲Git有此建立,因此,我(也)創建一個腳本來做到這一點:https://github.com/mnagel/clustergit

在這裏張貼片段中的問題是,他們由於git status的輸出格式發生變化而中斷。我的腳本有同樣的問題(因爲它基本上以同樣的方式工作),但至少你總是得到最新版本。 enter image description here

+0

我喜歡這個劇本! – ben 2017-09-12 08:22:32

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