Tambahkan .gitignore ke gitignore

140

Apakah mungkin menambahkan .gitignorefile ke .gitignoredirinya sendiri?

.gitignore

Tapi tidak berhasil

Saya tidak ingin melihatnya dalam file yang diedit

7ochem
sumber
8
mengapa kamu ingin melakukan itu? cukup lakukan perubahan Anda. .gitignoreseharusnya menjadi bagian dari repositori Anda, mencantumkan pola file yang merupakan sampah untuk proyek.
KurzedMetal
1
.gitignoreharus menjadi bagian dari repositori Anda, sehingga semua orang di tim Anda mengabaikan atau memeriksa file yang sama. Hanya karena .gitignoreada di folder kode Anda di suatu tempat tidak berarti Anda harus menggunakannya.
Ryan Lundy
kemungkinan duplikat dari Bagaimana cara saya meminta Git untuk mengabaikan ".gitignore"?
Orang Brasil itu,
Anda dapat menggunakan git rm --cached .gitignoredan menghapus .gitignore
hassanzadeh.sd

Jawaban:

170

Tujuan .gitignorefile adalah untuk mencegah semua orang yang berkolaborasi pada suatu proyek dari melakukan secara tidak sengaja beberapa file umum dalam suatu proyek, seperti file cache yang dihasilkan. Oleh karena itu Anda tidak boleh mengabaikan .gitignore, karena itu seharusnya dimasukkan dalam repositori.

Jika Anda ingin mengabaikan file hanya dalam satu repositori tetapi ingin menghindari melakukan daftar abaikan (misalnya untuk file pribadi) Anda dapat menambahkannya ke .git/info/excludedalam repositori itu.

Jika Anda ingin mengabaikan file tertentu di setiap repositori di mesin Anda, Anda dapat membuat file ~/.gitignore_globaldan kemudian jalankan

git config --global core.excludesfile ~/.gitignore_global
Lars Nyström
sumber
36

.Gitignore dapat mengabaikan dirinya sendiri jika belum pernah masuk:

mhaase@ubuntu:~$ git --version
git version 1.7.9.5
mhaase@ubuntu:~$ git init temp
Initialized empty Git repository in /home/mhaase/temp/.git/
mhaase@ubuntu:~$ cd temp
mhaase@ubuntu:~/temp$ touch .gitignore foo bar baz bat
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
#       bar
#       bat
#       baz
#       foo
mhaase@ubuntu:~/temp$ echo "foo" >> .gitignore
mhaase@ubuntu:~/temp$ echo ".gitignore" >> .gitignore
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       bar
#       bat
#       baz
nothing added to commit but untracked files present (use "git add" to track)

Jika Anda check in .gitignore (sebelum Anda mengatakannya untuk mengabaikannya sendiri), maka itu akan selalu muncul dalam status git, bahkan jika Anda kemudian mengubahnya untuk mengabaikannya sendiri.

Mark E. Haase
sumber
1
Tepat, ini kasus saya. Saya ingin memiliki lokal .gitignoreuntuk bekerja dengan git-svn, yang seharusnya tidak ada yang melihat. Jadi saya hanya menambahkannya ke dirinya sendiri dan itu berhasil. Tetapi kemudian saya mencari di Google untuk melihat apakah beberapa orang yang tegang akan menjelaskan kepada orang lain bagaimana ini "buruk". Jawaban ini harus diterima, dan kemudian saya akan membatalkan .git/info/excludesaran juga. Jadi itu hanya perlu dilacak ... Tidak terlalu mengejutkan, setidaknya jika Anda pernah "subverted" (svn).
Tomasz Gandor
Saya punya .gitignorefile mendapat cadangan terlebih dahulu. Lalu saya menggunakan git rm .gitignoredan melakukan perubahan itu. Akhirnya, tambahkan dan komit .gitignorefile lagi dengan aturan untuk .gitignore. Berhasil!
qzhang
4
Untuk memperbaiki ini, Anda dapat menjalankan git rm --cached .gitignore.
Gideon
19

Sebenarnya tidak ada alasan bagus untuk melakukan ini. Jika Anda ingin file diabaikan hanya untuk klon Anda , tambahkan ke .git/info/exclude, bukan di .gitignorefile.

Daenyth
sumber
saya mendapatkan "Tidak dapat menyelesaikan operasi karena ada perubahan pada file berikut" dan file itu mencantumkannya yang saya miliki di kecualikan. Ada yang tahu kenapa?
Paul McCarthy
3

Setelah Anda memasukkan .gitignorefile gitignore Anda, coba yang berikut ini,

git rm -r --cached .
git add --all
git commit -m "ignoring gitignore"
git push --set-upstream origin master

Seharusnya berfungsi meskipun seperti yang sudah dikatakan, mengabaikan gitignore dapat menjadi kontra-produktif jika repo Anda dibagikan oleh banyak pengguna.

Arnab Sanyal
sumber
2

Ya kamu bisa; Anda masih melihatnya di file yang diedit karena masih dilacak oleh git, dan file yang dilacak oleh git selalu ditandai sebagai dimodifikasi walaupun mereka ada di .gitignore. Jadi lepaskan saja.

Tetapi mengapa tidak melakukan atau mengatur ulang perubahan yang Anda miliki di sana? Ini adalah cara yang jauh lebih baik untuk menghapusnya dari status ... Perlu diketahui juga bahwa setiap klon baru dari repo Anda harus menambahkannya .gitignore, yang dapat mengganggu.

CharlesB
sumber
Ya, dan Anda mungkin harus menghapusnya secara terpisah dari git got rm --cached .gitignore, mungkin.
Tadeck
git rm --cached .gitignore sedang menghapus dari git. Itu destruktif dan tidak diinginkan. Bagaimana caranya agar .gitignore diabaikan untuk klon lokal?
javadba
0

Anda dapat mencapai ini dengan menulis ini ke file .gitignore Anda. The *akan menambahkan segala sesuatu untuk mengabaikan daftar dan kemudian !.gitignoreakan menghapus file gitignore dari daftar abaikan.

*
!.gitignore
Ankit Singh
sumber
3
Ini mencapai kebalikan dari apa yang OP inginkan
Dmitry Parzhitsky
Ya benar, saya sudah menyebutkan hal yang sama. *akan mengabaikan segalanya. Termasuk .gitignorefile.
Ankit Singh
1
Maksudku, OP sedang mencoba untuk menghapus para .gitignorefile dari basis kode (dengan menambahkannya ke itu sendiri, yang tidak benar-benar masuk akal, tapi siapa aku untuk hakim). Di sini saya dapat melihat saran yang memastikan bahwa file tidak pernah diabaikan, yang pada gilirannya berarti ada di ( ditambahkan ke) basis kode
Dmitry Parzhitsky
Itu benar. Pertanyaan itu sendiri tampak bengkok. Tapi baiklah.
Ankit Singh