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

136

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

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

Куба Судер
источник

Ответы:

199

Из каталога:

git status .

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

git status <directoryPath>

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

git status my/cool/path/here
Сэм Доидж
источник
3
Спасибо! Кроме того, «git status <directory>», кажется, делает то, что я ожидал - я, честно говоря, не помню, какая у меня была проблема с ним раньше ... возможно, дело в другой версии git, не знаю.
Куба Судер
Нет проблем, и возможно - более новые версии git, кажется, делают вещи проще.
Сэм Доидж
3
Да, поведение определенно изменилось с 1,6 до 1,7. Он соответствует требованию OP в 1.7, но 1.6 продолжается в течение всего репо.
colgur 12.12.13
31

Причина, по которой 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>
CB Bailey
источник
2
Это частично работает, хотя и не показывает вновь созданные (неотслеживаемые) файлы, как это делает git-status ...
Kuba Suder
Хорошо, я не был уверен, какие отчеты вам нужны. Если вам нужно проверить файлы без тегов, попробуйте git ls-files --others <directory_in_question>или ls-files -o.
CB Bailey
git ls-files -oрекурсивно показывает файлы в неустановленных каталогах, тогда как git statusпоказывает только каталог верхнего уровня. И нужно будет составить git diff, git ls-filesвывести и воссоздать всю цветовую кодировку и т. Д., git statusКоторая обеспечивает замену git status. Я также очень хотел бы увидеть решение этой проблемы!
Питер В. Мёрч
14

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

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

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

Can Berk Güder
источник
При необходимости вы можете добавить некоторые изменения, чтобы цвет вернулся. Пример 1 Пример 2
Карсон
2

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

### создать файл
sudo nano / usr / local / bin / gitstat

### вставь это в

#! / usr / bin / env bash

реж = $ 1

if [[$ dir == ""]]; затем
    echo "Справочник обязателен!"
    выход
фи

echo "Git stat для '$ ​​dir'."

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

### отдать exec Пермь
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если вы всегда используете консоль вместо графического интерфейса.

Кредиты:

K-Gun
источник