mengabaikan direktori 'bin' pada proyek git

1236

Saya memiliki struktur direktori seperti ini:

.git/
.gitignore
main/
  ...
tools/
  ...
...

Di dalam main dan tools, dan direktori lain, pada level apa pun, mungkin ada direktori 'bin', yang ingin saya abaikan (dan saya juga ingin mengabaikan semuanya di bawahnya). Saya sudah mencoba masing-masing pola ini di .gitignore tetapi tidak satupun yang berfungsi:

/**/bin/**/*
/./**/bin/**/*
./**/bin/**/*
**/bin/**/*
*/bin/**/*
bin/**/*
/**/bin/* #and the others with just * at the end too

Adakah yang bisa membantu saya? Pola pertama (yang menurut saya harusnya berfungsi) berfungsi dengan baik jika saya melakukan ini:

/main/**/bin/**/*

Tetapi saya tidak ingin memiliki entri untuk setiap direktori tingkat atas dan saya tidak ingin harus memodifikasi .gitignore setiap kali saya menambahkan yang baru.

Ini pada Windows menggunakan msysgit terbaru.

Sunting: satu hal lagi, ada file dan direktori yang memiliki substring 'bin' dalam nama mereka, saya tidak ingin itu diabaikan :)

Ben Hymers
sumber
14
Mungkin seseorang akan menemukan hal yang membantu: jika Anda memiliki beberapa repositori dan masing-masing memiliki file .gitignore yang sama, Anda dapat meletakkannya di lokasi "umum" dan meluncurkan> git config --global core.excludesfile ~ / .gitignore_global Parameter terakhir adalah path ke lokasi umum. PS Saya baru mengenal git dan tidak yakin apakah itu rekomendasi 'praktik terbaik'. Jadi tolong beri tahu saya jika Anda tidak ingin melakukan itu. Terima kasih.
Budda
The **sintaks tampaknya sekarang (Maret 2013, git 1.8.2) secara resmi didokumentasikan: lihat jawaban saya di bawah
VonC
2
Jika ada yang ingin membaca versi terbaru dari halaman manual yang sebenarnya, lihat gitignore (5) Halaman Manual .
opsi yang lebih ramah jika Anda bosan membaca esai untuk informasi satu baris di atlassian.com/git/tutorials/saving-changes/…
suazithustra

Jawaban:

1834

Sebelum versi 1.8.2, **tidak memiliki arti khusus dalam .gitignore. Pada 1.8.2 git mendukung **untuk berarti nol atau lebih sub-direktori (lihat catatan rilis ).

Cara mengabaikan semua direktori yang disebut bin di mana saja di bawah level saat ini dalam pohon direktori adalah dengan .gitignorefile dengan pola:

bin/

Di manhalaman tersebut, ada contoh mengabaikan direktori yang disebut foomenggunakan pola analog.

Sunting: Jika Anda sudah memiliki folder bin di indeks git Anda yang tidak ingin Anda lacak maka Anda harus menghapusnya secara eksplisit. Git tidak akan berhenti melacak jalur yang sudah dilacak hanya karena sekarang cocok dengan .gitignorepola baru . Jalankan folder hapus ( rm ) dari indeks saja ( --cached ) secara berulang ( -r ). Contoh baris perintah untuk folder root bin:

git rm -r --cached bin
CB Bailey
sumber
72
Dimulai dengan git 1.8.2, git akan menerima **dalam .gitignorefile (sumber: 1.8.2 changelog )
Carlos Campderrós
15
adalah binsama dari bin/?
Nisba
29
@Nisba, mereka berbeda, binakan mengabaikan file bernama bin, sedangkan bin/untuk direktori bernama bin
Rani Kheir
8
karena saya jatuh dalam masalah ini: nama folder di git-command IS case sensitive :) "bin! = Bin" - mungkin saya menyisihkan seseorang beberapa menit dengan petunjuk ini :)
dba
1
Di windows10 Anda tidak dapat membuat file .gitignore, Anda harus membuat gitignore.txt dan kemudian menjalankan ren gitignore.txt .gitignore di command prompt untuk membuat file ini
shabby
463

The .gitignoremimpi Anda tampaknya menjadi:

bin/

di tingkat atas.

Michael Krelin - hacker
sumber
Terima kasih banyak atas bantuannya, jangan lupa untuk checkout file yang diabaikan contoh: git checkout bin *
Chris Sim
1
letakkan di gitignore_global
μολὼν.λαβέ
@ GAlexander, mengapa orang ingin mengabaikan bin / direktori secara global? Mereka sering memiliki konten yang diversi. Dan global abaikan tidak akan memengaruhi pengguna repositori lainnya.
Michael Krelin - hacker
234

Saya pikir perlu disebutkan untuk pemula git:

Jika Anda sudah memiliki file yang dicentang, dan Anda ingin mengabaikannya, Git tidak akan mengabaikan file jika Anda menambahkan aturan nanti . Dalam kasus tersebut, Anda harus membuka kembali file terlebih dahulu, dengan menjalankan perintah berikut di terminal Anda:

git rm --cached

Jadi jika Anda ingin menambahkan untuk mengabaikan beberapa direktori di repositori lokal Anda (yang sudah ada) setelah mengedit .gitignore Anda ingin menjalankan ini pada direktori root Anda

git rm --cached -r .
git add .

Ini pada dasarnya akan 'menyegarkan' repo lokal Anda dan menghapus stage file yang diabaikan.

Lihat:

http://git-scm.com/docs/git-rm ,

