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.