Mengabaikan direktori dalam repositori Git di Windows

1106

Bagaimana saya bisa mengabaikan direktori atau folder di Git menggunakan msysgit di Windows?

sf.
sumber
Apakah Anda ingin folder cache dikecualikan dari repositori sepenuhnya, atau hanya isinya?
Gareth
1
Saya menduga bahwa OP memiliki banyak direktori cache, yang isinya harus diabaikan, tetapi ingin memastikan bahwa direktori tersebut dibuat untuk siapa saja yang mengkloning repositori.
Mark Longair
@ Gareth: karena folder kosong tidak dilacak dengan git, jika kontennya diabaikan, folder itu juga akan, bukan?
eckes
3
Saya hanya menyebutkan bahwa karena beberapa orang menggunakan file tersembunyi (umumnya .gitkeep) untuk menunjukkan direktori yang harus disimpan
Gareth
2
adalah /pada akhirnya apa yang membuatnya tahu itu direktori yang harus diabaikan?
Charlie Parker

Jawaban:

1595

Buat file dengan nama .gitignoredi direktori proyek Anda. Abaikan direktori dengan memasukkan nama direktori ke dalam file (dengan garis miring ditambahkan):

dir_to_ignore/

Informasi lebih lanjut ada di sini .

rebus
sumber
130
Di jendela cmd prompt Anda dapat menggunakan 'edit .gitignore' atau 'notepad .gitignore' untuk membuat file yang benar.
Joey Green
44
Atau Anda juga dapat menggunakan 'touch .gitignore' dari dalam command prompt windows git bash dan itu akan membuat file dengan nama yang benar yang kemudian dapat diedit oleh notepad atau sejenisnya ...
SGB
39
Atau cukup buat file bernama .gitignore. dengan explorer dan edit dengan notepad (trailing dot akan dihapus). Dengan begitu Anda tidak perlu menggunakan command prompt.
P. Galbraith
6
Atau Anda dapat vim .gitignore dari terminal. :)
MollyCat
34
Atau, yang secara mengejutkan belum disebutkan meskipun itu adalah cara tercepat, cukup ketik "echo folder_to_ignore >> .gitignore" di konsol.
Godsmith
205

Secara default, Windows Explorer akan ditampilkan .gitignorepadahal sebenarnya nama filenya .gitignore.txt.

Git tidak akan digunakan .gitignore.txt

Dan Anda tidak dapat mengubah nama file menjadi .gitignore, karena Windows Explorer berpikir itu file tipe gitignore tanpa nama.

Solusi baris tanpa perintah:

Anda dapat mengganti nama file menjadi ".gitignore." , dan itu akan membuat ".gitignore"
gelombang otak
sumber
46
Itu bekerja? Saya selalu mengatakan kepada orang-orang untuk membuka notepad dan dalam dialog Save As ketik nama file yang dikelilingi oleh doublequotes, jadi misalnya ".gitignore"dan menyimpannya tanpa secara otomatis menambahkan ekstensi.
Arrowmaster
9
Rapi. Termasuk periode trailing tidak bekerja. Explorer menghapus periode terakhir, menghasilkan file bernama ".gitignore". Saya pikir metode kutipan lebih bersih dan cenderung membuat kejutan.
Triynko
4
Atau, dalam dialog Simpan Sebagai, ubah jenis file menjadi "Semua File ( . )" - maka Windows tidak akan menambahkan ekstensi apa pun.
OsakaWebbie
5
atau di git bash cukup ketik "touch .gitignore" di folder Anda
Rayjax
3
".gitignore."- Ini trik yang bagus! Saya selalu memiliki masalah dengan .htaccessjuga ...
Obmerk Kronen
105

Tampaknya untuk mengabaikan file dan direktori ada dua cara utama:

  1. .gitignore

    • Menempatkan .gitignorefile ke dalam root repositori Anda di samping .gitfolder (di Windows, pastikan Anda melihat ekstensi file yang benar dan kemudian buat .gitignore.(dengan titik di bagian akhir untuk membuat ekstensi file kosong))
    • Membuat konfigurasi global ~/.gitignore_globaldan berjalan git config --global core.excludesfile ~/.gitignore_globaluntuk menambahkan ini ke konfigurasi Git Anda

    Catatan: file yang dilacak sebelum dapat dilacak dengan menjalankan git rm --cached filename

  2. Kecualikan repositori - Untuk file lokal yang tidak perlu dibagi, Anda cukup menambahkan pola file atau direktori ke file .git/info/exclude. Aturan tesis tidak dilakukan, sehingga tidak terlihat oleh pengguna lain . Informasi lebih lanjut ada di sini .

Untuk membuat pengecualian dalam daftar file yang diabaikan, lihat pertanyaan ini .

