nie, „stan gita”. podaje foldery rodzeństwa, takie jak np. „../sibling”
EoghanM
Czy mógłbyś podać trochę więcej kontekstu na temat tego, dlaczego chcesz odfiltrować zmiany w innym miejscu drzewa? W jakich sytuacjach chciałbyś skorzystać z tej funkcji?
Greg Bacon
1
Jeśli jest więcej niż pełnoekranowa wartość wyjścia z normalnego polecenia „git status”
z podkatalogu "b", git statuspokazuje nowe pliki w całym drzewie:
% 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
#
ale git status .pokazuje tylko pliki w „b” i poniżej.
% 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
#
Tylko ten podkatalog, nie poniżej
git status .pokazuje rekursywnie wszystkie pliki poniżej „b”. Aby wyświetlić tylko pliki z "b", ale nie poniżej, musisz przekazać listę samych plików (a nie katalogów) do git status. Jest to trochę kłopotliwe, w zależności od twojej powłoki.
Zsh
W zsh możesz wybrać zwykłe pliki z "kwalifikatorem glob" (.). Na przykład:
% git status *(.)
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: 3
new file: 4
Grzmotnąć
Bash nie ma kwalifikatorów glob, ale możesz użyć GNU, findaby wybrać zwykłe pliki, a następnie przekazać je w następujący git statussposób:
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
Wykorzystuje -maxdepthco jest GNU znaleźć rozszerzenie. Find POSIX nie ma -maxdepth, ale możesz to zrobić:
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
Przepraszam, że tyle czasu zajęło powrót do tej odpowiedzi - prosta i poprawna! Zastanawiam się, czy <pathspec> został dodany do statusu git po moim pytaniu?
EoghanM
Co zrobić, jeśli interesuje Cię tylko bieżący folder, do którego .odnosi się, ale nie jego podfoldery. Jakieś obejście tego? Dzięki!
benjaminz,
@benjaminz zależy od twojego zastosowania - do takich rzeczy używam powłoki globbingu do wybierania plików, ale nie podkatalogów, np. (dla zsh) git status *(.). Bash nie ma skróconego sposobu na globowanie tylko plików, ale możesz użyć rozszerzonego, findnp find . -type f -maxdepth 1 -exec git status {} +. Wygląda na to, że chciałbyś umieścić w aliasie lub skrypcie zamiast cały czas pisać.
Matt Curtis,
3
Niektóre polecenia hydrauliczne przyjmują katalog jako parametr:
git ls-files -t -o -m aDirectory
zwróci wszystkie pliki zmienione, ale niezaktualizowane (nie dodane do etapu) lub nieśledzone. I to w przypadku katalogu.
Jak napisano w tym wątku , git ls-files nie obsługuje --addedopcji „ .
bardziej fundamentalnym powodem jest to, że ls-fileshydraulika dotyczy indeksu .
Dodane nie dotyczy porównania między indeksem a drzewem roboczym.
Znajduje się pomiędzy zatwierdzeniem HEAD a indeksem i nie należy do hydrauliki plików ls.
Uwielbiam to, jak grep zawsze oferuje prowizoryczne rozwiązanie, jeśli nie znasz bardziej konkretnego. Pozdrawiam programowanie taco-bell.
murftown
To jest o wiele potężniejsze!
benjaminz
3
Możliwe jest ograniczenie git statusdo bieżącego katalogu (bez folderów potomnych) poprzez podanie ścieżki dostępu za pomocą magicznego słowa globi *::
Kiedy próbowałem gita, nie znalazłem na to sposobu.
Skończyło się na zrobieniu:
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
To jest metoda, której używałem ... następujące również otrzymują nagłówki statusu: git status | grep "main \ |: \ $" ... niestety tracisz kolorowanie.
EoghanM
Przeszedłem przez to pytanie, szukając ogólnego dopasowania globu. Jest to zdecydowanie najłatwiejsze i działa dla mnie, np. git status | grep extGdzie ext to rozszerzenie. Dzięki!
Odpowiedzi:
pokaże status bieżącego katalogu i podkatalogów.
Na przykład podane pliki (liczby) w tym drzewie:
z podkatalogu "b",
git status
pokazuje nowe pliki w całym drzewie:ale
git status .
pokazuje tylko pliki w „b” i poniżej.Tylko ten podkatalog, nie poniżej
git status .
pokazuje rekursywnie wszystkie pliki poniżej „b”. Aby wyświetlić tylko pliki z "b", ale nie poniżej, musisz przekazać listę samych plików (a nie katalogów) dogit status
. Jest to trochę kłopotliwe, w zależności od twojej powłoki.Zsh
W zsh możesz wybrać zwykłe pliki z "kwalifikatorem glob"
(.)
. Na przykład:Grzmotnąć
Bash nie ma kwalifikatorów glob, ale możesz użyć GNU,
find
aby wybrać zwykłe pliki, a następnie przekazać je w następującygit status
sposób:Wykorzystuje
-maxdepth
co jest GNU znaleźć rozszerzenie. Find POSIX nie ma-maxdepth
, ale możesz to zrobić:źródło
.
odnosi się, ale nie jego podfoldery. Jakieś obejście tego? Dzięki!git status *(.)
. Bash nie ma skróconego sposobu na globowanie tylko plików, ale możesz użyć rozszerzonego,find
npfind . -type f -maxdepth 1 -exec git status {} +
. Wygląda na to, że chciałbyś umieścić w aliasie lub skrypcie zamiast cały czas pisać.Niektóre polecenia hydrauliczne przyjmują katalog jako parametr:
zwróci wszystkie pliki zmienione, ale niezaktualizowane (nie dodane do etapu) lub nieśledzone. I to w przypadku katalogu.
Jak napisano w tym wątku , git ls-files nie obsługuje
--added
opcji „ .Tak więc, używając poleceń wymienionych tutaj :
dałoby zarówno pliki nie dodane i dodane
dałoby tylko niedodane pliki. (podczas wykrywania przeróbek, zmian nazw, kopii, ...)
Jak zwykle w przypadku poleceń hydraulicznych, niektóre skrypty są w porządku;)
źródło
Niedoskonałe, ale działa to również w katalogu, który Cię interesuje:
Spowoduje to ukrycie wszystkich katalogów, które wymagałyby odniesienia w górę na ich ścieżce względnej.
Jeśli chcesz uzyskać kolor wypluwa drugim końcu, ustawiony
color.status
naalways
:źródło
Możliwe jest ograniczenie
git status
do bieżącego katalogu (bez folderów potomnych) poprzez podanie ścieżki dostępu za pomocą magicznego słowaglob
i*:
:git status ':(glob)*'
źródło
Kiedy próbowałem gita, nie znalazłem na to sposobu.
Skończyło się na zrobieniu:
źródło
git status | grep ext
Gdzie ext to rozszerzenie. Dzięki!cd YOUR_REQUIRED_DIRECTORY, a następnie
stan git.
źródło