Git deposuna boş bir dizin (dosya içermeyen) nasıl ekleyebilirim?
Git deposuna boş bir dizin (dosya içermeyen) nasıl ekleyebilirim?
3996
Cevap sayısını say: 30
Bir dizini (neredeyse) boş bırakmanın başka bir yolu (depoda)
.gitignore bu dizinin içinde bu dört satırı içeren bir dosya oluşturmaktır :
# Ignore everything in this directory * # Except this file !.gitignore
O zaman m104'ün çözümünde yapmanız gereken şekilde emri almanız gerekmez .
Bu, bir git durumu yaptığınızda, bu dizindeki dosyaların "izlenmeyen" olarak görünmemesini de sağlar.
@GreenAsJade adlı kullanıcının yorumuna kalıcı yapma :
Bence, bu çözümün tam olarak soruyu istediği şeyi yaptığını, ancak belki de bu soruya bakan pek çok insanın arayacağı bir şey değil. Bu çözüm dizinin boş kalmasını garanti eder. "Gerçekten burada dosyaları kontrol etmek istemiyorum" yazıyor. "Burada teslim edilecek herhangi bir dosya yok, ancak buradaki dizine ihtiyacım var, dosyalar daha sonra geliyor olabilir" ifadesinin aksine.
3861
Yapamazsın Git SSS bölümüne bakın .
Şu anda git indeksinin (evreleme alanı) tasarımı sadece dosyaların listelenmesine izin veriyor ve boş dizinlerin değiştirilmesine izin verecek değişikliği yapacak yetkin kimse bu durumu düzeltecek kadar önemsemedi.
İçlerine dosya eklenirken dizinler otomatik olarak eklenir. Yani, dizinler asla depoya eklenmek zorunda değildir ve kendi başlarına takip edilmezler.
"
git add <dir>" Diyebilirsiniz ve orada dosyalar eklenir.
Ödeme sırasında gerçekten bir dizine ihtiyacınız varsa içinde bir dosya oluşturmalısınız. .gitignore bu amaç için iyi çalışıyor; boş bırakabilir veya dizinde görünmesini beklediğiniz dosyaların adlarını girebilirsiniz.
1053
Dizinde adı verilen boş bir dosya oluşturun
.gitkeep ve bunu ekleyin.
687
Bu README dosyasını her zaman dizinde, bunun neden bu kadar boş, dizinde depolanmasını istediğinin bir açıklamasıyla birlikte koyabilirsiniz.
411
touch .keep
Linux'ta bu, adında boş bir dosya oluşturur
.keep .
.gitkeep Birincisi Git'e agnostik olduğu için bu isim tercih edilir , ikincisi Git'e özgüdür. İkincisi, başka bir kullanıcının belirttiği gibi,
.git önek kuralı Git'in kullandığı dosya ve dizinler için ayrılmalıdır.
Elbette bu, dosyanın varlığının uygulamanızın bozulmasına neden olmamasını gerektirir.
312
İlk önce ilk şeyler:
Boş bir dizin Git versiyonlama sisteminin altındaki bir ağacın parçası olamaz .
Sadece takip edilmeyecek. Ancak, boş dizinlerin "sürümlendirilmesinin" anlamlı olabileceği senaryolar vardır, örneğin:
cache/veya
logs/dizinler gibi bir klasör oluşturmak
.gitignore
Birçok kullanıcı şunları önerir:
READMEDizini boş bırakmamak için bir dosyayı veya bazı içeriği olan başka bir dosyayı yerleştirmek veya
.gitignoreSonunda, aynı şekilde # 1 yaklaşımına hizmet eden bir tür "ters mantık" (yani tüm dosyaları dahil etmek için) ile bir dosya oluşturmak .
Her iki çözüm de kesinlikle işe yararken, onları Git sürümüne anlamlı bir yaklaşımla tutarsız buluyorum.
.gitignorebir şeyi ( dosyaları saklamak ) kullanmalıyım ?
Sürüm oluşturma sistemindeki klasörün varlığını zorlamak için çağrılan boş bir dosya kullanın
.gitkeep .
Her ne kadar büyük bir fark olmasa da:
Klasörü tutmak için tek amacı olan bir dosya kullanıyorsunuz . Oraya koymak istemediğin herhangi bir bilgiyi koymazsın.
Örneğin, README'leri de, README'leri, klasör tutmak için bir mazeret olarak değil, faydalı bilgilerle kullanmalısınız.
Kaygıların ayrılması her zaman iyi bir şeydir ve
.gitignore istenmeyen dosyaları görmezden gelmek için yine de ekleyebilirsiniz .
Adlandırma
.gitkeep , dosya adının kendisinden (ve ayrıca paylaşılan bir proje ve Git deposunun temel amaçlarından biri için iyi olan diğer geliştiriciler için) bu dosyanın çok net ve anlaşılır olmasını sağlar.
286
Diğer cevaplarda açıklandığı gibi Git, hazırlama alanında boş dizinleri temsil edemez. ( Git SSS bölümüne bakın .) Ancak, bir dizin
.gitignore yalnızca bir dosya içeriyorsa, bir dizin yeterince
.gitignore boşsa, boş dizinlerdeki dosyaları yalnızca aşağıdaki yollarla oluşturabilirsiniz:
find . -type d -empty -exec touch {}/.gitignore \;
124
Andy Lester haklı, ancak dizininizin boş olması ve boş olmaması gerekiyorsa
.gitignore , oraya geçici bir çözüm olarak boş bir dosya koyabilirsiniz .
Bir yana, bu temel bir Git depolama tasarımı sorunu değil, bir uygulama konusudur. Git posta listesinde birçok kez belirtildiği gibi, bunun uygulanmamasının nedeni, kimsenin bunun için bir yama gönderecek kadar özen göstermemesi, yapılmaması veya yapılmaması gerektiğidir.
65
Ruby on oluşturma yolunda klasör log:
mkdir log && touch log/.gitkeep && git add log/.gitkeep
Şimdi log dizini ağaca dahil edilecektir. Dağıtırken süper kullanışlıdır, bu nedenle günlük dizinleri oluşturmak için bir rutin yazmak zorunda kalmazsınız.
Tomruklar yayınlayarak saklanabilir,
echo log/dev.log >> .gitignore
ama muhtemelen bunu biliyordun.
32
Git boş dizinleri izlemiyor. Daha fazla açıklama için Git SSS bölümüne bakın . Önerilen geçici çözüm, bir
.gitignore dosyayı boş dizine koymaktır . Bu çözümü sevmiyorum, çünkü
.gitignore Unix konvansiyonu tarafından "gizli". Ayrıca, dizinlerin neden boş olduğuna dair bir açıklama yok.
Boş dizine, dizinin neden boş olduğunu ve neden Git'in izlenmesi gerektiğini açıklayan bir README dosyası koymanızı öneririm. README dosyası yerinde iken, Git söz konusu olduğunda, dizin artık boş değil.
Asıl soru, neden git içindeki boş dizine ihtiyacınız var? Genellikle, derleme / çalıştırmadan önce boş bir dizin oluşturabilecek bir tür derleme betiğiniz vardır. Eğer değilse o zaman bir tane yapın. Bu, boş dizinleri git içine koymaktan çok daha iyi bir çözüm.
Demek boş bir dizine ihtiyaç duymanız için bir nedeniniz var. Bu nedeni README dosyasına koyun. Bu şekilde diğer geliştiriciler (ve gelecekteki) boş dizinin neden orada olması gerektiğini biliyor. Ayrıca, boş dizini gerektiren sorun çözüldüğünde boş dizini kaldırabileceğinizi de bileceksiniz.
Her boş dizini listelemek için aşağıdaki komutu kullanın:
find -name .git -prune -o -type d -empty -print
Her boş dizinde yer tutucu README oluşturmak için:
find -name .git -prune -o -type d -empty -exec sh -c \ "echo this directory needs to be empty because reasons > {}/README.emptydir" \;
README dosyası dışındaki dizindeki her şeyi yoksaymak için, içine aşağıdaki satırları koyun
.gitignore :
path/to/emptydir/* !path/to/emptydir/README.emptydir path/to/otheremptydir/* !path/to/otheremptydir/README.emptydir
Alternatif olarak, her README dosyasını yok sayılmaktan hariç tutabilirsiniz :
path/to/emptydir/* path/to/otheremptydir/* !README.emptydir
Her README'yi zaten oluşturulduktan sonra listelemek için:
find -name README.emptydir
28
UYARI: Bu ince ayar, göründüğü gibi gerçekten çalışmıyor. Rahatsızlıktan dolayı özür dileriz.
Aşağıdaki orijinal yayın:
Git internals ile oynarken bir çözüm buldum!
Boş dizininizi oluşturun:
$ mkdir path/to/empty-folder
Tesisat komutunu ve boş ağaç SHA-1'i kullanarak dizine ekleyin :
$ git update-index --index-info 040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904 path/to/empty-folder
Komutu yazın ve ardından ikinci satıra girin. Girişinizi sonlandırmak için Enterve ardından Ctrl+ tuşlarına basın D. Not: format moddur [SPACE] [SPACE] yazın SHA-1hash [TAB] yolu (sekme önemlidir, cevap formatlaması onu korumaz).
Bu kadar! Boş klasörünüz dizininizde. Tek yapman gereken taahhüt etmek.
Bu çözüm kısa ve görünüşe göre iyi çalışıyor ( EDIT bakın! ), Ama hatırlamak o kadar kolay değil ...
Boş ağaç SHA-1,
cd içine
git write-tree boş bir SHA-1 çıktı veren yeni bir boş Git deposu oluşturarak bulunabilir .
DÜZENLE:
Bulduğumdan beri bu çözümü kullanıyorum. Hiçbir yerde bir modül tanımlanmadığı haricinde, bir alt modül oluşturma ile tam olarak aynı şekilde çalışıyor gibi görünüyor. Bu verirken hatalara yol açar
git submodule init|update . Sorun şu ki parçayı
git update-index yeniden yazıyor .
040000 tree
160000 commit
Ayrıca, bu yolun altına yerleştirilen hiçbir dosya Git tarafından fark edilmeyecektir, çünkü başka bir depoya ait olduklarını sanmaktadır. Kolayca gözden kaçabileceği için bu çok kötü!
Ancak, deponuzdaki Git alt modüllerini zaten kullanmazsanız (ve kullanmazsanız) ve "boş" klasörü boş kalır veya Git'in varlığını bilmesini ve içeriğini yok saymasını istiyorsanız, bu çimdik. Her zamanki gibi alt modüller ile ilerlemek bu ince ayardan daha fazla adım atar.
26
Belki de boş bir dizin eklemek , en az dirençli yol gibi gözükmektedir, çünkü o dizinin var olmasını bekleyen betikler vardır (belki de üretilen ikili dosyalar için bir hedef olabilir). Başka bir yaklaşım, gerektiği gibi dizini oluşturmak için komut dosyalarınızı değiştirmek olacaktır .
mkdir --parents .generated/bin ## create a folder for storing generated binaries mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed
Bu örnekte, ".generated" öneki olmadan erişebilmeniz için dizine giden (bozuk) sembolik bir bağlantıyı kontrol edebilirsiniz (ancak bu isteğe bağlıdır).
ln -sf .generated/bin bin git add bin
Kaynak ağacınızı temizlemek istediğinizde şunları yapabilirsiniz:
rm -rf .generated ## this should be in a "clean" script or in a makefile
Neredeyse boş bir klasörde sıkça önerilen yaklaşımı kullanırsanız, ".gitignore" dosyasını silmeden içeriği silme zorluğuna da sahip olursunuz.
Oluşturulan tüm dosyalarınızı kökünüze aşağıdakini ekleyerek yok sayabilirsiniz:
.generated
20
Diyelim ki tmp adında boş bir dizine ihtiyacınız var :
$ mkdir tmp $ touch tmp/.gitignore $ git add tmp $ echo '*' > tmp/.gitignore $ git commit -m 'Empty directory' tmp
Başka bir deyişle Git'e görmezden gelmesini (ve boş dizindeki diğer her şeyi) önce .gitignore dosyasını dizine eklemeniz gerekir.
20
Ben de bu konuda boş dizinlerle karşılaşıyorum. Yer tutucu dosyaları kullanma sorunu, artık gerekli olmadıkça bunları oluşturmanız ve silmeniz gerektiğidir (çünkü daha sonra alt dizinler veya dosyalar eklenmiştir. Büyük kaynak ağaçlarıyla bu yer tutucu dosyaları yönetmek zahmetli ve hata olabilir. eğilimli.
Bu nedenle, bu tür yer tutucu dosyalarının oluşturulmasını / silinmesini otomatik olarak yönetebilen açık kaynaklı bir araç yazmaya karar verdim. .NET platformu için yazılmış ve Mono (Linux için .NET) ve Windows altında çalışır.
Sadece bir göz atın: http://code.google.com/p/markemptydirs
14
@ Artur79 ve @mjs'nin cevaplarını seviyorum, bu yüzden ikisinin bir kombinasyonunu kullandım ve projelerimiz için standart hale getirdim.
find . -type d -empty -exec touch {}/.gitkeep \;
Ancak, geliştiricilerimizden yalnızca birkaçı Mac veya Linux'ta çalışmaktadır. Windows üzerinde çok çalışma ve orada aynı şeyi gerçekleştirmek için bir eşdeğer basit bir astar bulamadı. Bazıları Cygwin'i başka nedenlerden dolayı kurduğu için çok şanslılardı , ancak bunun için Cygwin'i reçete yazmak görünüyordu.
Daha iyi bir çözüm için düzenleyin
Bu nedenle, geliştiricilerimizin çoğu zaten Ant yüklü olduğundan, ilk düşündüğüm şey, platformdan bağımsız olarak bunu gerçekleştirmek için bir Ant derleme dosyası oluşturmaktı. Bu hala burada bulunabilirhttps://github.com/mig82/gitkeep
Ancak daha sonra bunu küçük bir yardımcı program komutu haline getirmenin daha iyi olacağını düşündüm, bu yüzden Python kullanarak yeniden yarattım ve burada PyPI'ye yayınladım . Sadece çalıştırarak yükleyebilirsiniz:
pip3 install gitkeep2
.gitkeep Yinelemeli olarak dosya oluşturmanıza ve silmenize izin verir ve aynı zamanda bu dizinlerin neden önemli olduğunu anlamanız için kendi arkadaşlarınıza mesaj eklemenizi de sağlar. Bu son bit bonus.
.gitkeep Dosyaların kendi kendini belgelemesinin güzel olacağını düşündüm .
$ gitkeep --help Usage: gitkeep [OPTIONS] PATH Add a .gitkeep file to a directory in order to push them into a Git repo even if they're empty. Read more about why this is necessary at: https://git.wiki.kernel.org/inde x.php/Git_FAQ#Can_I_add_empty_directories.3F Options: -r, --recursive Add or remove the .gitkeep files recursively for all sub-directories in the specified path. -l, --let-go Remove the .gitkeep files from the specified path. -e, --empty Create empty .gitkeep files. This will ignore any message provided -m, --message TEXT A message to be included in the .gitkeep file, ideally used to explain why it's important to push the specified directory to source control even if it's empty. -v, --verbose Print out everything. --help Show this message and exit.
Umarım yararlı bulursunuz.
13
Yapamazsın ve maalesef asla yapamayacaksın. Bu Linus Torvald'ın kendisi tarafından verilen bir karardır. Bizim için neyin iyi olduğunu biliyor.
Dışarıda bir kez okuduğum bir yerde bir rant var.
Ne yazık ki, geçici çözümlerle birlikte yaşamak zorundasınız.
12
Bir
.gitignore dosya eklediğinizde , içine Git'in görmezden gelmesini istediğiniz herhangi bir miktarda içerik koyacaksanız
* , yok sayılan içeriği yanlışlıkla eklememek için sadece bir yıldız işareti içeren tek bir satır eklemek isteyebilirsiniz. .
10
Belirtildiği gibi, boş dizinler eklemek mümkün değildir, ancak burada tüm dizinlere boş .gitignore dosyaları ekleyen tek bir astar bulunur.
ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'
Kolay erişim için bunu bir Rakefile'e soktum.
8
Jamie Flournoy'un çözümü harika çalışıyor. İşte tutmak için biraz gelişmiş bir sürüm
.htaccess :
# Ignore everything in this directory * # Except this file !.gitignore !.htaccess
Bu çözümle örneğin boş bir klasör işleyebilirsiniz
/log ,
/tmp yoksa
/cache klasör boş kalır.
8
Her zaman istediğim klasör yapısını kontrol etmek ve benim için proje içerisinde inşa etmek için bir fonksiyon inşa ediyorum. Boş klasörler Git'te proxy tarafından tutulduğundan, bu sorunu çözer.
function check_page_custom_folder_structure () { if (!is_dir(TEMPLATEPATH."/page-customs")) mkdir(TEMPLATEPATH."/page-customs"); if (!is_dir(TEMPLATEPATH."/page-customs/css")) mkdir(TEMPLATEPATH."/page-customs/css"); if (!is_dir(TEMPLATEPATH."/page-customs/js")) mkdir(TEMPLATEPATH."/page-customs/js"); }
Bu PHP'de, ancak çoğu dilin aynı işlevi desteklediğinden eminim ve klasörlerin oluşturulması uygulama tarafından halledildiğinden, klasörler her zaman orada olacaktır.
7
İşte bir kesmek, ama işe yaraması komik (Git 2.2.1). @Teka'nın önerdiğine benzer, ancak hatırlaması daha kolay:
git submodule add path_to_repo)
.submodules. Bir değişiklik yap.
.submodulesDosyayı silin ve değişikliği yapın.
Şimdi, teslim alma işlemi tamamlandığında oluşturulan bir dizininiz var. Yine de ilginç bir şey, bu dosyanın ağaç nesnesinin içeriğine bakarsanız elde edeceğiniz şey:
ölümcül: geçerli bir nesne adı değil b64338b90b4209263b50244d18278c0999867193
Git'in gelecek sürümlerinde çalışmayı durdurabildiği için kullanmaya teşvik etmem. Hangi depoyu bozuk bırakabilir.
7
Git'in dizinleri izlemesinin bir yolu yoktur, bu nedenle tek çözüm Git'in izlemesini istediğiniz dizine bir yer tutucu dosya eklemektir.
Dosya adlandırılabilir ve istediğiniz herhangi bir şeyi içerebilir, ancak çoğu kişi
.gitkeep (bazı insanlar VCS agnostic'i tercih etse de) adlı boş bir dosya kullanır
.keep .
Ön ekli
. dosya gizli dosya olarak işaretler.
Başka bir fikir
README , dizinin ne için kullanılacağını açıklayan bir dosya eklemek olacaktır.
7
Yapamazsın Bu, Git bakımcılarının kasıtlı bir tasarım kararıdır. Temel olarak Git gibi bir Kaynak Kod Yönetim Sisteminin amacı kaynak kodunu yönetmektir ve boş dizinler kaynak kod değildir. Git genellikle içerik izleyici olarak da tanımlanır ve yine boş dizinler içerik değildir (gerçekte tam tersi), bu nedenle izlenmezler.
5
Birden fazla anlamsal dizinde çok fazla geçici veri barındıracak bir klasör eklemek istiyorsanız, o zaman bir yaklaşım kökünüze buna benzer bir şey eklemektir.
/app/data/**/*.*
!/app/data/**/*.md
Daha sonra
*.md , dizinlerin hepsinin reponun bir parçası kalmasını sağlamak için her bir dizinde açıklayıcı README.md dosyaları (veya boş dosyalar, bu durumda olduğu gibi benzersiz şekilde hedefleyebildiğiniz sürece) önemli değildir . dosyalar (uzantılı) göz ardı edilir. SINIRLAMA:
. dizin adlarına izin verilmiyor!
Bu dizinlerin tümünü xml / images dosyaları veya herhangi bir şeyle doldurabilir ve
/app/data/ uygulamanız için depolama alanı geliştikçe zaman içinde daha fazla klasör ekleyebilirsiniz (her bir depolama dizinin ne için olduğunu açıklamak için README.md dosyaları kesinlikle).
Her yeni dizin için yeni
.gitignore bir tane oluşturarak daha da değişiklik yapmanıza veya yerelleştirmenize gerek yok
.gitignore . Muhtemelen en akıllıca çözüm değil ama terse gitignore-akıllıca ve her zaman benim için çalışıyor. Güzel ve basit! ;)
5
Fray'e bir seçenek daha ekleyerek.
Buna bir dizin eklemek istediğinizi varsayalım
git , bununla ilgili tüm amaçlar için
git boş kalmalı ve içeriğini asla izlememeli,
.gitignore burada çok sayıda önerilen bir hile yapacağız.
Belirtildiği gibi format:
* !.gitignore
Şimdi, bunu komut satırında yapmanın bir yolunu istiyorsanız, bir taneye basıp düştü, eklemek istediğiniz dizinin içindeyken , yürütebilirsiniz:
$ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore
Kendim, bunu yapmak için kullandığım bir kabuk betiğim var. Senaryoyu ne istersen isimlendir ve ismini kendi yolunda bir yere ekle ya da doğrudan referans ver:
#!/bin/bash dir='' if [ "$1" != "" ]; then dir="$1/" fi echo "*" > $dir.gitignore && \ echo '!.gitignore' >> $dir.gitignore && \ git add $dir.gitignore
Bununla, eklemek istediğiniz dizinden yürütebilir veya dizine ilk ve tek parametre olarak başvurabilirsiniz:
$ ignore_dir ./some/directory
Bunu boş bir klasör izlemek istiyorsanız (@GreenAsJade tarafından bir açıklama cevaben) Başka bir seçenek, MAYIS gelecekte izlenen dosyaları içeren ama şimdilik boş olacak, ommit olabilir
* gelen
.gitignore dosyaya ve kontrol o içinde. Temel olarak, tüm dosya " beni görmezden gelme " diyor, ancak aksi takdirde dizin boş ve izleniyor.
Kişisel
.gitignore dosya gibi görünecektir:
!.gitignore
Bu kadar, kontrol edin ve dosyaları daha sonra izleyebileceğiniz boş ama henüz izlenen bir dizine sahipsiniz.
Dosyadaki bir satırı saklamayı önermemin nedeni,
.gitignore amacı vermesidir . Aksi takdirde, satırın bir kısmı onu kaldırmayı düşünebilir. Çizginin üstüne yorum eklerseniz yardımcı olabilir.
4
Bazen, "gerçek" boş ve mevcut bir dizine ihtiyaç duyan kötü yazılı kütüphaneler ya da yazılımlarla uğraşmanız gerekir. Basit koymak
.gitignore veya
.keep onları kırmak ve bir hataya neden olabilir. Aşağıdakiler bu durumlarda yardımcı olabilir, ancak hiçbir garanti yok ...
İlk önce gerekli dizini oluşturun:
mkdir empty
Sonra bu dizine bozuk bir sembolik bağlantı eklersiniz (ancak yukarıda belirtilen kullanım durumundan başka bir durumda, lütfen
README bir açıklama ile kullanın ):
ln -s .this.directory empty/.keep
Bu dizindeki dosyaları yoksaymak için kök dizine ekleyebilirsiniz
.gitignore :
echo "/empty" >> .gitignore
Yok sayılan dosyayı eklemek için zorlamak için bir parametre kullanın:
git add -f empty/.keep
İşlemden sonra dizininizde sembolik bir kopukluk var ve git dizini yaratıyor. Bozuk bağlantının bazı avantajları vardır, çünkü normal bir dosya değildir ve normal bir dosyaya işaret etmez. Bu yüzden “(dosya içermeyen)” sorusuna bile uyuyor, niyetine değil, anlamına göre;
find empty -type f
Bu komutlar boş bir sonuç gösteriyor, çünkü bu dizinde dosya yok. Bu nedenle, bir dizindeki tüm dosyaları alan çoğu uygulama, bu bağlantıyı görmez, en azından bir "dosya varsa" veya "okunabilir" ise, bu bağlantıyı görmez. Bazı scriptler bile orada hiçbir dosya bulamaz:
$ php -r "var_export(glob('empty/.*'));" array ( 0 => 'empty/.', 1 => 'empty/..', )
Ancak bu çözümü sadece özel durumlarda kullanmanızı şiddetle tavsiye ederim,
README boş bir dizinde yazılı olan iyi bir yazı genellikle daha iyi bir çözümdür. (Ve bunun bir windows dosya sistemiyle çalışıp çalışmadığını bilmiyorum ...)
4
Bunu yapmanın kolay bir yolu
.gitkeep (şu anda) boş tutmak istediğiniz dizine bir dosya ekleyerek .
Daha fazla bilgi için bu SOF cevabına bakınız - bu da bazı kişilerin neden bir .gitignore dosyası ekleyerek (burada birçok cevapta belirtildiği gibi) kafa karıştırıcı kongre karıştırıcı bulduklarını açıklar.
4
Bu kodu create_readme.php olarak kaydedebilir ve PHP kodunu Git projenizin kök dizininden çalıştırabilirsiniz .
> php create_readme.php
README dosyalarını boş olan tüm dizinlere ekler, böylece bu dizinler daha sonra dizine eklenir.
<?php $path = realpath('.'); $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach($objects as $name => $object){ if ( is_dir($name) && ! is_empty_folder($name) ){ echo "$name\n" ; exec("touch ".$name."/"."README"); } } function is_empty_folder($folder) { $files = opendir($folder); while ($file = readdir($files)) { if ($file != '.' && $file != '..') return true; // Not empty } } ?>
O zaman yapmak
git commit -m "message" git push
2
Bazen, yalnızca "içerik" olarak kabul edilen dosyaları içerecek klasörleri olan depolarım var; bunlar, sürümlendirilmeyi umduğum dosyalar değil ve bu nedenle asla işlenmemeleri gerekiyor. Git'in .gitignore dosyasıyla, tüm dizinleri yok sayabilirsiniz. Ancak depodaki klasörün bulunmasının yararlı olacağı zamanlar vardır. İşte bu ihtiyacı karşılamak için mükemmel bir çözüm.
Geçmişte yaptığım şey, depomun kök dizinine bir .gitignore dosyası koymak ve sonra da klasörü dışlamaktır:
/app/some-folder-to-exclude /another-folder-to-exclude/*
Ancak, bu klasörler o zaman deponun bir parçası olmaz. Orada bir README dosyası gibi bir şey ekleyebilirsiniz. Ancak, uygulamanıza herhangi bir README dosyasını işleme konusunda endişelenmemesini söylemelisiniz.
Uygulamanız orada bulunan klasörlere bağlıysa (boş olsa da), söz konusu klasöre bir .gitignore dosyası ekleyebilir ve iki amacı gerçekleştirmek için kullanabilirsiniz:
Git’e klasörde bir dosya olduğunu ve Git’in depoya eklediğini söyle. Git'e bu klasörün içeriğini yoksaymasını söyle, eksi bu dosyayı kendisi. Boş dizinlerinize yerleştireceğiniz .gitignore dosyası:
* !.gitignore
İlk satır (*) Git'e bu dizindeki her şeyi yoksaymasını söyler. İkinci satır Git'e .gitignore dosyasını yoksaymamasını söyler. Bu dosyayı depoya eklemek istediğiniz her boş klasöre ekleyebilirsiniz.
2
Birçok kişi bu soruyu zaten cevapladı. Sadece burada bir PowerShell sürümü ekliyorum.
Dizindeki tüm boş klasörleri bul
Buraya boş bir .gitkeep dosyası ekleyin
Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}
2