2010-05-05 4 views
2

В настоящее время я пишу небольшую функцию zsh, которая проверяет все мои репозитории git, чтобы увидеть, загрязнены они или нет, а затем распечатывает те, которые требуют фиксации. До сих пор я понял, что самый быстрый способ выяснить, чистый/грязный статус репозитория Git является через git-diff и git-ls-files:git-diff в другом каталоге

if ! git diff --quiet || git ls-files --others --exclude-standard; then 
    state=":dirty" 
fi 

У меня есть два вопроса для вас людей:

  1. DoES кто-нибудь знает более быстрый и эффективный способ проверки изменений/дополнений файлов в git-репо?
  2. Я хочу, чтобы моя функция zsh передавалась путь к файлу (скажем ~/Code/git-repos/) и проверяла все репозитории. Есть ли способ обойтись без использования cd в каждом каталоге и запускать эти команды? Нечто вроде git-diff --quiet --git-dir="~/Code/git-repos/..." было бы фантастическим.

Спасибо! :)

+0

Будет http://stackoverflow.com/questions/2657935/checking-for-a-dirty-index-or-untracked-files-with-git help? – VonC

+0

@ VonC - это отлично выглядит. Я надеялся, что мне не придется использовать git-status, так как он немного тяжелее, но он позволяет мне указывать «удаленные» каталоги git для просмотра, это может быть мой единственный выбор. – ABach

ответ

3

Если $DIR держит ваше имя каталога, и это стандартная раскладка (т.е. .git реж является $DIR/.git), то git --git-dir $DIR/.git --work-tree $DIR status -s -uno будут перечислены все файлы, которые имеют неподтвержденные изменения. Проверка наличия пустого списка даст вам то, что вы хотите.

+0

Выполнение этой команды дает «фатальный: недействительный режим отсутствия следов» = нет. » Страница man указывает «нет» как действительный параметр для -u, но это дает аналогичную ошибку. – ABach

+0

Вы правы, извините, синтаксис был слегка выключен. Используйте -uno вместо -u = none – Oblomov

+0

(я исправил сообщение соответственно) – Oblomov

Смежные вопросы