Saya memiliki masalah yang sama, kemudian saya menemukan bahwa saya menyimpan file .gitignore saya pada drive yang berbeda: face-palm:
Henry Chan
Merupakan ide yang sangat buruk untuk menyimpan barang-barang di repositori Anda dan mengabaikan perubahan di dalamnya.
Yevgeniy Afanasyev
Jawaban:
370
Pastikan bahwa Anda .gitignoreberada di root direktori kerja, dan dalam direktori tersebut jalankan git statusdan salin path ke file dari output status dan tempel ke .gitignore.
Jika itu tidak berhasil, maka kemungkinan file Anda sudah dilacak oleh Git. Anda dapat mengkonfirmasi ini melalui output dari git status. Jika file tidak terdaftar di bagian "File tidak dilacak " , maka file tersebut sudah dilacak oleh Git dan itu akan mengabaikan aturan dari .gitignorefile tersebut.
Alasan untuk mengabaikan file di Git adalah agar mereka tidak akan ditambahkan ke repositori. Jika sebelumnya Anda menambahkan file yang ingin Anda abaikan, maka file itu akan dilacak oleh Git dan aturan abaikan yang cocok akan dilewati. Git melakukan ini karena file tersebut sudah menjadi bagian dari repositori.
Untuk benar-benar mengabaikan file, Anda harus membuka dan menghapusnya dari repositori. Anda dapat melakukannya dengan menggunakan git rm --cached sites/default/settings.php. Ini menghapus file dari repositori tanpa secara fisik menghapus file (itulah yang --cacheddilakukannya). Setelah melakukan perubahan itu, file tersebut akan dihapus dari repositori, dan mengabaikannya akan berfungsi dengan baik.
Apa yang Anda maksud dengan 'root direktori kerja'? Direktori tempat repositori '.git' ditemukan?
Jonathan Leffler
Direktori yang berfungsi adalah direktori di mana .gitdirektori itu berada dan yang merupakan akar repositori itu sendiri. Seperti ketika Anda mengkloning repositori untuk /xy/kemudian /xy/adalah direktori kerja Anda dengan /xy/.git/di dalamnya.
colek
3
Terkadang Anda juga perlu melakukan git add .setelah git rm --cacheduntuk membangun kembali indeks dengan benar.
Cooper
Gagasan untuk memeriksanya dalam status git sangat brilian. Saya terus memeriksanya di Git Staging in Eclipse dan jalurnya salah. Terima kasih!
walla
1
Saya perlu menambahkan tanda -r (rekursif) karena saya juga memeriksa folder bersarang. Dalam kasus saya, saya pindah ke root folder git saya kemudian menjalankan perintah git rm --cached -r .vs / Where vs adalah folder tingkat atas yang ingin saya hapus dari pelacakan.
Devology Ltd
106
Saya mengalami ini, ini pertanyaan lama, tapi saya ingin file itu dilacak tetapi tidak melacaknya pada copy pekerjaan tertentu, untuk itu Anda dapat menjalankannya
Itu sebenarnya jawaban yang saya cari. Semua jawaban lain berasumsi bahwa file telah ditambahkan dengan git add, yang tidak selalu demikian. Dengan Acquia Cloud, file .gitignore seharusnya mengabaikan settings.php (misalnya) tetapi file tersebut disertakan dengan komit pertama. Menghapus jejak file, cukup menghapusnya dari repositori, oleh karena itu menghapusnya dari situs langsung ...
PatrickS
Membantu saya juga - terima kasih! Terpilih. Saya menduga meskipun itu hanya berlaku untuk repo git lokal dan tidak akan bertahan setelah didorong ke jarak jauh dan diklon oleh devs lain?
Ivan
1
Ya, itu hanya lokal.
Mescalito
41
.gitignore hanya akan mengabaikan file yang belum Anda tambahkan ke repositori Anda.
Jika Anda melakukan git add ., dan file ditambahkan ke indeks, .gitignore tidak akan membantu Anda. Anda harus melakukannya git rm sites/default/settings.phpuntuk menghapusnya, dan kemudian itu akan diabaikan.
terima kasih. tetapi bagaimana cara menghapus file hanya dari indeks dan bukan dari direktori kerja?
Nick.h
1
git rmharus melakukan itu, tetapi mungkin meminta Anda untuk menggunakan opsi -f yang akan menghapusnya dari direktori kerja. Saya belum menemukan ini selain untuk membuat salinan file, lakukan git rm -fdan kemudian kembalikan salinannya.
jonescb
Sama, bung. Buat salinan di suatu tempat, hapus, komit status dihapus, tambahkan kembali file dan lihat bagaimana mereka diabaikan sekarang.
Yevgeniy Afanasyev
18
Silakan gunakan perintah ini
git rm -rf --cached .
git add .
Terkadang file .gitignore tidak berfungsi meskipun benar. Alasan Git mengabaikan file adalah karena mereka tidak ditambahkan ke repositori. Jika Anda menambahkan file yang ingin Anda abaikan sebelumnya, itu akan dilacak oleh Git, dan aturan apa pun yang akan dilompati akan dilewati. Git melakukan ini karena file tersebut sudah menjadi bagian dari repositori.
Saya merasa seperti noob karena ini ... dang it Windows
Coty Embry
Adakah yang tahu mengapa pengodean file penting? Mungkin tidak membaca jalur dengan benar?
Chargnn
2
Apa yang saya lakukan untuk mengabaikan file settings.php berhasil:
git rm --cached sites / default / settings.php
komit (hingga di sini tidak berhasil)
situs yang dihapus secara manual / default / settings.php (ini berhasil)
git add.
komit (berhasil diabaikan)
Saya pikir jika ada file yang berkomitmen pada Git maka abaikan tidak berfungsi seperti yang diharapkan. Hapus saja file dan komit. Setelah itu akan diabaikan.
Ada beberapa contoh, misalnya file Konfigurasi Aplikasi, yang ingin saya lacak di git (jadi .gitignore tidak akan berfungsi), tetapi saya perlu mengubah pengaturan lokal. Saya tidak ingin git mengelola file-file ini atau menunjukkannya sebagai modifikasi. Untuk melakukan ini saya menggunakan skip-worktree:
git update-index --skip-worktree path/to/file
Anda dapat mengonfirmasi file yang dilewati dengan mendaftar file dan memeriksa baris yang dimulai dengan S untuk dilewati
git ls-files -v | grep ^S
Jika di masa depan Anda ingin git mengelola file secara lokal lagi cukup jalankan:
git update-index --no-skip-worktree path/to/file
Mescalito di atas memiliki jawaban yang bagus, tetapi itu membawa saya ke jalur yang benar
git update-index --assume-unchanged file / to / diabaikan.php
Memiliki kontrak dengan git di mana: pengguna berjanji untuk tidak mengubah file dan memungkinkan Git untuk berasumsi bahwa file tree kerja sesuai dengan apa yang dicatat dalam indeks.
Namun, saya mengubah konten file, jadi dalam kasus saya --skip-worktree adalah pilihan yang lebih baik.
Alasan lain yang mungkin - beberapa contoh klien git berjalan pada saat yang sama . Misalnya "git shell" + "GitHub Desktop", dll.
Ini terjadi pada saya, saya menggunakan "GitHub Desktop" sebagai klien utama dan mengabaikan beberapa pengaturan .gitignore baru: komit setelah komit:
Anda melakukan sesuatu.
Selanjutnya, komit: mengabaikan pengaturan .gitignore. Commit menyertakan banyak file temp yang disebutkan dalam .gitignore.
Hapus cache git; periksa apakah .gitignore adalah UTF8; hapus file -> komit -> pindahkan file kembali; lewati 1 commit - tidak ada yang membantu.
Alasan : editor Visual Studio Code sedang berjalan di latar belakang dengan repositori terbuka yang sama. VS Code memiliki kontrol git bawaan, dan ini membuat beberapa konflik.
Solusi : periksa ulang beberapa klien git tersembunyi dan gunakan hanya satu klien git sekaligus, terutama saat membersihkan cache git.
di mana repodengan demikian adalah "root" yang disebutkan di atas (saya akan menyebutnya root dari pohon kerja Anda), dan .gitignorehanya berisi sites/default/settings.php, abaikan bekerja untuk saya (dan tidak masalah apakah .gitignoreditambahkan ke repo atau tidak). Apakah ini cocok dengan tata letak repo Anda? Jika tidak, apa yang berbeda?
Yes.it persis sama dengan yours.but tidak berfungsi. Semua pola lain berfungsi. Seperti yang saya katakan masalah pasti relatif terhadap folder settings.php.
Nick.h
Saya merasa itu ide yang sangat buruk untuk menyimpan barang-barang di repositori Anda dan mengabaikan perubahan di dalamnya.
Yevgeniy Afanasyev
@YevgeniyAfanasyev kecuali untuk hal-hal seperti keluaran kompilasi, pengaturan pengguna IDE, semua file temp lainnya yang dihasilkan oleh toolchain Anda ...
Chris F Carroll
Maksud saya menjaga komitmen dalam repositori, bukan hanya file yang duduk di folder proyek. Mengapa Anda perlu file temp di repositori?
Yevgeniy Afanasyev
0
Kalau-kalau ada orang di masa depan yang memiliki masalah yang sama dengan saya:
Jika Anda menggunakan
*
!/**/
!*.*
trik untuk menghapus file biner tanpa ekstensi, pastikan SEMUA garis gitignore lainnya DI BAWAH. Git akan membaca dari .gitignore dari atas, jadi meskipun saya memiliki 'test.go' di gitignore saya, itu pertama kali dalam file, dan menjadi 'tidak ditandai' setelah
Jawaban:
Pastikan bahwa Anda
.gitignore
berada di root direktori kerja, dan dalam direktori tersebut jalankangit status
dan salin path ke file dari output status dan tempel ke.gitignore
.Jika itu tidak berhasil, maka kemungkinan file Anda sudah dilacak oleh Git. Anda dapat mengkonfirmasi ini melalui output dari
git status
. Jika file tidak terdaftar di bagian "File tidak dilacak " , maka file tersebut sudah dilacak oleh Git dan itu akan mengabaikan aturan dari.gitignore
file tersebut.Alasan untuk mengabaikan file di Git adalah agar mereka tidak akan ditambahkan ke repositori. Jika sebelumnya Anda menambahkan file yang ingin Anda abaikan, maka file itu akan dilacak oleh Git dan aturan abaikan yang cocok akan dilewati. Git melakukan ini karena file tersebut sudah menjadi bagian dari repositori.
Untuk benar-benar mengabaikan file, Anda harus membuka dan menghapusnya dari repositori. Anda dapat melakukannya dengan menggunakan
git rm --cached sites/default/settings.php
. Ini menghapus file dari repositori tanpa secara fisik menghapus file (itulah yang--cached
dilakukannya). Setelah melakukan perubahan itu, file tersebut akan dihapus dari repositori, dan mengabaikannya akan berfungsi dengan baik.sumber
.git
direktori itu berada dan yang merupakan akar repositori itu sendiri. Seperti ketika Anda mengkloning repositori untuk/xy/
kemudian/xy/
adalah direktori kerja Anda dengan/xy/.git/
di dalamnya.git add .
setelahgit rm --cached
untuk membangun kembali indeks dengan benar.Saya mengalami ini, ini pertanyaan lama, tapi saya ingin file itu dilacak tetapi tidak melacaknya pada copy pekerjaan tertentu, untuk itu Anda dapat menjalankannya
sumber
.gitignore hanya akan mengabaikan file yang belum Anda tambahkan ke repositori Anda.
Jika Anda melakukan
git add .
, dan file ditambahkan ke indeks, .gitignore tidak akan membantu Anda. Anda harus melakukannyagit rm sites/default/settings.php
untuk menghapusnya, dan kemudian itu akan diabaikan.sumber
git rm
harus melakukan itu, tetapi mungkin meminta Anda untuk menggunakan opsi -f yang akan menghapusnya dari direktori kerja. Saya belum menemukan ini selain untuk membuat salinan file, lakukangit rm -f
dan kemudian kembalikan salinannya.Silakan gunakan perintah ini
Terkadang file .gitignore tidak berfungsi meskipun benar. Alasan Git mengabaikan file adalah karena mereka tidak ditambahkan ke repositori. Jika Anda menambahkan file yang ingin Anda abaikan sebelumnya, itu akan dilacak oleh Git, dan aturan apa pun yang akan dilompati akan dilewati. Git melakukan ini karena file tersebut sudah menjadi bagian dari repositori.
sumber
Saya memiliki masalah yang sama. File didefinisikan di
.gitingore
mana terdaftar sebagai file yang tidak dilacak saat dijalankangit status
.Alasannya adalah bahwa
.gitignore
file tersebut disimpan dalamUTF-16LE
penyandian, dan bukan dalamUTF8
penyandian.Setelah mengubah penyandian
.gitignore
fileUTF8
itu berfungsi untuk saya.sumber
Apa yang saya lakukan untuk mengabaikan file settings.php berhasil:
Saya pikir jika ada file yang berkomitmen pada Git maka abaikan tidak berfungsi seperti yang diharapkan. Hapus saja file dan komit. Setelah itu akan diabaikan.
sumber
Ada beberapa contoh, misalnya file Konfigurasi Aplikasi, yang ingin saya lacak di git (jadi .gitignore tidak akan berfungsi), tetapi saya perlu mengubah pengaturan lokal. Saya tidak ingin git mengelola file-file ini atau menunjukkannya sebagai modifikasi. Untuk melakukan ini saya menggunakan skip-worktree:
Anda dapat mengonfirmasi file yang dilewati dengan mendaftar file dan memeriksa baris yang dimulai dengan S untuk dilewati
Jika di masa depan Anda ingin git mengelola file secara lokal lagi cukup jalankan:
Mescalito di atas memiliki jawaban yang bagus, tetapi itu membawa saya ke jalur yang benar
git update-index --assume-unchanged file / to / diabaikan.php
Memiliki kontrak dengan git di mana: pengguna berjanji untuk tidak mengubah file dan memungkinkan Git untuk berasumsi bahwa file tree kerja sesuai dengan apa yang dicatat dalam indeks.
Namun, saya mengubah konten file, jadi dalam kasus saya --skip-worktree adalah pilihan yang lebih baik.
Situs web Toshiharu Nishina memberikan penjelasan yang sangat baik tentang skip-worktree vs asumsi-tidak berubah: Abaikan file yang sudah dikelola dengan Git secara lokal
sumber
Alasan lain yang mungkin - beberapa contoh klien git berjalan pada saat yang sama . Misalnya "git shell" + "GitHub Desktop", dll.
Ini terjadi pada saya, saya menggunakan "GitHub Desktop" sebagai klien utama dan mengabaikan beberapa pengaturan .gitignore baru: komit setelah komit:
Alasan : editor Visual Studio Code sedang berjalan di latar belakang dengan repositori terbuka yang sama. VS Code memiliki kontrol git bawaan, dan ini membuat beberapa konflik.
Solusi : periksa ulang beberapa klien git tersembunyi dan gunakan hanya satu klien git sekaligus, terutama saat membersihkan cache git.
sumber
Pastikan .gitignore tidak memiliki ekstensi !! Tidak boleh .gitignore.txt, di windows cukup beri nama file .gitignore. dan itu akan berhasil.
sumber
Saya baru saja mencoba ini dengan git 1.7.3.1, dan diberi struktur seperti:
di mana
repo
dengan demikian adalah "root" yang disebutkan di atas (saya akan menyebutnya root dari pohon kerja Anda), dan.gitignore
hanya berisisites/default/settings.php
, abaikan bekerja untuk saya (dan tidak masalah apakah.gitignore
ditambahkan ke repo atau tidak). Apakah ini cocok dengan tata letak repo Anda? Jika tidak, apa yang berbeda?sumber
Kalau-kalau ada orang di masa depan yang memiliki masalah yang sama dengan saya:
Jika Anda menggunakan
trik untuk menghapus file biner tanpa ekstensi, pastikan SEMUA garis gitignore lainnya DI BAWAH. Git akan membaca dari .gitignore dari atas, jadi meskipun saya memiliki 'test.go' di gitignore saya, itu pertama kali dalam file, dan menjadi 'tidak ditandai' setelah
sumber
Saya mencoba sebagian besar perintah di atas pada terminal VS Code dan saya mendapat kesalahan seperti:
fatal: pathspec '[dir]/[file]' did not match any files
Saya membuka proyek di GitHub Desktop dan mengabaikannya dan berhasil.
sumber