Статус 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 <довідник>", здається, робить те, що я очікував - я, чесно кажучи, не пам'ятаю, з якою проблемою я мав з цим раніше ... можливо, це питання іншої версії git, не знаю.
Kuba Suder

Без проблем, а можливо - новіші версії git, здається, полегшують ситуацію.
Сем Додж

3
Так, поведінка напевно змінилася з 1,6 до 1,7. Він відповідає вимогам ОП у 1.7, але 1.6 продовжується протягом усього репо.
колгур

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>

2
Частково це працює, хоча в ньому не відображаються новостворені (без трекінгу) файли, як git-status does ...
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. Я також дуже хотів би побачити рішення цього!
Пітер В. Морч


2

Як зауваження, якщо ви спростите перевірити статистику git, не переходячи до каталогу git;

### створити файл
sudo nano / usr / local / bin / gitstat

### помістіть це

#! / usr / bin / env bash

dir = 1 дол

якщо [[$ dir == ""]]; тоді
    ехо "Каталог обов'язковий!"
    вихід
фі

echo "Git stat for '$ dir'."

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

### дайте 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якщо ви завжди використовуєте консоль замість гуї.

Кредити:

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.