.gitignore mengecualikan file tertentu

94

Saya mencoba menggunakan .gitignorefile untuk mengecualikan templates.jsterletak di public/app/folder. .gitignoreFile saya terlihat seperti ini:

/vendor
/node_modules
composer.phar
composer.lock
.DS_Store
templates.js

Tetapi ketika saya memeriksa di Git Gui, templates.jsfile tersebut masih ditampilkan di dalamnya. Bagaimana saya bisa secara khusus mengecualikan file menggunakan .gitignore?

pengguna1995781
sumber
2
Apakah itu berarti file tersebut sudah ditambahkan ke repositori sebelumnya? .gitignorehanya mengabaikan konten yang akan ditambahkan.
Willem Van Onsem
2
@CommuSoft Ya, ini telah ditambahkan ke repositori sebelumnya. Jadi, bagaimana cara mengecualikannya sekarang? Apakah cara saya melakukannya dengan .gitignorebenar?
pengguna1995781

Jawaban:

152

Berbeda dengan apa yang mungkin disarankan oleh nama "abaikan". .gitignorehanya dikonsultasikan ketika Anda git addmengajukan: dengan kata lain, file yang sudah ditambahkan ke repositori (indeks) tidak akan dikecualikan berdasarkan .gitignore.

Pertama Anda lebih baik memodifikasi .gitignoresedemikian rupa sehingga file tersebut tidak lagi ditambahkan. Tambahkan baris berikut ke .gitignorefile:

public/app/template.js

Selanjutnya Anda perlu mengecualikan file dari repositori. Mungkin Anda tidak ingin menghapus file dari sistem file Anda, ini dapat dilakukan dengan:

git rm --cached public/app/template.js

The --cachedbendera memastikan file tidak akan dihapus dari sistem file Anda. (Jika tidak penting, Anda dapat menggunakan git rm public/app/template.js, tetapi ini akan menghapus file ).

Latar Belakang

Alasan .gitignoretidak digunakan secara proaktif adalah karena terkadang Anda mungkin ingin mengganti file .gitignore. Katakanlah misalnya Anda tidak ingin melacak *.logfile, Anda dapat menentukan *.logdi .gitignore. Tetapi jika ada yang ingin Anda lacak, Anda dapat menambahkan git add -f some.log. The -fpasukan bendera gituntuk menambahkan file.

Willem Van Onsem
sumber
seorang penyelamat, memiliki kredensial saya terbuka untuk umum
mLstudent33
21

Setelah sebuah file 'ditambahkan' ke repositori git satu kali, itu akan terus dilacak terlepas dari apakah itu terdaftar dalam file .gitignore atau tidak.

Saya menduga Anda telah menambahkan file template.js sebelumnya, dalam hal ini akan terus ada perubahan yang terlacak, sampai Anda menghapusnya dari repositori. Setelah file dihapus dari repositori, file tersebut akan diabaikan dengan benar melalui file .gitignore.

Cara untuk menghapus file dari git repository (command-line) tanpa menghapusnya adalah

git rm --cached FILENAME

Kemudian setelah Anda melakukannya dan mencoba berkomitmen dengan file di gitignore Anda, itu tidak akan berhasil.

Perhatikan bahwa jika Anda secara khusus menambahkan file yang Anda miliki di gitignore, penambahan file secara manual akan menimpa gitignore.

BTownTKD
sumber
Terima kasih sayang, "git rm --cached FILENAME" bekerja seperti pesona :)
Kamlesh
11

Jika Anda sudah melacak file ( git adddi atasnya dan git commit),.gitignore tidak akan membantu.

Saya yakin apa yang Anda inginkan adalah menghentikan pelacakan file, lalu gunakan .gitignoreuntuk mengecualikannya. Untuk berhenti melacak file tetapi tetap menyimpan file, gunakan:

git rm --cached <file>

Ross
sumber
tidak dv, tapi saya pikir Anda mungkin harus memilih kata-kata Anda dengan lebih baik. menyimpannya di repositori agak berbeda dengan menyimpannya di sistem file lokal Anda . Repositori tidak memetakan pada sistem file ...
Willem Van Onsem
@CommuSoft Diperbaiki untuk beberapa kepuasan, saya tidak terlalu berhati-hati karena orang lain menjawabnya dengan lebih baik. Terima kasih untuk sarannya.
Ross
7

Dalam hal ini Anda dapat berhenti melacak templates.jsdengan

git rm --cached public/app/templates.js

Seperti yang dijelaskan orang lain, .gitignorehanya mengabaikan konten yang akan ditambahkan. Misalnya, jika Anda sering menggunakan git add .dan memiliki templates.jsdi Anda .gitignore, maka git tidak akan menambahkannya.

Thomas Hughes
sumber