Apakah ada cara untuk mengetahui apakah suatu file sedang dilacak dengan menjalankan beberapa gitperintah dan memeriksa kode keluarnya?
Dengan kata lain: apakah git melacak file?
Apakah ada cara untuk mengetahui apakah suatu file sedang dilacak dengan menjalankan beberapa gitperintah dan memeriksa kode keluarnya?
Dengan kata lain: apakah git melacak file?
Jawaban:
mencoba:
git ls-files --error-unmatch <file name>
akan keluar dengan 1 jika file tidak dilacak
--error-unmatchopsi sebelum nama file untuk mendapatkan kesalahan. Entah bagaimana opsi ini hanya diterapkan pada nama file yang mengikutinya.
--), --error-unmatchdiperlakukan 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
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
}
file_nameperlu 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 --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")
git status --porcelainadalah teman Anda jika Anda perlu mengurai output dengan skrip, lihat dokumen yang tertaut itu menunjukkan beberapa opsi lain yang berguna
git status --porcelain error: unknown option Versi porselen adalah 1.6.0 :-)
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.
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.
.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,
git-ls-files test_file.c | grep.
akan keluar dengan kode nol jika file dilacak, tetapi kode keluar satu jika file tidak dilacak.
Saya menyarankan alias khusus pada Anda .gitconfig.
Anda harus melakukannya:
1) Dengan perintah git:
git config --global alias.check-file <command>
2) Mengedit ~/.gitconfigdan menambahkan baris ini pada bagian alias:
[alias]
check-file = "!f() { if [ $# -eq 0 ]; then echo 'Filename missing!'; else tracked=$(git ls-files ${1}); if [[ -z ${tracked} ]]; then echo 'File not tracked'; else echo 'File tracked'; fi; fi; }; f"
Setelah meluncurkan perintah (1) atau file yang disimpan (2), di ruang kerja Anda, Anda dapat mengujinya:
$ git check-file
$ Filename missing
$ git check-file README.md
$ File tracked
$ git check-file foo
$ File not tracked
menggunakan git logakan memberikan info tentang ini. Jika file dilacak di git, perintah menunjukkan beberapa hasil (log). Selain itu kosong.
Sebagai contoh jika file git dilacak,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
commit ad9180b772d5c64dcd79a6cbb9487bd2ef08cbfc
Author: User <someone@somedomain.com>
Date: Mon Feb 20 07:45:04 2017 -0600
fix eslint indentation errors
....
....
Jika file tidak git dilacak,
root@user-ubuntu:~/project-repo-directory# git log src/../somefile.js
root@user-ubuntu:~/project-repo-directory#
Hanya dua sen saya:
git ls-files | grep -x relative/path
di mana relative/pathdapat dengan mudah ditentukan dengan menekan di tabdalam shell pelengkapan otomatis. Tambahkan tambahan | wc -l untuk mendapatkan hasil 1 atau 0.
grepopsi --fixed-strings.