Pertanyaan Jadikan .gitignore abaikan semuanya kecuali beberapa file


Saya mengerti bahwa file .gitignore menyelubungi file tertentu dari versi Git kontrol. Saya punya proyek (LaTeX) yang menghasilkan banyak file ekstra (.auth, .dvi, .pdf, log, dll) saat berjalan, tetapi saya tidak ingin itu dilacak.

Saya sadar bahwa saya bisa (mungkin harus) membuatnya sehingga semua file itu dimasukkan ke dalam subfolder terpisah dalam proyek, karena saya bisa mengabaikan folder itu.

Namun, apakah ada cara yang layak untuk menyimpan file output di root pohon proyek dan gunakan .gitignore untuk mengabaikan semuanya kecuali file saya melacak dengan Git? Sesuatu seperti

# Ignore everything
*

# But not these files...
script.pl
template.latex
# etc...

1168
2018-06-12 15:04


asal


Jawaban:


Sebuah awalan opsional ! yang meniadakan polanya; file apa pun yang dikecualikan oleh   pola sebelumnya akan disertakan lagi. Jika pola yang dinegasikan cocok,   ini akan mengesampingkan sumber pola prioritas yang lebih rendah.

# Ignore everything
*

# But not these files...
!.gitignore
!script.pl
!template.latex
# etc...

# ...even if they are in subdirectories
!*/

# if the files to be tracked are in subdirectories
!*/a/b/file1.txt
!*/a/b/c/*

1702
2018-06-12 15:07



Jika Anda ingin mengabaikan seluruh isi direktori kecuali satu file di dalamnya, Anda bisa menulis sepasang aturan untuk setiap direktori di jalur file. Misalnya .gitignore untuk mengabaikan folder pippo kecuali dari pippo / pluto / paperino.xml

.gitignore

pippo/*
!pippo/pluto
pippo/pluto/*
!pippo/pluto/paperino.xml

486
2018-05-01 12:31



Anda ingin menggunakannya /* dari pada * atau */ umumnya

Menggunakan * valid, tetapi berfungsi secara rekursif. Itu tidak akan melihat ke direktori dari kemudian keluar. Orang merekomendasikan menggunakan !*/ ke daftar putih direktori lagi, tetapi sebenarnya lebih baik untuk memasukkan daftar folder tertinggi ke daftar hitam /*

# Blacklist files/folders in same directory as the .gitignore file
/*

# Whitelist some files
!.gitignore
!README.md

# Ignore all files named .DS_Store or ending with .log
**/.DS_Store
**.log

# Whitelist folder/a/b1/ and folder/a/b2/
# trailing "/" is optional for folders, may match file though.
# "/" is NOT optional when followed by a *
!folder/
folder/*
!folder/a/
folder/a/*
!folder/a/b1/
!folder/a/b2/

Kode di atas akan mengabaikan semua file kecuali .gitignore, README.md, folder/a/b1/ dan folder/a/b2/ dan semuanya ada di dua folder itu. (Dan .DS_Store dan *.log file akan diabaikan dalam folder itu.)

Tentunya saya bisa melakukan mis. !/folder atau !/.gitignore terlalu.

Info lebih lanjut: http://git-scm.com/docs/gitignore


139
2018-04-29 00:31



Sedikit lebih spesifik:

Contoh: Abaikan semuanya webroot/cache - tapi tetap webroot/cache/.htaccess.

Perhatikan garis miring (/) setelah cache map:

GAGAL

webroot/cache*
!webroot/cache/.htaccess

BEKERJA

webroot/cache/*
!webroot/cache/.htaccess

57
2017-08-13 13:23



# ignore these
*
# except foo
!foo

49
2018-06-12 15:06



Untuk mengabaikan beberapa file dalam direktori, Anda harus melakukan ini di urutan yang benar:

Misalnya, abaikan semuanya di folder "aplikasi" kecuali index.php dan folder "config" perhatikan urutannya.

Anda harus meniadakan menginginkan yang Anda inginkan terlebih dahulu.

GAGAL

application/*

!application/config/*

!application/index.php

BEKERJA

!application/config/*

!application/index.php

application/*


23
2017-08-09 08:39



Kamu dapat memakai git config status.showUntrackedFiles no dan semua file yang tidak terlacak akan disembunyikan dari Anda. Lihat man git-config untuk detailnya.


18
2018-06-12 15:20



Untuk mengecualikan folder dari .gitignore, hal berikut bisa dilakukan.

!app/

app/*
!app/bower_components/

app/bower_components/*
!app/bower_components/highcharts/

Ini akan mengabaikan semua file / subfolder di dalamnya bower_components kecuali untuk /highcharts.


12
2017-11-10 14:21



Ada banyak pertanyaan serupa tentang ini, jadi saya akan memposting apa yang saya tulis sebelumnya:

Satu-satunya cara saya mendapatkan ini untuk bekerja pada mesin saya adalah melakukannya dengan cara ini:

# Ignore all directories, and all sub-directories, and it's contents:
*/*

#Now ignore all files in the current directory 
#(This fails to ignore files without a ".", for example 
#'file.txt' works, but 
#'file' doesn't):
*.*

#Only Include these specific directories and subdirectories and files if you wish:
!wordpress/somefile.jpg
!wordpress/
!wordpress/*/
!wordpress/*/wp-content/
!wordpress/*/wp-content/themes/
!wordpress/*/wp-content/themes/*
!wordpress/*/wp-content/themes/*/*
!wordpress/*/wp-content/themes/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*
!wordpress/*/wp-content/themes/*/*/*/*/*

Perhatikan bagaimana Anda harus secara eksplisit mengizinkan konten untuk setiap level yang ingin Anda sertakan. Jadi jika saya memiliki subdirektori 5 dalam tema, saya masih perlu menjelaskannya.

Ini dari komentar @ Yarin di sini: https://stackoverflow.com/a/5250314/1696153

Ini adalah topik yang bermanfaat:

Saya juga mencoba

*
*/*
**/**

dan **/wp-content/themes/**

atau /wp-content/themes/**/*

Tidak ada yang berhasil untuk saya juga. Banyak jejak dan kesalahan!


9
2018-04-29 23:40