Bisakah saya mendapatkan daftar file yang ditandai --assume-tidak berubah?

325

Apa yang saya tandai --assume-unchanged? Apakah ada cara untuk mengetahui apa yang saya simpan menggunakan opsi itu?

Saya telah menggali .git/direktori dan tidak melihat apa pun yang tampak seperti yang saya harapkan, tetapi pasti ada di suatu tempat. Saya lupa apa yang saya tandai seperti ini beberapa minggu yang lalu dan sekarang saya perlu mendokumentasikan detail itu untuk pengembang masa depan.

Rob Wilkerson
sumber

Jawaban:

449

Kamu bisa memakai git ls-files -v . Jika karakter yang dicetak adalah huruf kecil, file ditandai menganggap-tidak berubah.

Untuk mencetak hanya file yang tidak berubah, gunakan:

git ls-files -v | grep '^[[:lower:]]'

Untuk merangkul programmer malas Anda, ubah ini menjadi alias git . Edit .gitconfigfile Anda untuk menambahkan potongan ini:

[alias]
    ignored = !git ls-files -v | grep "^[[:lower:]]"

Sekarang mengetik git ignoredakan memberi Anda output seperti ini:

h path/to/ignored.file
h another/ignored.file
Andrew Aylett
sumber
42
git ls-files -v | grep ^ [az]
Matt R
17
OS saya tampaknya memiliki pengaturan susunan yang aneh, jadi perintah Matt tidak bekerja untuk saya. Inilah yang saya tambahkan di bawah [alias]bagian saya .gitconfig:ignored = !git ls-files -v | grep "^[[:lower:]]"
Abe Voelker
15
Alasan [az] tidak berfungsi adalah karena shell mengekspansinya sebagai wildcard; jika direktori saat ini berisi file yang cocok dengan pola itu (yaitu huruf kecil tunggal), maka perluasan itu adalah nama file. Coba tambahkan tanda kutip, misalnya "[az]"
DomQ
7
git ls-files -v | grep -e "^ [az]"
Amir Ali Akbari
12
Alias ​​yang disarankan berfungsi untuk menemukan file yang tidak berubah di direktori saat ini dan di bawah. Jika Anda ingin daftar semua file "berasumsi tidak berubah" dalam repositori, Anda perlugit ls-files -v `git rev-parse --show-toplevel` | grep "^[a-z]"
Trebor Rude
65

Satu Liner

git ls-files -v | grep "^[a-z]"

Gunakan Alias

IMHO, git hiddenlebih baik untuk file yang ditandai sebagai --assume-unchanged:

git config --global alias.hidden '!git ls-files -v | grep "^[a-z]"'

Berikut daftar alias terkait yang saya miliki di ~/.gitconfig:

[alias]
  hide = update-index --assume-unchanged
  unhide = update-index --no-assume-unchanged
  unhide-all = update-index --really-refresh
  hidden = !git ls-files -v | grep \"^[a-z]\"
  ignored = !git status -s --ignored | grep \"^!!\"

Untuk membuatnya berfungsi dalam subdirektori dan argumen dukungan :

  hidden = "!f(){ git -C \"$GIT_PREFIX\" ls-files -v \"$@\" | grep \"^[a-z]\";}; f"
  ignored = "!f(){ git -C \"$GIT_PREFIX\" status -s --ignored \"$@\" | grep \"^!!\";}; f"

Sebagai contoh:

 # cd target
 # git ignored classes

Tentang Status File

Bagi saya kebanyakan file tersembunyi ditandai dengan flag h, walaupun sebenarnya ada beberapa flag lain sesuai dengan manual git-ls-files-v:

-v
    Similar to -t, but use lowercase letters for files that are 
marked as assume unchanged (see git-update-index(1)).

Tentang git ls-files-t:

This option (-t) identifies the file status with the following tags 
(followed by a space) at the start of each line:

H   cached
S   skip-worktree
M   unmerged
R   removed/deleted
C   modified/changed
K   to be killed
?   other
Ryenus
sumber
1
Alias ​​alias mudah diingat :) Terima kasih
PlagueHammer
1
Berikut adalah beberapa varian yang lebih fleksibel: hidden = "!f() { git ls-files -v \"$@\" | grep \"^[a-z]\"; }; f"dan ignored = "!f() { git status -s --ignored \"$@\" | grep \"^!!\"; }; f". Ini memungkinkan, misalnya, git ignored -- PATH1 PATH2untuk hanya daftar file yang diabaikan dalam jalur tertentu (berguna ketika Anda memiliki banyak file yang diabaikan).
sls
Terima kasih untuk alias
MOHRE
22

Perintah ini bekerja lebih konsisten untuk saya. Ini hanya akan mencetak file yang terdaftar sebagai 'menganggap-tidak berubah'.

git ls-files -v|grep "^h"

Saya telah menggunakan ini berkali-kali di lingkungan yang berbeda dan berfungsi dengan baik.

earl3s
sumber
5
Pada prompt Windows, gunakan grep "^h"bukan tanda kutip tunggal
beautifulcoder
7

Solusi PowerShell, menggunakan Select-String \ sls

git ls-files -v | sls -pattern ^h -casesensitive
Terima kasih
sumber
3

Solusi baris perintah Windows menggunakan findstr :

git ls-files -v | findstr /B h
Vova
sumber