Vairis
sumber
36
pekerjaan bagus menunjukkan git rm --cached <filename>. Benar-benar penting untuk repo yang ada SEBELUM Anda membuat.gitignore
MaurerPower
2
git rm --cached <filename> memperbaiki masalah yang saya alami dengan .gitignore :)
JeremyFelix
1
Yeah git rm - nama file yang di-cache sangat penting. Itu membuat saya gila karena git masih menampilkan file yang saya jelas-jelas dinyatakan diabaikan (dibuat gitignore setelah komit awal). Terima kasih banyak!
Potaito
1
Memecahkan masalah saya. Git melacak folder vendor di repositori laravel saya walaupun saya telah menambahkan folder vendor di gitignore. Terima kasih banyak.
Jayant
44

Saya punya beberapa masalah membuat file di Windows Explorer dengan .di awal.

Solusinya adalah masuk ke commandshell dan membuat file baru menggunakan "edit".

sf.
sumber
2
atau hanya menambahkan tambahan .di akhir sehingga penjelajah berhenti berpikir .gitignoreekstensi. Kemudian pada entri bahwa trailing dot tanpa ekstensi baru saja dimakan dan Anda dibiarkan dengan .gitignore TL; DR: coba .gitignore..gitignore
beri
43

Untuk menginstruksikan Git untuk mengabaikan file atau folder tertentu, Anda harus membuat .gitignorefile.

Tetapi di Windows Explorer Anda harus memberikan nama untuk file tersebut. Anda tidak dapat membuat file hanya dengan ekstensi. Caranya adalah membuat file teks kosong dan pergi ke command prompt dan ubah nama file menjadi .gitignore:

ren "New Text Document.txt" .gitignore

Sekarang buka file dengan editor teks favorit Anda dan tambahkan nama file / folder yang ingin Anda abaikan. Anda juga dapat menggunakan wildcard seperti ini: *.txt.

Mahes
sumber
15
Atau cukup: echo dir_to_ignore /> .gitignore
Oliver
2
Atau type nul > .gitignoreuntuk membuat file kosong
Castro Roy
Atau panggil saja file tersebut .gitignore.ketika ekstensi file tidak disembunyikan di penjelajah Windows Anda
Vairis
22

Jika Anda ingin mempertahankan folder dan bukan file di dalamnya, cukup masukkan file ".gitignore" di folder dengan "*" sebagai konten. File ini akan membuat Git mengabaikan semua konten dari repositori. Tetapi .gitignoreakan dimasukkan dalam repositori Anda.

$ git add path/to/folder/.gitignore

Jika Anda menambahkan folder kosong, Anda menerima pesan ini (.gitignore adalah file tersembunyi)

The following paths are ignored by one of your .gitignore files:
path/to/folder/.gitignore
Use -f if you really want to add them.
fatal: no files added

Jadi, gunakan "-f" untuk memaksa menambahkan:

$ git add path/to/folder/.gitignore -f
sensorario
sumber
19

Di Windows ada tangkapan tambahan dengan garis miring. Tidak termasuk direktori tunggal di .gitignore with

dir_to_exclude /

mungkin akan berfungsi, tetapi mengecualikan semua direktori dengan

/

menyebabkan masalah ketika Anda memiliki nama file dengan spasi (seperti my file.txt) di direktori Anda: Git Bash lolos dari spasi ini dengan backslash (seperti my\ file.txt) dan Git untuk Windows tidak membedakan antara /dan \.

Untuk mengecualikan semua direktori, gunakan lebih baik:

** /

Dua tanda bintang berturut-turut menandakan konten direktori.

berjalan cepat
sumber
15

Juga di \.git\infodirektori proyek Anda ada file pengecualian yang secara efektif sama dengan .gitignore(saya pikir). Anda dapat menambahkan file dan direktori untuk diabaikan dalam hal itu.

Si3
sumber
Saya suka pendekatan ini, saya tidak bisa bergaul dengan path di sana, saya ingin mengabaikan folder di repo utama, bagaimana caranya?
Shimmy Weitzhandler
Tapi bukankah Anda seharusnya meninggalkan file dalam git saja (memanipulasi konten melalui cara resmi)?
Peter Mortensen
13

Kalau-kalau Anda perlu mengecualikan sub folder Anda dapat menggunakan **wildcard untuk mengecualikan setiap tingkat sub direktori.

**/build/output/Debug/
Makanlah di Joes
sumber
12

Untuk mengabaikan seluruh direktori di Git, cara termudah adalah memasukkan file .gitignore ke dalam direktori target yang hanya berisi "*".

Contoh ilustratif,

Contoh Sistem

/root/
    .gitignore
    /dirA/
        someFile1.txt
        someFile2.txt
    /dirB/
        .gitignore
        someFile3.txt
        someFile4.txt

Tujuan

  • abaikan isi / dirB /

Tingkat Atas .gitignore (/root/.gitignore)

  • Di sinilah info standar gitignore Anda digunakan

Direktori Diabaikan .gitignore (/root/dirB.gitignore)

  • File ini hanya dibaca sebagai '*' dan direktori tersebut diabaikan sepenuhnya, dengan sendirinya dan semua file!

Dan sesederhana itu :)

J-Dizzle
sumber
10

Ketika semuanya gagal coba edit file

/.git/info/exclude

dan menambahkan direktori yang Anda inginkan di akhir file, seperti ini:

# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
assets/
compiled/

