2015-06-05 20 views
10

git add Bir klasörde, tüm içerik ve tüm alt klasörler otomatik olarak sahnelenir. Klasörde işlemek istemediğim alt klasörler varsa, bunları manuel olarak kaldırmalı ve daha sonra .gitignore'a eklemeliyim. Açık görüşlü bir şey, burada yanlış bir şey yapıyorum gibi hissettiriyor.Yinelemeli olarak nasıl eklenir?

bir çözüm eklemeden önce .gitignore düzenlemek olacaktır. Ancak klasör yapısının çok derin/karmaşık olduğu durumlarda, bu biraz zor, çünkü derinlemesine yerleştirilmiş bazı dosyaları/klasörleri göz ardı etmeyi unutmak kolaydır.

Aradığım şey, tüm içeriği hazırlamadan klasör düzeyini düzeylere eklemeye olanak tanıyan, add gibi SVN'nin --non-recursive gibi bir adım-adımdır. Ancak bu işlevi git add için bulamadık. Bu yüzden merak ediyorum: Böyle bir tekrarlı olmayan eklenti için önerilen git iş akışı nedir?

diğerleri vardı düşünüldüğünde bu kesin opposite problem: Belki yukarıda açıklanan davranışı benim git sürümü (1.9.1)/ayarlarla bir konudur? bir bütün kompleks dizin hiyerarşisi ekleme

+1

Yalnızca birkaç klasörünüz varsa, 'git add' kullanmadan önce alt klasörlere' .gitignore' ekleyebilirsiniz. – Raptor

+1

@Raptor: Alt dizinlerde '.gitignore' kullanabileceğimi tamamen unutmuşumdur. merkezi '.gitignore' düzenlemek yerine. '--dry-run' ve sadece ** dosyaları belirleme olasılığı ile birlikte, problemimi çözdüğümü düşünüyorum. – bluenote10

+0

Bunu daha genel bir şekilde yapmanın bir yolu yok mu? Aşağıdaki çözümlerden hiçbiri bana yararlı bir çözüm sunmaya yaklaşmadı. – LovesTha

cevap

4

(her zamanki git geliştirme iş akışının bir parçası olarak bir şey olur ve kesinlikle) yapmak için alışılmadık bir şey, bu yüzden git bunun için özel bir özelliğe sahip değildir. Eklemek istediğiniz dosyaların listesini oluşturmak ve bu listeyi git add, ör. sadece olmayan yinelemeli geçerli dizinde dosyaları eklemek

git add $(find . -type f -maxdepth 1) 

Alternatif yapmak, mevcut dizinde izlenmeyen dosyaların bir listesini oluşturmak için

git ls-files --others --directory > file-list 

kullanabilir ve bir düzenleyebilirsiniz Düzenlemek istemediğiniz her şeyi kaldırmak için editör. (file-list kendisini kaldırmak için emin olun.) Daha sonra düzenlenen listedeki dosyaları ve dizinleri eklemek için

git add $(cat file-list) 

kullanabilirsiniz. (Ayrıldığınız dizinler yine de tekrarlı olarak eklenecektir).

+0

İyi cevap. Git (git. -type f -maxdepth 1) 'yi bul (bul. Yolunda eksik.) – Ben

+1

@Ben Nokta sadece Apple'ın' find' tuhaf versiyonunu kullanıyorsanız gereklidir. Linux'ta GNU bulduk ve noktaya ihtiyacımız yok. –

+0

Ah, garip olduğum için üzgünüm :) yine de bahsetmeye değer, birkaç tane var "bize" – Ben

0

Eğer böyle bir şey yapabileceği başka alt klasörler olmadan dizinden dosyaları eklemek isterseniz:

*.* her dosya türü kadar her dosya anlamına gelir
git add FolderName/\*.* 

. Klasörler uzantılara sahip olmadığından geçiş yapmazlar.

+0

Klasörlerde uzantı varsa ve dosyalarda uzantılar eksikse ne olur? – skyking