Saya menggunakan git untuk menyinkronkan ke phonegap saat menguji di browser asli ponsel. Karena itu saya memiliki baris berikut:
var isPhoneGap = false;
Jelas saya mengubah ini saat membangun, tetapi adakah cara saya dapat mengatur git untuk mengabaikan satu baris ini atau apakah saya harus pergi dan memasukkannya ke dalam file sendiri dan mengabaikannya seperti itu?
Saya menggunakan Gitx dan terminal di OSX 10.6.
Jawaban:
Jika file Anda berjenis tertentu, Anda dapat mendeklarasikan driver filter konten , yang dapat Anda deklarasikan dalam
.gitattributes
file (seperti yang ditampilkan dalam "Perluasan kata kunci" dari " Atribut Git "):(Anda bahkan dapat mengatur filter itu untuk file tertentu , jika Anda mau)
Melaksanakan:
yourFilterName.smudge
(dipicu padagit checkout
) danyourFilterName.clean
(dipicu padagit add
)File Anda akan tampak tidak berubah pada
git status
, namun versi yang diperiksa akan memiliki nilai yang tepat untukisPhoneGap
.sumber
git diff or
status git`, mengabaikan filternya? Jadi saya masih bisa melihat apa yang berbeda? Kasus penggunaan saya adalah untuk log debug ... yang akhirnya saya ingin menghapus ... @jthill @VonCsh ".git/helper.sh"
memastikan untuk melewati parameter apa pun ke sed"$@"
(saya berasumsi hanya jalur file yang dilewatkan).Kamu bisa memakai
untuk mengabaikan perubahan satu file yang tidak ingin Anda lacak. Saya menggunakan solusi ini ketika saya perlu memiliki file di repositori tetapi file ini memiliki beberapa bagian yang berubah sehingga saya tidak perlu selalu melacak.
Ketika file memiliki perubahan yang penting, Anda harus melakukan ini:
Juga, lihat Git doc update-index for
--[no-]assume-unchanged
parameter.sumber
--skip-worktree
ini adalah pilihan yang lebih baik untuk sebagian besar tujuan. stackoverflow.com/a/39583010/4233593git commit -a
bebas untuk melakukan perubahan itu). 'Gitx harus membiarkan Anda menjalankan atau mengabaikan baris individu (Anda mungkin sudah mengetahuinya), tetapi Anda harus melakukannya setiap kali Anda berkomitmen. Saya pikir akan lebih baik untuk memiliki file konfigurasi per target penyebaran (Anda dapat versi itu), dan beberapa parameter runtime untuk bagaimanapun Anda memulai server (seperti
./myserver --config=whatever.js
).sumber
Melanjutkan https://stackoverflow.com/a/20574486/4935114 , @Mike mengusulkan untuk membuat
pre-commit
pengait yang akan adagrep
di file bertahap untuk baris yang mungkin ingin diabaikan. Pengait akan memeriksa apakah garis itu dipentaskan. Jika demikian, ituecho
adalah peringatan dan ituexit
dengan kode1
sehingga proses komit tidak akan dilanjutkan.Terinspirasi oleh jawaban @ Mike , saya menemukan diri saya mungkin menggunakan versi yang lebih baik dari hooknya yang secara otomatis
reset
s (dengan-p
bendera) baris spesifik yang ingin kita abaikan.Saya tidak yakin hook ini akan bekerja untuk situasi di mana Anda memiliki banyak file dengan baris ini untuk diabaikan, tetapi
pre-commit
hook ini mencari perubahan pada baris ini di file tertentubuildVars.java
. Skrip hook terlihat seperti ini ketika saya mengujinya di mesin saya.Penjelasan
Apa yang saya lakukan adalah menggemakan urutan kontrol yang mencari regex
isPhoneGap
selamareset
proses interaktif . Jadi meniru pengguna yang menekan/
untuk mencariisPhoneGap
, menekany
ketika ditanya apakah dia ingin membuang tambalan ini dan akhirnya menekanq
untuk keluar dari interaktifreset
.Proses tambalan terbalik interaktif didokumentasikan di sini: https://git-scm.com/docs/git-add#git-add-patch
CATATAN: Skrip di atas mengasumsikan bahwa variabel
interactive.singleKey
adalahfalse
. Jika Anda mengkonfigurasi milik Anda ketrue
, hapus salah satu$'\n'
dariecho
perintah tepat setelah peringatan.sumber
Beginilah cara Anda melakukannya dengan filter git :
ATAU
*.rb filter=gitignore
, yaitu menjalankan filter bernamagitignore
pada semua*.rb
filegitignore
filter digitconfig
:$ git config --global filter.gitignore.clean "sed '/#gitignore$/'d"
, yaitu hapus baris ini$ git config --global filter.gitignore.smudge cat
, yaitu tidak melakukan apa-apa saat menarik file dari repoCatatan:
Tentu saja, ini untuk file ruby, diterapkan saat baris diakhiri dengan
#gitignore
, diterapkan secara global dalam~/.gitconfig
. Ubah ini sesuka Anda untuk tujuan Anda.Peringatan!!
Ini membuat file kerja Anda berbeda dari repo (tentu saja). Setiap check out atau rebasing berarti baris ini akan hilang! Trik ini mungkin tampak tidak berguna karena garis-garis ini berulang kali hilang saat check out, rebase, atau pull, tetapi saya memiliki kasus penggunaan khusus untuk memanfaatkannya.
Saat
git stash save "proj1-debug"
filter tidak aktif (nonaktifkan untuk sementara waktugitconfig
atau sesuatu). Dengan cara ini, kode debug saya selalu dapatgit stash apply
d ke kode saya kapan saja tanpa takut baris ini pernah tidak sengaja dilakukan.Saya memiliki ide yang mungkin untuk mengatasi masalah ini, tetapi saya akan mencoba menerapkannya lain kali.
Terima kasih kepada Rudi dan jw013 karena telah menyebutkan filter git dan atribut git.
sumber
Pengandar filter konten bukanlah solusi yang baik. Anda mungkin dapat menyembunyikan baris ini dari
git status
/ etc tetapi tidak benar-benar diabaikan. Segera setelah Anda mengubah nilainya, direktori kerja Anda akan ditandai kotor meskipun perubahannya mungkin tidak terlihat.Jika Anda benar-benar ingin baris ini keluar dari kontrol versi, mengubahnya menjadi argumen baris perintah atau menempatkannya di file include atau build yang diabaikan mungkin merupakan satu-satunya cara praktis.
sumber
Saya menduga ini mungkin sesuatu yang muncul di lebih dari satu baris sumber Anda.
Saya pikir akan lebih bersih jika memiliki file .userbuildconfig dari beberapa jenis yang baru saja Anda sertakan dan memiliki default yang dicentang. Kemudian Anda dapat menggunakan saran Carlos untuk menandai file itu sendiri sebagai anggap tidak berubah. Dengan cara ini, perubahan lain pada file di mana Anda perlu memeriksa pengaturan tidak terlewatkan.
Ini dapat memungkinkan Anda menyetel makro preprocessor secara lokal (Atau untuk java seperti ini https://stackoverflow.com/a/1813873/1270965 ).
sumber
Nggak. Anda hanya dapat mengabaikan file satu per satu (dan lainnya) karena baris dalam .gitignore cocok dengan nama file dan bukan konten file. Anda telah menyebutkan solusi untuk ini, yaitu mengabaikan satu file yang berisi konten yang ingin Anda abaikan.
sumber