Kiedy robię status git w podfolderze mojego repozytorium, zawiera on również status folderów nadrzędnych.
Czy istnieje sposób na ograniczenie statusu git tylko do określonego folderu?
Kiedy robię status git w podfolderze mojego repozytorium, zawiera on również status folderów nadrzędnych.
Czy istnieje sposób na ograniczenie statusu git tylko do określonego folderu?
Odpowiedzi:
git status .
pokaże status bieżącego katalogu i podkatalogów.
Na przykład podane pliki (liczby) w tym drzewie:
a/1
a/2
b/3
b/4
b/c/5
b/c/6
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
#
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.
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
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
.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, 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ć.
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.
Tak więc, używając poleceń wymienionych tutaj :
git diff-index --name-only -B -R -M -C HEAD src
dałoby zarówno pliki nie dodane i dodane
git diff-files --name-only -B -R -M -C src
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;)
Niedoskonałe, ale działa to również w katalogu, który Cię interesuje:
git status | grep -v ' \.\./'
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.statusna always:
git config color.status always
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 *::
git status ':(glob)*'
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