Saya punya file gitignore yang membuat git mengabaikan *.dllfile, dan itu sebenarnya perilaku yang saya inginkan. Namun, jika saya ingin pengecualian (yaitu untuk dapat melakukan foo.dll), bagaimana saya bisa mencapai ini?
Saya punya file gitignore yang membuat git mengabaikan *.dllfile, dan itu sebenarnya perilaku yang saya inginkan. Namun, jika saya ingin pengecualian (yaitu untuk dapat melakukan foo.dll), bagaimana saya bisa mencapai ini?
Jawaban:
Menggunakan:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
Dari gitignore :
Awalan opsional! yang meniadakan pola; file yang cocok tidak termasuk oleh pola sebelumnya akan dimasukkan lagi. Jika pola yang dinegasikan cocok, ini akan menimpa sumber pola prioritas yang lebih rendah.
*.dlldi dalamnya, dan gitignore proyek saya memiliki !Libs/*.dlltetapi tampaknya tidak berfungsi.
!Libs/**/*.dll.
!**/Libs/*.dll, tergantung pada struktur folder.
!foo.dlltidak membatalkan perintah. Jika saya menambahkan komentar pada baris yang terpisah itu berfungsi.
Git mengabaikan folder jika Anda menulis:
/js
tetapi tidak dapat menambahkan pengecualian jika Anda lakukan:
!/js/jqueryatau !/js/jquery/atau!/js/jquery/*
Anda harus menulis:
/js/*
dan hanya dengan begitu Anda bisa kecuali subfolder seperti ini
!/js/jquery
!/js/jquery/xyzlibTidak akan diabaikan ...
/js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? Terasa seperti cara yang lucu untuk melakukannya ...
Anda bisa saja git add -f path/to/foo.dll.
.gitignore mengabaikan hanya file untuk pelacakan biasa dan hal-hal seperti git add .
-fgit memberitahu untuk memaksa penambahan file ini dalam repo karena mungkin mengabaikannya terlebih dahulu karena Anda.gitignore
Untuk mengecualikan semua yang ada di direktori, tetapi beberapa subdirektori, lakukan hal berikut:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
Sumber: https://gist.github.com/444295
Cukup tambahkan !sebelum aturan pengecualian.
Menurut halaman manual gitignore :
Pola memiliki format berikut:
...
- Awalan opsional! yang meniadakan pola; file yang cocok tidak termasuk oleh pola sebelumnya akan dimasukkan lagi. Jika pola yang dinegasikan cocok, ini akan menimpa sumber pola prioritas yang lebih rendah.
!foo.dll di .gitignore, atau (setiap saat!) git add -f foo.dll
Jika Anda bekerja dengan Visual Studio dan .dll Anda berada di binfolder, maka Anda harus menambahkan pengecualian untuk folder bin itu sendiri, sebelum Anda dapat menambahkan pengecualian untuk file .dll. Misalnya
!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll
Ini karena .gitignorefile Visual Studio default termasuk pola abaikan untuk[Bbin]/
Pola ini men-zapping semua folder bin (dan akibatnya isinya), yang membuat segala upaya untuk memasukkan konten yang berlebihan (karena folder itu sendiri sudah diabaikan).
Saya dapat menemukan mengapa file saya tidak dikecualikan dengan menjalankan
git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll
dari jendela Git Bash. Ini mengembalikan [Bbin]/polanya.
Solusinya tergantung pada hubungan antara aturan abaikan git dan aturan pengecualian:
File / File di berbagai tingkatan atau File / Subfolder: Anda dapat melakukan ini:
*.suo
*.user
*.userosscache
*.sln.docstates
# ...
# Exceptions for entire subfolders
!SetupFiles/elasticsearch-5.0.0/**/*
!SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
# Exceptions for files in different levels
!SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
!SetupFiles/logstash-5.0.0/**/*.suo
Karena Git 2.7.0 Git akan mempertimbangkan pengecualian. Dari catatan rilis resmi:
- Izinkan "! / Abc / def" yang lebih baru untuk mengganti "/ abc" yang sebelumnya muncul dalam file .gitignore yang sama untuk membuatnya lebih mudah untuk mengekspresikan "semua yang ada di direktori / abc diabaikan, kecuali untuk ...".
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt