git mengabaikan semua file dari tipe tertentu, kecuali yang ada di subfolder tertentu

192

Saya memiliki struktur direktori seperti ini:

  • akar
    • folder1
      • abc.json
      • def.json
      • Somedir
        • lebih. json
    • folder2
      • qwe.json
      • rty.json
    • spek
      • mock1.json
      • mock2.json
      • Somedir
        • more_mocks.json

Sekarang menggunakan a .gitignoreSaya ingin mengabaikan semua *.jsonfile kecuali yang ada di spec. Saya tidak ingin menggunakan .gitignorein folder1dan folder2karena ada satu ton ini dan mereka akan ditambahkan ke banyak, dan saya yakin saya akan lupa untuk memindahkan .gitignorefile yang tepat di tempatnya.

Selain itu mungkin ada lebih banyak direktori bersarang dengan file json, dan aturan ini perlu berlaku untuk semua subdirektori juga.

Jadi bagaimana cara saya mengabaikan semua file jenis, kecuali untuk subdirektori tertentu?

Alex Wayne
sumber

Jawaban:

302

Awalan opsional !yang meniadakan pola; setiap file yang cocok dikecualikan oleh pola sebelumnya akan dimasukkan lagi. Jika pola yang dinegasikan cocok, ini akan menimpa sumber pola prioritas yang lebih rendah.

http://schacon.github.com/git/gitignore.html

*.json
!spec/*.json
Amber
sumber
4
Anda juga bisa menambahkan .gitignore ke spec yang mengandung! / *. Json, jika Anda mau.
David Mitchell
2
Terima kasih! Meskipun dalam kasus saya, saya menyadari bahwa saya tidak ingin mengabaikan apa pun di direktori spec saya sama sekali. Jadi saya bisa lolos dengan sangat sederhana !spec. Bekerja seperti pesona.
Alex Wayne
7
Sementara jawaban Amber bekerja ketika spec adalah direktori di bawah tingkat atas (yaitu / spec), itu tidak berfungsi untuk saya ketika spec adalah subdirektori, misalnya / a / spec atau a / b / spec. Menggunakan git 1.7.5.4
Peter Lewis
7
@PeterLewis (untuk pengunjung masa depan): kasus seperti itu dapat ditangani dengan membuat file .gitignore di subdirektori yang relevan.
cmbuckley
3
Solusi ini bagi saya hanya mengabaikan jsonfile specsecara langsung, bukan yang ada di somedirsubdirektori dari pertanyaan. Saya perlu menggunakan !spec/**/*.jsonuntuk memastikan more_mocks.jsonitu dilakukan juga.
Leith