Paksa tambah meskipun file .gitignore

413

Apakah ada cara untuk memaksa gituntuk menambahkan file meskipun .gitignorefile?

Menandai
sumber
4
Pertanyaan yang lebih baik mungkin - mengapa Anda ingin melakukan itu? Jika Anda ingin file dilacak, abaikan saja (awali polanya dalam .gitignorefile dengan !, mis !dont/ignore/this/file.).
Ohad Schneider
6
@OhadSchneider Ini berguna jika Anda memaksa komit file build ke cabang lain. Beberapa proyek melakukan ini seperti StrongLoop untuk penerapan yang aman
Deminetix
5
@OhadSchneider Bagi kami, ini lebih karena kebanyakan pengembang menginstal git dengan Visual Studio 2015, yang menambahkan global gitignore ke folder pengguna. Ini tidak termasuk file seperti * .dll dan * .exe. Itu bagus untuk proyek baru kami yang hanya menggunakan paket nuget yang diambil selama pembangunan, tetapi untuk sejumlah kecil proyek lama, kami masih menggunakan dll yang direferensikan secara manual dalam solusi. Untuk proyek-proyek itu, kami ingin memasukkannya secara manual, daripada meminta setiap pengembang untuk mengomentari file * .dll dan * .exe di global gitignore.
Nullius
4
@ Nullius Tidak bisakah Anda hanya membatalkannya di tingkat yang lebih tinggi .gitignore(katakanlah, tambahkan .gitignoredi folder yang sama dengan dll, atau yang di atas, atau sesuatu)?
Ohad Schneider

Jawaban:

570

Lihat man git-add:

   -f, --force
       Allow adding otherwise ignored files.

Jadi jalankan ini

git add --force my/ignore/file.foo
Daniel Böhmer
sumber
11
Uhm itu tidak berfungsi, pada status git file tersebut masih belum ditampilkan
Tandai
5
Yah, saya mengujinya untuk memastikan itu benar-benar berfungsi dan tidak. Bisakah Anda menggambarkan lingkungan Anda (OS, versi git ...)? Inilah yang pada dasarnya saya lakukan: echo "/foo" >> .gitignore; echo "bar" > foo; git add foo # should throw an error; git add -p foo # works(tidak dapat menempelkan baris baru dalam komentar, jalankan perintah 1 oleh 1
Daniel Böhmer
4
Sama terjadi pada saya, saya sebelumnya menjalankan git update-index --asume-tidak berubah pada file saya. Saya harus membatalkannya dengan --tidak berasumsi-tidak berubah dan itu berhasil
Jako
4
Ini hanya berfungsi untuk saya menggunakan wildcard, menggunakan git 1.9.5 di Windows, bahkan setelah mencoba --tidak - menganggap-tidak berubah. "git add - f <filename>" tidak melakukan apa-apa, tetapi "git add -f *" berfungsi. Menggunakan TortoiseGit juga berfungsi.
mhenry1384
@ mhenry1384 Alasannya hanya berlaku untuk wildcard di Windows mungkin karena cara pemisah jalur digunakan. Bagi saya slash "/" berfungsi tetapi backslash "\" tidak. Fakta bahwa cmd / PowerShell mengonversi "/" ke "\" untuk kita membuatnya mudah untuk mengalami hal ini.
ohw
19

Meskipun Daniel Böhmer bekerja, Ohad Schneider menawarkan solusi yang lebih baik dalam komentar:

Jika file biasanya diabaikan, dan Anda memaksakan menambahkannya - itu dapat diabaikan secara tidak sengaja lagi di masa mendatang (seperti ketika file dihapus, kemudian komit dibuat dan file dibuat kembali.

Anda harus mengabaikannya saja di file .gitignore seperti itu: Batalkan tanda tangan subdirektori dari direktori yang diabaikan di Git

SEBAGAI
sumber
4
Ini benar. Saya menggunakan opsi --force untuk file data kecil, dan kemudian menata ulang sedikit struktur folder dan menghancurkan semua file yang dilacak secara paksa. NAMUN: .gitignoredigunakan !specific-file-name.txttanpa hierarki folder, pelacakan cara ini akan mengikuti file di sekitar repo.
Merlin
Itu tergantung pada skenario, misalnya kapan Anda ingin mengecualikan "1.txt" di semua folder, dan kadang-kadang "folder1 / *. Txt"
AS
14
Itu bukan solusi "lebih baik". Ini solusi untuk masalah yang berbeda.
aij
2

Cara lain untuk mencapainya adalah dengan mengedit sementara file gitignore, menambahkan file dan kemudian mengembalikan kembali gitignore. Rasanya agak berantakan

kumuh
sumber
10
Saya setuju, ini bukan yang ingin Anda lakukan.
Merlin