Saya menambahkan folder "aset" dan "dikompilasi" ke daftar file dan direktori untuk diabaikan.

Xedret
sumber
1
Saya menggunakan Atom pada Windows 10. Ini berfungsi! Terima kasih Bung!
Putu De
Saya mencoba semua yang lain dengan konfigurasi saya saat ini dan ini adalah jawaban pasti utama saya.
Xedret
10

Anda dapat membuat file ".gitignore" dengan konten:

*
!.gitignore

Ini bekerja untuk saya.

Claudionor Oliveira
sumber
2
Ini adalah jawaban terbaik, juga membawa manfaat tambahan dalam penyebaran dan pemeliharaan proyek.
Nitin ...
Siapa itu "simples" ?
Peter Mortensen
9

Di Unix:

touch .gitignore

Di Windows:

echo > .gitignore

Perintah-perintah ini dieksekusi di terminal akan membuat a .gitignore file di lokasi saat ini.

Kemudian tambahkan saja informasi ke .gitignorefile ini (menggunakan Notepad ++ misalnya) file atau folder mana yang harus diabaikan. Simpan perubahan Anda. Itu dia :)

Informasi lebih lanjut: .gitignore

fvolodimir
sumber
8

Saya punya beberapa masalah dengan Git untuk mengambil .gitignorefile di Windows. The $GIT_DIR/info/excludeberkas selalu tampaknya bekerja sekalipun.

Kelemahan dari pendekatan ini, bagaimanapun, adalah bahwa file-file dalam $GIT_DIRdirektori tidak termasuk dalam check-in, dan karenanya tidak dibagikan.

ps $GIT_DIRbiasanya folder tersembunyi bernama.git

Jason
sumber
Ya, git di windows benar-benar rewel tentang .gitignore - file kecualikan lokal melakukan apa yang saya butuhkan. Terima kasih!
andersop
6

Saya berasumsi masalahnya adalah bahwa pohon kerja Anda seperti:

a-cache/foo
a-cache/index.html
b-cache/bar
b-cache/foo
b-cache/index.html
.gitignore

... dengan yang .gitignoreAnda jelaskan. Ini akan memberi Anda git statusoutput seperti:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
#    a-cache/
#    b-cache/

... jika itu index.htmlfile belum ditambahkan ke repositori. (Git melihat bahwa ada file yang belum disimpan dalam direktori cache, tetapi hanya melaporkan direktori.) Untuk memperbaiki ini, pastikan bahwa Anda telah menambahkan dan melakukan index.htmlfile:

git add *cache/index.html
git commit -m "Adding index.html files to the cache directories"

... dan git statuskemudian Anda akan terlihat seperti:

$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    .gitignore
nothing added to commit but untracked files present (use "git add" to track)

(Tentunya kamu juga ingin berkomitmen .gitignore. Aku hanya malas dengan test case ini.)

Mark Longair
sumber
1
Anda mungkin tidak ingin berkomitmen Gitignore terutama karena Anda mungkin ingin melacak perubahan untuk itu, dan begitu juga tim Anda (jika Anda bekerja dengan satu). Lihat stackoverflow.com/a/767213/123033
Dave Everitt
2
@ Dave Everitt: Itulah mengapa saya berkata, "Jelas Anda memang ingin melakukan .gitignore juga".
Mark Longair
6

Di Windows dan Mac, jika Anda ingin mengabaikan folder bernama Flower_Data_Folder di direktori saat ini, Anda dapat melakukannya:

echo Flower_Data_Folder >> .gitignore

Jika sebuah file bernama data.txt:

echo data.txt >> .gitignore

Jika itu jalan seperti "Data / passwords.txt"

echo "Data/passwords.txt" >> .gitignore. 
Olusola Omosola
sumber
2

Saya memiliki masalah serupa. Saya bekerja pada rantai alat Windows dengan repositori bersama dengan orang-orang Linux, dan mereka dengan senang hati membuat file dengan nama yang sama (kecuali untuk kasus) di folder yang diberikan.

Efeknya adalah saya dapat mengkloning repositori dan segera memiliki lusinan file yang 'dimodifikasi' yang, jika saya check-in, akan membuat kekacauan.

Saya memiliki Windows diatur ke case sensitif dan Git untuk tidak mengabaikan kasus, tetapi masih gagal (dalam panggilan Win32 API rupanya).

Jika saya gitignore file maka saya harus ingat untuk tidak melacak file .gitignore.

Tetapi saya menemukan jawaban yang bagus di sini:

http://archive.robwilkerson.org/2010/03/02/git-tip-ignore-changes-to-tracked-files/index.html

Chris Aaaaa
sumber
Tautan tersebut tampaknya rusak (pertama-tama dialihkan ke versi 'https'): "Koneksi Aman Gagal. Terjadi kesalahan selama koneksi ke archive.robwilkerson.org. PR_END_OF_FILE_ERROR"
Peter Mortensen
0

Cukup buat .gitignorefile di folder proyek Anda Lalu tambahkan nama folder di dalamnya untuk contoh:

frontend/node_modules
DINA TAKLIT
sumber