Saya pikir intinya adalah, apa kriteria untuk memutuskan file sebagai terlacak atau tidak terlacak. Seharusnya ada semacam koleksi file yang dilacak untuk dicari.
Setidaknya dengan versi git saya yang lebih lama (1.6.0), Anda harus meletakkan --error-unmatchopsi sebelum nama file untuk mendapatkan kesalahan. Entah bagaimana opsi ini hanya diterapkan pada nama file yang mengikutinya.
Alex Dupuy
Sebenarnya, masalahnya adalah GNU getopt permuting tidak diaktifkan, dan ketika muncul setelah nama file (atau setelah --), --error-unmatchdiperlakukan sebagai nama file (bukan dalam indeks), dan tidak berpengaruh.
[Cara naif] Buat perubahan kecil pada file (tambah / hapus spasi). Dan lihat apakah file tersebut terdaftar ketika 'git status' diketik. Cara yang konyol, tetapi dapat menghemat waktu.
BraveNinja
Tetapi saya menambahkan dan mengkomitnya dengan perintah "git add -A && git commit -m" bla. Bahkan melihat seluruh file dengan perintah "git ls-tree --name-only -r sha1".
Dr.jacky
66
Jika Anda tidak ingin mengacaukan konsol Anda dengan pesan kesalahan, Anda juga dapat menjalankannya
git ls-files file_name
dan kemudian periksa hasilnya. Jika git tidak mengembalikan apa-apa, maka file tidak dilacak. Jika dilacak, git akan mengembalikan path file.
Ini sangat berguna jika Anda ingin menggabungkannya dalam skrip, misalnya PowerShell:
$gitResult = (git ls-files $_) | out-string
if ($gitResult.length -ne 0)
{
## do stuff with the tracked file
}
Saya pikir file_nameperlu pertandingan yang tepat (path lengkap + nama file), tetapi dapat digunakan dengan wildcard:git ls-files *foo.rb
dechimp
16
EDIT
Jika Anda perlu menggunakan git dari bash ada --porcelainopsi untuk git status:
--porselen
Berikan hasil dalam format skrip yang stabil dan mudah diurai. Saat ini identik dengan output - pendek, tetapi dijamin tidak akan berubah di masa depan, sehingga aman untuk skrip.
Output terlihat seperti ini:
> git status --porcelain
M starthudson.sh
?? bla
Atau jika Anda hanya melakukan satu file pada satu waktu:
> git status --porcelain bla
?? bla
ASLI
melakukan:
git status
Anda akan melihat laporan yang menyatakan file mana yang diperbarui dan mana yang tidak dilacak.
Anda dapat melihat bla.shdilacak dan dimodifikasi dan newblatidak dilacak:
# On branch master
# Changed but not updated:
# (use "git add <file>..." to update what will be committed)
#
# modified: bla.sh
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# newbla
no changes added to commit (use "git add" and/or "git commit -a")
Maaf saya seharusnya lebih jelas. Statusnya oke tapi saya lebih suka memeriksa kode keluar dari parse output.
Dale Forester
git status --porcelainadalah teman Anda jika Anda perlu mengurai output dengan skrip, lihat dokumen yang tertaut itu menunjukkan beberapa opsi lain yang berguna
stefanB
Hihi, tidak bekerja dengan Git yang sangat lama: git status --porcelain error: unknown option Versi porselen adalah 1.6.0 :-)
Laryx Decidua
@ user465139 itu benar ... Anda perlu git 1.7.0 atau yang lebih baru (opsi porselen tidak ditambahkan sampai saat itu).
mason81
13
Coba jalankan git statuspada file. Ini akan mencetak kesalahan jika tidak dilacak oleh git
PS$> git status foo.txt
error: pathspec 'foo.txt' did not match any file(s) known to git.
Wow. Saya pasti menjalankannya di direktori dan bertindak seperti sedang memeriksa seluruh repo. Terima kasih.
Dale Forester
4
Sebenarnya, jika saya menjalankan git status trackedfilesaya mendapatkan kode keluar 1 (diharapkan 0 berguna) tetapi tidak memberi saya "error:" di output. Saya lebih suka mengurai kode keluar dari output string.
Dale Forester
43
Saya menemukan bahwa tidak ada kesalahan yang muncul jika saya menjalankan status git pada file yang ada dalam copy pekerjaan git saya tetapi yang dikecualikan oleh .gitignore. (Yaitu jawaban ini tidak akan berhasil.)
JellicleCat
Harap dicatat bahwa itu tidak berfungsi dengan baik jika file tersebut ada dalam daftar abaikan, yaitu dalam file.gitignore
Robin Hsu
8
Itu tidak berhasil. Itu selalu mencetak hal yang sama, bahkan jika file tersebut tidak ada. $ git status notthere:On branch master nothing to commit, working directory clean
Chloe
6
Saya tidak tahu ada perintah git yang memberikan kode keluar "buruk", tetapi sepertinya cara mudah untuk melakukannya adalah dengan menggunakan perintah git yang tidak menghasilkan keluaran untuk file yang tidak dilacak, seperti git-log atau git-ls-files. Dengan begitu Anda tidak perlu melakukan parsing apa pun, Anda dapat menjalankannya melalui utilitas sederhana lain seperti grep untuk melihat apakah ada output.
Sebagai contoh,
git-ls-files test_file.c | grep.
akan keluar dengan kode nol jika file dilacak, tetapi kode keluar satu jika file tidak dilacak.
di mana relative/pathdapat dengan mudah ditentukan dengan menekan di tabdalam shell pelengkapan otomatis. Tambahkan tambahan | wc -l untuk mendapatkan hasil 1 atau 0.
Jawaban:
mencoba:
akan keluar dengan 1 jika file tidak dilacak
sumber
--error-unmatch
opsi sebelum nama file untuk mendapatkan kesalahan. Entah bagaimana opsi ini hanya diterapkan pada nama file yang mengikutinya.--
),--error-unmatch
diperlakukan sebagai nama file (bukan dalam indeks), dan tidak berpengaruh.git ls-files | grep <PATTERN>
? contoh:git ls-files | grep Main.h
Jika Anda tidak ingin mengacaukan konsol Anda dengan pesan kesalahan, Anda juga dapat menjalankannya
dan kemudian periksa hasilnya. Jika git tidak mengembalikan apa-apa, maka file tidak dilacak. Jika dilacak, git akan mengembalikan path file.
Ini sangat berguna jika Anda ingin menggabungkannya dalam skrip, misalnya PowerShell:
sumber
file_name
perlu pertandingan yang tepat (path lengkap + nama file), tetapi dapat digunakan dengan wildcard:git ls-files *foo.rb
EDIT
Jika Anda perlu menggunakan git dari bash ada
--porcelain
opsi untukgit status
:Output terlihat seperti ini:
Atau jika Anda hanya melakukan satu file pada satu waktu:
ASLI
melakukan:
Anda akan melihat laporan yang menyatakan file mana yang diperbarui dan mana yang tidak dilacak.
Anda dapat melihat
bla.sh
dilacak dan dimodifikasi dannewbla
tidak dilacak:sumber
git status --porcelain
adalah teman Anda jika Anda perlu mengurai output dengan skrip, lihat dokumen yang tertaut itu menunjukkan beberapa opsi lain yang bergunagit status --porcelain error: unknown option
Versi porselen adalah 1.6.0 :-)Coba jalankan
git status
pada file. Ini akan mencetak kesalahan jika tidak dilacak oleh gitsumber
git status trackedfile
saya mendapatkan kode keluar 1 (diharapkan 0 berguna) tetapi tidak memberi saya "error:" di output. Saya lebih suka mengurai kode keluar dari output string..gitignore
$ git status notthere
:On branch master nothing to commit, working directory clean
Saya tidak tahu ada perintah git yang memberikan kode keluar "buruk", tetapi sepertinya cara mudah untuk melakukannya adalah dengan menggunakan perintah git yang tidak menghasilkan keluaran untuk file yang tidak dilacak, seperti git-log atau git-ls-files. Dengan begitu Anda tidak perlu melakukan parsing apa pun, Anda dapat menjalankannya melalui utilitas sederhana lain seperti grep untuk melihat apakah ada output.
Sebagai contoh,
akan keluar dengan kode nol jika file dilacak, tetapi kode keluar satu jika file tidak dilacak.
sumber
Saya menyarankan alias khusus pada Anda
.gitconfig
.Anda harus melakukannya:
1) Dengan perintah git:
2) Mengedit
~/.gitconfig
dan menambahkan baris ini pada bagian alias:Setelah meluncurkan perintah (1) atau file yang disimpan (2), di ruang kerja Anda, Anda dapat mengujinya:
sumber
menggunakan
git log
akan memberikan info tentang ini. Jika file dilacak di git, perintah menunjukkan beberapa hasil (log). Selain itu kosong.Sebagai contoh jika file git dilacak,
Jika file tidak git dilacak,
sumber
Hanya dua sen saya:
git ls-files | grep -x relative/path
di mana
relative/path
dapat dengan mudah ditentukan dengan menekan ditab
dalam shell pelengkapan otomatis. Tambahkan tambahan| wc -l
untuk mendapatkan hasil 1 atau 0.sumber
grep
opsi--fixed-strings
.