Status Git - apakah ada cara untuk menampilkan perubahan hanya di direktori tertentu?

141

Saya ingin melihat daftar file yang diubah sejak komit terakhir, seperti yang git statusditunjukkan, tetapi saya hanya peduli tentang file yang terletak dalam satu direktori. Apakah ada cara untuk melakukan ini? Saya mencoba git status <directory>, tetapi tampaknya ini melakukan sesuatu yang sama sekali berbeda (mencantumkan semua file yang diubah, seperti yang akan saya tulis git add <directory>terlebih dahulu).

Dokumentasi untuk git-status tidak banyak menjelaskan, selain fakta bahwa ia menerima opsi yang sama dengan yang dilakukan git-commit (tetapi tujuan git-commit bukanlah untuk menampilkan daftar file yang diubah).

Kuba Suder
sumber

Jawaban:

206

Dari dalam direktori:

git status .

Anda benar-benar dapat menggunakan jalur apa pun, gunakan sintaks ini:

git status <directoryPath>

Misalnya untuk direktori dengan path "my / cool / path / here"

git status my/cool/path/here
Sam Doidge
sumber
4
Terima kasih! Juga, 'status git <directory>' sepertinya melakukan apa yang saya harapkan - sejujurnya saya tidak ingat masalah apa yang saya hadapi sebelumnya ... mungkin ini masalah versi git yang berbeda, tidak tahu.
Kuba Suder
Tidak masalah, dan mungkin - versi git yang lebih baru tampaknya membuat segalanya lebih mudah.
Sam Doidge
4
Ya, perilaku pasti berubah dari 1,6 menjadi 1,7. Ini memenuhi persyaratan OP di 1.7 tetapi 1.6 berlanjut di seluruh repo.
colgur
saya mencari perintah ini bahkan setelah terbiasa dengan perintah yang paling rumit seperti stash dan rebase karena saya tidak ingin melihat file terlacak dalam status merah. git rm juga tidak berguna karena dihapus dari indeks saat komit, tetapi perintah ini sebenarnya sangat dibutuhkan ketika hanya perlu bekerja dengan sedikit. Solusi sederhana selalu merupakan solusi yang tidak terlihat di mana pun.
Shashank Bhatt
32

Alasan yang git statusmengambil opsi yang sama git commitadalah bahwa tujuannya git statusadalah untuk menunjukkan apa yang akan terjadi jika Anda berkomitmen dengan opsi yang sama seperti yang Anda berikan git status. Dalam hal git statusini benar-benar git commit --preview.

Untuk mendapatkan apa yang Anda inginkan, Anda dapat melakukan ini yang menunjukkan perubahan bertahap:

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

dan ini, yang menunjukkan perubahan tidak bertahap:

git diff --stat -- <directory_of_interest>

atau ini yang menunjukkan keduanya:

git diff --stat HEAD -- <directory_of_interest>
CB Bailey
sumber
3
Ini berfungsi sebagian, meskipun tidak menampilkan file yang baru dibuat (tidak terlacak), seperti yang dilakukan git-status ...
Kuba Suder
Oke, saya tidak yakin laporan apa yang Anda butuhkan. Jika Anda perlu memeriksa file yang tidak bertingkat, coba git ls-files --others <directory_in_question>atau ls-files -o.
CB Bailey
git ls-files -omenampilkan file dalam direktori yang tidak dipentaskan secara rekursif, sedangkan git statushanya menampilkan direktori level teratas. Dan seseorang harus membuat git diff, git ls-filesmengeluarkan dan membuat ulang semua kode warna dll. Yang git statusmenyediakan jika itu akan menjadi penggantinya git status. Saya juga sangat ingin melihat solusi untuk ini!
Peter V. Mørch
14

Solusi paling sederhana:

  1. Masuk ke direktori
  2. git status | grep -v '\.\.\/'

Tentu saja ini membuang warna.

Can Berk Güder
sumber
Jika perlu, Anda dapat menambahkan beberapa modifikasi agar warnanya kembali. contoh 1 contoh 2
Carson
2

Sebagai catatan, jika Anda menyederhanakan untuk memeriksa statistik git tanpa membuka direktori git;

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

### masukkan ini

#! / usr / bin / env bash

dir = $ 1

jika [[$ dir == ""]]; kemudian
    echo "Diperlukan direktori!"
    keluar
fi

echo "Git stat untuk '$ dir'."

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

### berikan perm eksekutif
sudo chmod + x / usr / local / bin / gitstat

Dan menyebut bahwa script sederhana: gitstat /path/to/foo-project. Anda juga dapat menggunakannya saat sedang foo-projectmengerjakan gitstat .dan jadi anggaplah lebih pendek dari git status -s, git diff --statatau git diff --stat HEADjika Anda selalu menggunakan konsol daripada gui.

Kredit:

K-Gun
sumber