https://help.github.com/articles/ignoring-files/

Plancys
sumber
jika saya biasanya melakukan git add -Akomitmen saya, bisakah saya menggunakannya? dan bisakah saya mengganti titik dengan -A di baris pertama juga?
ajax333221
69

Sebelumnya **tidak pernah bekerja dengan baik, tetapi sejak git 1.8.2 (8 Maret 2013) , tampaknya disebutkan dan didukung secara eksplisit:

Pola .gitignoredan .gitattributesfile dapat memiliki **/, sebagai pola yang cocok dengan 0 atau lebih tingkat subdirektori .

Misalnya " foo/**/bar" cocok " bar" dalam " foo" sendiri atau dalam subdirektori " foo".

Dalam kasus Anda, itu berarti baris ini sekarang mungkin didukung:

/main/**/bin/
VONC
sumber
46
[Bb]in/

cocok dengan huruf besar dan kecil

wisbucky
sumber
2
[B]in/menjadi satu-satunya huruf besar
Gank
Bagaimana membiarkan hanya Binfolder yang diabaikan dan biarkan binkomit ke git? [B]in/akan melakukan Bindan bin.
Gank
5
Ini harus dilakukan, @ Terima kasih: Bin/ !bin/
Marco G
34

Saya tidak melihatnya disebutkan di sini, tetapi ini tampaknya case-sensitive. Setelah saya mengubah / Bin file diabaikan seperti yang diharapkan.

Cory
sumber
3
Ini bukan jawaban untuk pertanyaan awal yang secara eksplisit tentang bin, bukan Bin.
CB Bailey
50
Meskipun bukan jawaban, itu menambah kelengkapan untuk orang lain yang mencari masalah yang sama (saya sendiri, baru saja).
Jay
25

[Bb]in akan menyelesaikan masalah, tapi ... Di sini daftar yang lebih luas dari hal-hal yang harus Anda abaikan (daftar sampel oleh GitExtension):

#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
Jaider
sumber
3
Catatan: Hal-hal seperti ini harus ada di gitignore GLOBAL Anda (biasanya di direktori home Anda.) Proyek gitignore hanya boleh mengabaikan hal-hal khusus untuk proyek Anda (mis. File untuk aplikasi C.)
BraveNewCurrency
18

Jika Anda mencari .gitignorefile global hebat untuk solusi Visual Studio (.NET) apa pun - Saya sarankan Anda untuk menggunakan ini: https://github.com/github/gitignore/blob/master/VisualStudio.gitignore

AFAIK memiliki yang paling komprehensif .gitignoreuntuk proyek .NET.

Jochen van Wylick
sumber
5
Ini tidak benar-benar menjawab pertanyaan, tetapi justru itulah yang saya cari.
Dave
18

Langkah 1: Tambahkan konten berikut ke file .gitignore.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/

# Visual Studio 2015 cache/options directory
.vs/

Langkah 2: Pastikan mulai berlaku

Jika masalah masih ada, itu karena pengaturan di .gitignore hanya dapat mengabaikan file yang awalnya tidak dilacak . Jika beberapa file telah disertakan dalam sistem kontrol versi, maka memodifikasi .gitignore tidak valid. Untuk menyelesaikan masalah ini sepenuhnya, Anda perlu membuka Git Bash atau Package Manager Console (lihat tangkapan layar di bawah) untuk menjalankan perintah berikut di folder root repositori.

$ git rm -r --cached .
$ git add .
$ git commit -m 'Update .gitignore'

Konsol PM Maka masalah akan sepenuhnya terpecahkan.

Bravo Yeung
sumber
8

Secara harfiah tidak ada jawaban yang benar-benar bekerja untuk saya; satu-satunya yang bekerja untuk saya adalah (di Linux):

**/bin
(yes without the / in the end)

git version 2.18.0 
AnthonyC
sumber
Apakah itu mengabaikan semua folder yang disebutkan bindalam sub-direktori juga?
vineeshvs
5

Sebagai pemberitahuan;

Jika Anda berpikir tentang .gitignoretidak bekerja dengan cara (jadi ditambahkan foo/*folder di dalamnya tetapi git statusmasih menunjukkan konten folder yang diubah atau sesuatu seperti ini), maka Anda dapat menggunakan perintah ini;

git checkout -- foo/*

K-Gun
sumber
3

untuk 2.13.3 dan selanjutnya, hanya menulis nampan di file .gitignore Anda harus mengabaikan nampan dan semua subdirektori dan file-nya

tempat sampah

Nikhil Karanjkar
sumber
2

Menambahkan ** / bin / ke file .gitignore melakukan trik untuk saya (Catatan: folder bin tidak ditambahkan ke indeks).

Dhwaneel
sumber
1

Jika pola di dalamnya .gitignoreberakhir dengan garis miring /, hanya akan menemukan kecocokan dengan direktori.

Dengan kata lain, bin/akan cocok dengan direktori bindan jalur di bawahnya, tetapi tidak akan cocok dengan file biasa atau tautan simbolik bin.


Jika polanya tidak mengandung garis miring , seperti dalam binGit memperlakukannya sebagai pola glob shell (serakah). Jadi yang terbaik adalah menggunakan yang sederhana /bin.

bin tidak akan menjadi solusi terbaik untuk masalah khusus ini.

prosti
sumber
Apakah maksud Anda 'mulai dengan' a /?
vineeshvs
0

Dalam kasus saya, penyandian file gitignore bermasalah, periksa apakah itu UTF-8

Jacek Plesnar
sumber