Stato Git - c'è un modo per mostrare le modifiche solo in una directory specifica?


136

Vorrei vedere un elenco di file modificati dall'ultimo commit, come git statusmostra, ma mi interessa solo i file che si trovano in una singola directory. C'è un modo per fare questo? Ho provato git status <directory>, ma sembra che questo faccia qualcosa di completamente diverso (elenca tutti i file modificati, come sarebbero se io scrivessi per git add <directory>primo).

La documentazione per git-status non dice molto, a parte il fatto che accetta le stesse opzioni di git-commit (ma lo scopo di git-commit non è quello di mostrare elenchi di file modificati).

Risposte:


199

Dall'interno della directory:

git status .

Puoi davvero usare qualsiasi percorso, usa questa sintassi:

git status <directoryPath>

Ad esempio per la directory con il percorso "my / cool / path / here"

git status my/cool/path/here

3
Grazie! Inoltre, 'git status <directory>' sembra fare quello che mi aspetterei - onestamente non ricordo quale problema ho avuto prima ... forse è una questione di una versione git diversa, non so.
Kuba Suder,

Nessun problema, e forse - le nuove versioni di git sembrano rendere le cose più facili.
Sam Doidge,

3
Sì, il comportamento è decisamente cambiato da 1.6 a 1.7. Soddisfa i requisiti del PO in 1.7 ma 1.6 continua per l'intero repo.
colgur,

31

Il motivo che git statusutilizza le stesse opzioni git commitè che lo scopo di git statusè mostrare cosa accadrebbe se ti impegnassi con le stesse opzioni a cui sei passato git status. A questo proposito git statusè davvero git commit --preview.

Per ottenere ciò che desideri, puoi fare ciò che mostra i cambiamenti graduali:

git diff --stat --cached -- <directory_of_interest>

e questo, che mostra le modifiche non messe in scena:

git diff --stat -- <directory_of_interest>

o questo che mostra entrambi:

git diff --stat HEAD -- <directory_of_interest>

2
Questo funziona parzialmente, anche se non mostra i file appena creati (non tracciati), come fa git-status ...
Kuba Suder,

OK, non ero sicuro di quali rapporti avessi bisogno. Se è necessario verificare la presenza di file non organizzati, provare git ls-files --others <directory_in_question>o ls-files -o.
CB Bailey

git ls-files -omostra ricorsivamente i file nelle directory non in scena, mentre git statusmostra solo la directory di livello superiore. E si dovrebbe comporre git diff, git ls-filesprodurre e ricreare tutta la codifica a colori ecc. Che git statusprevede se deve essere un sostituto git status. Mi piacerebbe anche vedere una soluzione a questo!
Peter V. Mørch,

14

La soluzione più semplice:

  1. Vai alla directory
  2. git status | grep -v '\.\.\/'

Naturalmente questo scarta i colori.


Se necessario, è possibile aggiungere alcune modifiche per ripristinare il colore. esempio 1 esempio 2
Carson

2

Come nota, se si semplifica il controllo delle statistiche di git senza andare alla directory di git;

### crea file
sudo nano / usr / local / bin / gitstat

### inseriscilo

#! / usr / bin / env bash

dir = $ 1

if [[$ dir == ""]]; poi
    echo "Directory obbligatoria!"
    Uscita
fi

echo "Git stat per '$ dir'."

git --git-dir = $ dir / .git --work-tree = $ dir diff --stat

### dare exec perm
sudo chmod + x / usr / local / bin / gitstat

E chiamando che semplice script: gitstat /path/to/foo-project. Puoi anche usarlo mentre lo foo-projectfai gitstat .e supponiamo che sia più breve di git status -s, git diff --stato git diff --stat HEADse stai sempre usando la console anziché la GUI.

Crediti:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.