Коли я роблю git status у підпапці мого сховища, це включає також статус батьківських папок.
Чи є спосіб обмежити git-status лише певною папкою?
Коли я роблю git status у підпапці мого сховища, це включає також статус батьківських папок.
Чи є спосіб обмежити 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" (.). Наприклад:
% 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 не має глобальних кваліфікаторів, але ви можете використовувати 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 знайти розширення. 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 status *(.). Bash не має скороченого способу перегляду лише файлів, але ви можете використовувати розширений, findнаприклад find . -type f -maxdepth 1 -exec git status {} +. Схоже на те, що ви хочете вставити в псевдонім або сценарій, а не постійно друкувати.
Деякі команди водопроводу беруть каталог як параметр:
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 statusпоточним каталогом (без дочірніх папок), вказавши специфікацію шляху за допомогою магічного слова globта *::
git status ':(glob)*'
Коли я спробував 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
cd YOUR_REQUIRED_DIRECTORY, потім,
git status.