Состояние Git - есть ли способ показать изменения только в определенном каталоге? - PullRequest
127 голосов
/ 03 апреля 2009

Я хотел бы видеть список файлов, измененных с момента последнего коммита, как показывает git status, но я забочусь только о файлах, расположенных в одном каталоге. Есть ли способ сделать это? Я попробовал git status <directory>, но, похоже, это делает что-то совершенно другое (перечисляет все измененные файлы, как они были бы, если бы я сначала написал git add <directory>).

Документация для git-status мало что говорит, кроме того факта, что она принимает те же параметры, что и git-commit (но цель git-commit - не показывать списки измененных файлов).

Ответы [ 4 ]

179 голосов
/ 14 декабря 2012

Из каталога:

git status .

Вы действительно можете использовать любой путь, используйте этот синтаксис:

git status <directoryPath>

Например, для каталога с путем "my / cool / path / here"

git status my/cool/path/here
30 голосов
/ 03 апреля 2009

Причина, по которой git status принимает те же параметры, что и git commit, заключается в том, что цель git status - показать, что произойдет, если вы совершите действия с теми же параметрами, которые вы передали git status. В этом отношении git status действительно git commit --preview.

Чтобы получить то, что вы хотите, вы можете сделать это, показывая поэтапные изменения:

git diff --stat --cached -- <directory_of_interest>

и это, которое показывает неустановленные изменения:

git diff --stat -- <directory_of_interest>

или это, которое показывает оба:

git diff --stat HEAD -- <directory_of_interest>
13 голосов
/ 03 апреля 2009

Самое простое решение:

  1. Перейти в каталог
  2. git status | grep -v '\.\.\/'

Конечно, это отбрасывает цвета.

1 голос
/ 14 апреля 2015

Как примечание, если вы упростите проверку статистики git, не заходя в каталог git;

### create file
sudo nano /usr/local/bin/gitstat

### put this in

#!/usr/bin/env bash

dir=$1

if [[ $dir == "" ]]; then
    echo "Directory is required!"
    exit
fi

echo "Git stat for '$dir'."

git --git-dir=$dir/.git --work-tree=$dir diff --stat

### give exec perm
sudo chmod +x /usr/local/bin/gitstat

И вызов этого простого сценария: gitstat /path/to/foo-project. Вы также можете использовать его, когда в foo-project просто делаете gitstat ., поэтому предположите, что он короче git status -s, git diff --stat или git diff --stat HEAD, если вы всегда используете консоль вместо графического интерфейса пользователя.

Кредиты:

...