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?
fwiw, kakek dari jawaban duplikat pada topik ini - yang harus Anda perhatikan - mungkin akan membuat .gitignore mengabaikan semuanya kecuali beberapa file - aktivitas yang sangat teratur dan beberapa jawaban yang baik. Saya penggemar tertentu dari jawaban ini , yang tampaknya jelas dan menyeluruh.
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.
Lihat juga jawaban dari @Matiss Jurgelis - tambahan penting
Dan
7
Bisakah saya menambahkan pengecualian ke gitignore proyek saya dan bukan global gitignore saya? Misalnya, jika saya ingin menyertakan semua DLL dalam direktori? Gitignore_global saya ada *.dlldi dalamnya, dan gitignore proyek saya memiliki !Libs/*.dlltetapi tampaknya tidak berfungsi.
Joel Kinzel
1
@ Jakkin, Anda harus mencoba !Libs/**/*.dll.
Rosberg Linhares
@RosbergLinhares Atau !**/Libs/*.dll, tergantung pada struktur folder.
JAB
2
Terima kasih, tetapi pada mac menambahkan komentar pada baris yang sama dengan !foo.dlltidak membatalkan perintah. Jika saya menambahkan komentar pada baris yang terpisah itu berfungsi.
Giacomo
261
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
Hanya untuk lebih jelasnya, -fgit memberitahu untuk memaksa penambahan file ini dalam repo karena mungkin mengabaikannya terlebih dahulu karena Anda.gitignore
RPDeshaies
Yang hebat jika Anda hanya memiliki satu file, kurang berguna jika Anda memerlukan pola
Liam
19
Untuk mengecualikan semua yang ada di direktori, tetapi beberapa subdirektori, lakukan hal 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.
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
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
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 ...".
Jawaban:
Menggunakan:
Dari gitignore :
sumber
*.dll
di dalamnya, dan gitignore proyek saya memiliki!Libs/*.dll
tetapi tampaknya tidak berfungsi.!Libs/**/*.dll
.!**/Libs/*.dll
, tergantung pada struktur folder.!foo.dll
tidak membatalkan perintah. Jika saya menambahkan komentar pada baris yang terpisah itu berfungsi.Git mengabaikan folder jika Anda menulis:
tetapi tidak dapat menambahkan pengecualian jika Anda lakukan:
!/js/jquery
atau!/js/jquery/
atau!/js/jquery/*
Anda harus menulis:
dan hanya dengan begitu Anda bisa kecuali subfolder seperti ini
sumber
!/js/jquery/xyzlib
Tidak 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 sepertigit add .
sumber
-f
git 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:
Sumber: https://gist.github.com/444295
sumber
Cukup tambahkan
!
sebelum aturan pengecualian.Menurut halaman manual gitignore :
sumber
!foo.dll
di .gitignore, atau (setiap saat!)git add -f foo.dll
sumber
Jika Anda bekerja dengan Visual Studio dan .dll Anda berada di
bin
folder, maka Anda harus menambahkan pengecualian untuk folder bin itu sendiri, sebelum Anda dapat menambahkan pengecualian untuk file .dll. MisalnyaIni karena
.gitignore
file 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
dari jendela Git Bash. Ini mengembalikan
[Bbin]/
polanya.sumber
Solusinya tergantung pada hubungan antara aturan abaikan git dan aturan pengecualian:
File / File di berbagai tingkatan atau File / Subfolder: Anda dapat melakukan ini:
sumber
Karena Git 2.7.0 Git akan mempertimbangkan pengecualian. Dari catatan rilis resmi:
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt
sumber