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?

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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.