2011-02-26 8 views
50

içine eklendi. Son zamanlarda dot dosyalarımı bir ~/Dropbox/dotfiles adresindeki Git deposunda yaşamak için yeniden düzenledim ve ~/Dropbox/dotfiles/home/.vim/bundle içine tüm Vim addons'ları yerleştirmek için patojen kullanıyorum. Bu eklentiler Git alt modülleri olarak eklenmiştir..gitignore dosyaları Git altmodüller

Artık sorun, Vim'i çalıştırdığımda, tüm eklentilerin belgelerini otomatik olarak oluşturur ve bunları her alt modül dizininin içine koyar. Bu, tekrar edilmemeyi istediğim alt modlara, izlenmeyen içeriği ekler.

[email protected] ~/Dropbox/dotfiles ‹master*› $ git st 
# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# (commit or discard the untracked or modified content in submodules) 
# 
# modified: home/.vim/bundle/fuzzyfinder (untracked content) 
# modified: home/.vim/bundle/l9 (untracked content) 
# modified: home/.vim/bundle/matchit (untracked content) 
# modified: home/.vim/bundle/ruby (untracked content) 
# ... 
no changes added to commit (use "git add" and/or "git commit -a") 

Ben submodules içindeki tüm doc klasörleri görmezden benim Git depo köküne bir .gitignore dosya eklemek çalıştı, ancak bu işe görünmüyor:

home/.vim/bundle/**/doc 

Benim soru: orada Git alt modüllerinin içindeki dosya ve klasörleri göz ardı etmenin bir yolu ya da Vim'i Git deposunun dışındaki bir klasördeki belgeleri oluşturmak için yapılandırabilir miyim?

DÜZENLEME: Randy Morris belirttiği gibi, bu Sen Altmodüllerin her dahilinde .gitignore eklemek gerekir Generating tags to different location by pathogen

+0

Olası yinelenen: http://stackoverflow.com/questions/4343544/generating-tags-to-different- konum-by-patojen # 4346300 –

+0

Haklısınız. Soruyu işaretlemek için gidiyor. Teşekkürler! – rubiii

+1

Not: '**' in '.gitignore',“ herhangi bir derinlikte ”anlamına gelmez. –

cevap

64

kopyası olabilir.
Bahsedilen alt modüller yuvalanmış Git repo'ları olduğundan, kendi göz ardı kurallarına dikkat ederler ve durumları üst repo'nun .gitignore (explained here olarak) tarafından etkilenmez.

Vim'e özgü bir ayar için, yorumda Randy Morris belirtildiği gibi "Generating tags to different location by pathogen" SO sorusuna bakın.


Not: Nick bu yorumlardaki bahisler ve "Generating tags to different location by pathogen", bir yapılandırma gibi cevap gösterildiği gibi:

[submodule "path/to/submodule"] 
    path = path/to/submodule 
    url = http://github.com/username/repo.git 
    ignore = untracked # <==== 

çalışmak ve git status tarafından göz ardı ettiği alt modülü yapacaktır.
Ancak "ignore = untracked" means at least Git1.7.2.


Not: in the comments bahseder nurettin:

ignore = dirty

bana

Commit aee9c7d için yaptım untracked ve dirty arasındaki farkı ayrıntıları.

  • "dirty": işlemek superproject kaydedilen ve HEAD modifikasyonlar dikkate alınacaktır alt modüller, altmodülün çalışma ağacına tüm değişiklikleri yok sayılır sadece farklılıklar.
    Bu değeri kullanırken, alt ağaç çalışma ağacı değişiklikleri için taranmayacak ve büyük alt modüller üzerinde bir performans avantajı sağlayacaktır."untracked"

  • : submodules Sadece izlenmeyen dosyaları ağaç çalışmak değiştirilmiş olarak işaretler alt modülün dosyaları HEAD değişti ve/veya modifiye, göz ardı edilir.

+0

Diğer kişilerin Git depolarını değiştirmeyi sevmiyorum, ancak 'ignore = untracked' seçeneği gayet iyi çalışıyor. Çok teşekkür ederim! – rubiii

+1

En azından ihmal = izlenmeyen ayarları çalışmak için git sürüm 1.7.2 gerekir. Buradaki yorumlara bakın: http://stackoverflow.com/questions/4343544/generating-tags-to-different-location-by-pathogen/4346300#4346300 –

+1

@Nick: iyi nokta. Cevaba dahil ettim. – VonC

-2

Burada temel sorun, 'izlenen' bir değişikliği görmezden gelmeye çalıştığınızdır. .gitignore, yalnızca "izlenmeyen" değişikliklerin görmezden gelmesini yok sayar. Doğrulamak için repo'nuzdaki (izlenen) bazı dosyaları değiştirebilir ve ayrıca .gitignore dosyanıza ekleyebilirsiniz. git status yapılıyorsa, dosyanın hala 'değiştirilmiş' olarak listelendiğini göreceksiniz. Alt modül repo'larınız da ana repo tarafından takip edilir, dolayısıyla ana repoya gitignore ekleyerek işe yaramaz. Önerildiği gibi, .gitignore kurallarını bireysel repo'ları ekleyin veya yeni bir git sürümü kullanıyorsanız, git status --ignore-submodules'u kullanabilirsiniz.

+1

nope. bu dosyalar yenidir ve 'izlenimsiz'. Üzgünüm, ama bu problemi çözmeye yardım etmiyor. – rubiii

8

VonC'nin ignore = untracked önerisi işe yarar, ancak bu tür alt modüller için değişiklik yapmanız gerekir. Eğer ilk ve son kez sorunu çözmek istiyorsanız

, daha sonra sadece $ HOME/.gitignore_global için doc/tags ekleyin git config --global core.excludesfile ~/.gitignore_global tarafından her git repo ilgili küresel gitignore deseni yapılandırabilirsiniz.

Bkz. https://help.github.com/articles/ignoring-files.

1

Ben'in cevabı iyi bir başlangıç. Fakat bu özel göz ardı etme kuralı için küresel ayarı sevmiyorum.

her alt modülün için yerel yapılandırma tercih ve merkezi bir alt modül kök deposunda dosyayı görmezden:

cd .vim/bundle 
echo "doc/tags" > .gitignore_submodules 
git submodule foreach git config --local core.excludesfile "../.gitignore_submodules"