Как получить git -статус одной подпапки?

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

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

Ответ 1

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 не имеет квалификаторов glob, но вы можете использовать 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

Ответ 2

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

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

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

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

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

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

git config color.status always

Ответ 4

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

Я закончил работу:

[email protected]:~/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)

[email protected]:~/x$ git status | grep main
#       main/a

Ответ 5

cd YOUR_REQUIRED_DIRECTORY, затем статус
git.