Как получить git-статус одной подпапки? - PullRequest
72 голосов
/ 25 июня 2009

Когда я делаю git status в подпапке моего репозитория, он также включает в себя статус родительских папок.

Есть ли способ ограничить git-статус только определенной папкой?

Ответы [ 5 ]

86 голосов
/ 26 марта 2011
git status .

покажет состояние текущего каталога и подкаталогов.

Например, заданные файлы (числа) в этом дереве:

a/1
a/2
b/3
b/4
b/c/5
b/c/6

из подкаталога "b", git status показывает новые файлы во всем дереве:

% git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   ../a/1
#   new file:   ../a/2
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

, но git status . просто показывает файлы в «b» и ниже.

% git status .
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#   new file:   3
#   new file:   4
#   new file:   c/5
#   new file:   c/6
#

Только этот подкаталог, не ниже

git status . рекурсивно показывает все файлы ниже "b". Чтобы показать только файлы в «b», но не ниже, вам нужно передать список только файлов (а не каталогов) в git status. Это немного сложно, в зависимости от вашей оболочки.

Zsh

В zsh вы можете выбирать обычные файлы с помощью "glob qualifier" (.). Например:

% git status *(.)
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

Bash

Bash не имеет квалификаторов глобуса, но вы можете использовать GNU find, чтобы выбрать обычные файлы и затем передать их git status следующим образом:

bash-3.2$ find . -type f -maxdepth 1 -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4

Используется -maxdepth, которое является расширением GNU find . POSIX find не имеет -maxdepth, но вы можете сделать это:

bash-3.2$ find . -path '*/*' -prune -type f -exec git status {} +
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   3
        new file:   4
3 голосов
/ 25 июня 2009

Некоторые сантехнические команды принимают каталог в качестве параметра:

git ls-files -t -o -m aDirectory

выдаст вам все файлы, измененные, но не обновленные (не добавленные на сцену) или не отслеженные. И это для справочника.

Как написано в этой теме , git ls-files не поддерживает опцию '--added.

более фундаментальная причина в том, что ls-files сантехника соответствует индексу .
Добавлено , а не о сравнении индекса и рабочего дерева.
Он находится между коммитом HEAD и индексом и не относится к канализации ls-файлов.

Итак, используя команды , упомянутые здесь :

git diff-index --name-only -B -R -M -C HEAD src

даст вам как не добавленные, так и добавленные файлы

git diff-files --name-only -B -R -M -C src

даст вам только не добавленные файлы. (при обнаружении перезаписывает, переименовывает, копирует, ...)

Как обычно с сантехническими командами, некоторые сценарии в порядке;)

3 голосов
/ 10 июля 2009

Несовершенно, но это работает также из интересующего вас каталога:

git status | grep -v ' \.\./'

Это скроет все каталоги, для которых потребуется относительная ссылка в их относительном пути.

Если вы хотите получить цвет, выплевывая другой конец, установите color.status на always:

git config color.status always
1 голос
/ 21 сентября 2015

cd YOUR_REQUIRED_DIRECTORY, затем
git status.

1 голос
/ 25 июня 2009

Когда я попробовал git, я не нашел способа сделать это.

Я закончил тем, что сделал:

x@x:~/x$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       b
#       main/a
nothing added to commit but untracked files present (use "git add" to track)

x@x:~/x$ git status | grep main
#       main/a
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...