Когда я выполняю git статус во вложенной папке моего репозитория, он также включает статус родительских папок.
Есть ли способ ограничить git -status только определенной папкой?
Когда я выполняю git статус во вложенной папке моего репозитория, он также включает статус родительских папок.
Есть ли способ ограничить git -status только определенной папкой?
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 вы можете выбрать обычные файлы с помощью "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 не имеет квалификаторов 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
Некоторые команды сантехники принимают каталог как параметр:
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
предоставит вам только не добавленные файлы. (при обнаружении перезаписи, переименований, копий,...)
Как обычно с командами сантехники, некоторые скрипты в порядке;)
Несовершенно, но это работает также из интересующего вас каталога:
git status | grep -v ' \.\./'
Это скроет все каталоги, которые потребуют восходящей ссылки в их относительном пути.
Если вы хотите получить цвет, плюющий на другом конце, установите color.status
в always
:
git config color.status always
Когда я попробовал 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
cd YOUR_REQUIRED_DIRECTORY, затем статус
git.