İçin application/
eklediğim klasöre sahibim .gitignore
. application/
Klasörün içinde klasör bulunur application/language/gr
. Bu klasörü nasıl ekleyebilirim?
Bunu denedim
application/
!application/language/gr/
şanssız ...
İçin application/
eklediğim klasöre sahibim .gitignore
. application/
Klasörün içinde klasör bulunur application/language/gr
. Bu klasörü nasıl ekleyebilirim?
Bunu denedim
application/
!application/language/gr/
şanssız ...
Yanıtlar:
Hariç tutursanız application/
, altındaki her şey her zaman hariç tutulur (daha sonra negatif hariç tutma kalıbı (“unignore”) altında bir şeyle eşleşebilse bile application/
).
İstediğinizi yapmak için, “unignore” etmek istediğiniz herhangi bir şeyin her üst dizinini “unignore” etmeniz gerekir. Genellikle bu durum için kurallar çift olarak yazılır: bir dizindeki her şeyi göz ardı edin, ancak belirli bir alt dizini yoksayın.
# you can skip this first one if it is not already excluded by prior patterns
!application/
application/*
!application/language/
application/language/*
!application/language/gr/
Not
Firar /*
önemlidir:
dir/
adlı bir dizini dir
ve altındaki her şeyi (dolaylı olarak) hariç tutar . Git dir/
hiçbir zaman altındaki hiçbir şeye bakmayacak dir
ve bu nedenle hiçbir zaman “hariç tutma” örüntülerinin hiçbirini altındaki hiçbir şeye uygulamaz dir
.dir/*
hakkında hiçbir şey söylemez dir
; sadece altındaki her şeyi hariç tutar dir
. İle dir/*
Git, dir
diğer kalıplara içeriğin bir kısmını "hariç tutma" şansı vererek doğrudan içeriğini işleyecektir ( !dir/sub/
)./*
önemlidir. Bir dizin hariç tutulursa Git hiçbir zaman bu dizinin içeriğine bakmaz. Örüntü dir/
adlı bir dizini dir
ve altındaki her şeyi (dolaylı olarak) hariç tutar . Örüntü kendisi dir/*
hakkında hiçbir şey söylemez dir
; sadece altındaki her şeyi hariç tutar dir
. dir/
Git ile hiçbir zaman altındaki hiçbir şeye bakmayacak dir
ve bu nedenle hiçbir zaman “hariç tutma” örüntülerinin hiçbirini altındaki hiçbir şeye uygulamaz dir
. İle dir/*
Git, dir
diğer kalıplara içeriğin bir kısmını "hariç tutma" şansı vererek doğrudan içeriğini işleyecektir ( !dir/sub/
).
git add -f .
git status
en üst düzey dizinin ekleneceğini söyleyecektir. Bunun yerine, git add
üst düzey git status
dizinden birini yapın ve desenle eşleşen dosyaların alt kümesini (umarız) listeleyecektir.
59856de Teslim gelen Karsten Blees (kblees) Git için 1.9 / 2.0 (Q1 2014) açıklık getirmektedir durumda olduğu:
gitignore.txt
: hariç tutulan dizinlerin özyinelemeli niteliğini netleştirme
!
Deseni reddeden isteğe bağlı bir önek " "; önceki bir kalıp tarafından hariç tutulan eşleşen dosyalar tekrar dahil edilir.Bir dosyanın üst dizini hariç tutulursa bir dosyayı yeniden eklemek mümkün değildir. (
*
)
(*
: git 2.8+ sürümünde belirli koşullar karşılanmadığı sürece, aşağıya bakın)
Git, performans nedenlerinden dolayı hariç tutulan dizinleri listelemez, bu nedenle içerilen dosyalardaki desenlerin, nerede tanımlandıklarına bakılmaksızın etkisi yoktur.Bir değişmez " " ile başlayan desenler
\
için ilk "!
" önüne bir ters eğik çizgi (" ") koyun!
, örneğin "\!important!.txt
".Belirli bir dizin dışındaki her şeyi hariç tutmak için örnek
foo/bar
(/*
eğik çizgi olmadan - joker karakteri de içindeki her şeyi hariç tutarfoo/bar
):
--------------------------------------------------------------
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
--------------------------------------------------------------
Senin durumunda:
application/*
!application/**/
application/language/*
!application/language/**/
!application/language/gr/**
Belirli bir klasördeki dosyaları beyaz listeye alabilmek için önce klasörleri beyaz listeye almanız gerekir .
Güncelleme Şubat / Mart 2016:
Git 2.9.x / 2.10 (2016 ortası?) İle, yeniden eklenen yolda joker karakter yoksa, dosyanın üst dizini hariç tutulursa bir dosyayı yeniden eklemek mümkün olabilir .
Nguyễn Thái Ngọc Duy ( pclouds
) bu özelliği eklemeye çalışıyor:
Yani git 2.9+ ile, bu gerçekten işe yarayabilirdi, ama sonuçta geri döndü:
application/
!application/language/gr/
v2.8.1.windows.1
ama işe yaramıyor :(
application/
+ !application/language/gr/
deseninin onaylanması beklendiği gibi çalışıyor.
@Chris Johnsen'ın cevabı harika, ancak Git'in daha yeni sürümleri (1.8.2 veya üstü) ile, biraz daha kestirme çözüm için kullanabileceğiniz çift yıldız deseni var:
# assuming the root folder you want to ignore is 'application'
application/**/*
# the subfolder(s) you want to track:
!application/language/gr/
Bu şekilde, izlemek istediğiniz alt klasörün üst dizinini "unignore" etmek zorunda kalmazsınız.
Git 2.17.0 ile (Bu sürümden ne kadar erken olduğundan emin değilim. 1.8.2'ye geri dönme olasılığı), **
desen (ler) inize giden her alt dizin için hariç tutulan desenlerle birlikte çalışır. Örneğin:
# assuming the root folder you want to ignore is 'application'
application/**
# Explicitly track certain content nested in the 'application' folder:
!application/language/
!application/language/gr/
!application/language/gr/** # Example adding all files & folder in the 'gr' folder
!application/language/gr/SomeFile.txt # Example adding specific file in the 'gr' folder
**
sıfır alt klasörlerle *
eşleşebilir language
ve eşleştirilip hariç tutularak dahil edilmesini önler gr
. Chris Johnson'un önerdiği ebeveyn zincirinin tamamı hala gerekli görünüyor.
/www/**/* !/www/config.xml !/www/res
config.xml üzerinde çalışmıyor ve res dizini hala yok sayılıyor.
!/www/res/
. folder/**/*
Deseni kullanabilirsiniz , ancak yine de eklenmesini istediğiniz her bir alt dizin için hariç tutmanız gerekir. Hala yoksay / hariç tut kombinasyonundan daha kısa ve okunabilir.
Bununla ilgili bir sürü benzer soru var, bu yüzden daha önce yazdıklarımı göndereceğim:
Bunu makinemde çalışmanın tek yolu bu şekilde yapmaktı:
# 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:
!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/*/*/*/*/*
Eklemek istediğiniz her düzey için içeriğe nasıl açıkça izin vermeniz gerektiğine dikkat edin. Bu yüzden temalar altında 5 alt dizinim varsa, hala bunu açıklamam gerekiyor.
Bu @ Yarin'in yorumundan: https://stackoverflow.com/a/5250314/1696153
Bunlar yararlı konulardı:
Ben de denedim
*
*/*
**/**
ve **/wp-content/themes/**
veya /wp-content/themes/**/*
Bunların hiçbiri benim için çalışmadı. Çok sayıda deneme yanılma!
!
kurallarınızı en alta yerleştirdiğinizden emin olun .
Sadece bunun gerçekten işe yaradığını gördüm .
**/node_modules/*
!**/node_modules/keep-dir
En basit ve muhtemelen en iyi yol, dosyaları manuel olarak eklemeyi denemektir (genellikle bu, .gitignore
stil stili kurallarına öncelik verir ):
git add /path/to/module
Hatta isteyebilirsiniz -N
niyet eklemek size önermek, bayrak olacak ama hemen değil, bunları ekleyin. Bunu sık sık yeni dosyalar için yapıyorum, henüz sahneye çıkmaya hazır değilim.
Bu , kolayca yinelenen bir KG olabileceğine dair yanıtın bir kopyasıdır. Daha fazla görünürlük için burada yeniden gönderiyorum - gitignore kurallarını karıştırmamak daha kolay.
Yani, birçok programcı düğüm kullandığından. bu soruyu karşılayan kullanım durumu , örneğin node_modules
bir modül hariç tutmaktır module-a
:
!node_modules/
node_modules/*
!node_modules/module-a/
2.10.2.windows.1
.
Ek bir cevap ekleyin:
!/.vs/ <== include this folder to source control, folder only, nothing else
/.vs/* <== but ignore all files and sub-folder inside this folder
!/.vs/ProjectSettings.json <== but include this file to source control
!/.vs/config/ <== then include this folder to source control, folder only, nothing else
!/.vs/config/* <== then include all files inside the folder
sonuç:
Özellikle eski Git sürümleri için önerilerin çoğu iyi sonuç vermez. Bu durumda, diğer ayarlara bakılmaksızın içeriğin dahil edilmesini istediğim dizine ayrı bir .gitignore koyarım ve gerekenlere izin veririm.
Örneğin: /.gitignore
# ignore all .dll files
*.dll
/dependency_files/.gitignore
# include everything
!*
Yani / dependsency_files (hatta .dll dosyaları) içindeki her şey gayet iyi dahil edilmiştir.
Burada benzer bir durum buldum, burada laravel'de varsayılan olarak, .gitignore
tüm asterix kullanarak yok sayar ve sonra genel dizini geçersiz kılar.
*
!public
!.gitignore
OP senaryosuna girdiğinizde bu yeterli değildir.
Belirli bir alt klasörü işlemek istiyorsanız public
, örneğin public/products
dizininize, bir alt klasör derinliğinde dosyaları dahil etmek istediğinizi, örneğin, özellikle public/products/a/b.jpg
bu şekilde ekleseniz bile, doğru algılanmayacaklarını da eklemek istediğinizi varsayalım !/public/products
,!public/products/*
vb ..
Çözüm, hepsini geçersiz kılmak için böyle her yol seviyesi için bir giriş eklediğinizden emin olmaktır.
*
!.gitignore
!public/
!public/*/
!public/products/
!public/products/*
!public/products/*/
!public/products/*/
!public/products/*/*
Tam olarak ne istediğinizi elde etmek için dizin yapısında yürürken başka bir örnek. Not: Hariç tutmadım Library/
amaLibrary/**/*
# .gitignore file
Library/**/*
!Library/Application Support/
!Library/Application Support/Sublime Text 3/
!Library/Application Support/Sublime Text 3/Packages/
!Library/Application Support/Sublime Text 3/Packages/User/
!Library/Application Support/Sublime Text 3/Packages/User/*macro
!Library/Application Support/Sublime Text 3/Packages/User/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/*settings
!Library/Application Support/Sublime Text 3/Packages/User/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/*theme
!Library/Application Support/Sublime Text 3/Packages/User/**/
!Library/Application Support/Sublime Text 3/Packages/User/**/*macro
!Library/Application Support/Sublime Text 3/Packages/User/**/*snippet
!Library/Application Support/Sublime Text 3/Packages/User/**/*settings
!Library/Application Support/Sublime Text 3/Packages/User/**/*keymap
!Library/Application Support/Sublime Text 3/Packages/User/**/*theme
> git add Library
> git status
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
new file: Library/Application Support/Sublime Text 3/Packages/User/Default (OSX).sublime-keymap
new file: Library/Application Support/Sublime Text 3/Packages/User/ElixirSublime.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/Package Control.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/Preferences.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/RESTer.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/SublimeLinter/Monokai (SL).tmTheme
new file: Library/Application Support/Sublime Text 3/Packages/User/TextPastryHistory.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/ZenTabs.sublime-settings
new file: Library/Application Support/Sublime Text 3/Packages/User/adrian-comment.sublime-macro
new file: Library/Application Support/Sublime Text 3/Packages/User/json-pretty-generate.sublime-snippet
new file: Library/Application Support/Sublime Text 3/Packages/User/raise-exception.sublime-snippet
new file: Library/Application Support/Sublime Text 3/Packages/User/trailing_spaces.sublime-settings
gitignore - Yok sayılacak kasıtsız izlenen dosyaları belirtir.
Belirli bir dizin foo / bar dışındaki her şeyi hariç tutma örneği ( / * - eğik çizgi olmadan, joker karakter de foo / bar içindeki her şeyi hariç tutar ):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
WordPress için başka bir örnek :
!/wp-content
wp-content/*
!/wp-content/plugins
wp-content/plugins/*
!wp-content/plugins/my-awesome-plugin
Burada daha fazla bilgi: https://git-scm.com/docs/gitignore
Sık sık CLI'de bu geçici çözümü kullanıyorum, burada yapılandırmak yerine, doğrudan veya yinelenen tarafından göz ardı edilen dizinlere rağmen istediğim (alt) dizinleri tanımladığım .gitignore
ayrı bir .include
dosya oluşturuyorum.gitignore
.
Bu yüzden ek olarak
git add `cat .include`
hazırlama sırasında, taahhütte bulunmadan önce.
OP için, .include
bu satırları olan bir kullanmanızı öneririz :
<parent_folder_path>/application/language/gr/*
NOT: Kullanmak cat
, .include
$ HOME (veya başka bir belirli dizinin) belirtilmesi için takma adların (içinde ) kullanılmasına izin vermez . Hattı olmasıdır homedir/app1/*
geçirilen git add
Yukarıdaki komut olarak görünür kullanılarak git add 'homedir/app1/*'
( '') tek tırnak karakterleri ve çevreleyen yardımcı olur ve böylece, tırnak içinde her karakterin değişmez değerini korur (örneğin takma homedir çalışmasını) (bakınız Bash Tek tırnak işareti ).
İşte burada.include
benim depoda kullandığım bir dosya örneği .
/home/abhirup/token.txt
/home/abhirup/.include
/home/abhirup/.vim/*
/home/abhirup/.viminfo
/home/abhirup/.bashrc
/home/abhirup/.vimrc
/home/abhirup/.condarc
Jquery üretim js dosyalarını izlemek istedim ve bu çalıştı:
node_modules/*
!node_modules/jquery
node_modules/jquery/*
!node_modules/jquery/dist/*
JetBrains IntelliJ IDEA .gitignore yapılandırması, burada hariç wholde .idea
klasörünü hariç tutmalıyım .idea/runConfigurations
:
.idea
!.idea/
.idea/*
!.idea/runConfigurations/
bkz. https://github.com/daggerok/gitignore-idea-runYapılandırmalar
.gitignore
kalıp biçimi" dokümantasyonu daha da netleşmiştir (Aralık 2013). Aşağıdaki cevabımı