2014-11-28 16 views
11

Ben git submodule update ile --depth seçeneği kullanılarak sığ submodules olması mümkün olduğunu biliyorum. Birkaç altmodülün ile benim proje üzerindeGit alt modüllerle sığ klon, en son olanlar değil, sivri işlemleri nasıl kullanılır?

git submodule update --init --recursive --depth 1 

çalıştırırsanız

Ancak, ben fatal: reference is not a tree olsun. Bu yüzden ancak ben 1.

de derinlik tutmak istiyorum, düzgün çalışan

git submodule update --init --recursive --depth 100 

ile tekrar denedim O --depth 1 son değil işlemek, alt modülün taahhüt çeker geliyor bana Ana depo tarafından işaretlenmiş ve bu yüzden 100'e ayarlanması sorunu çözdü, çünkü işaretli olanlar da dahil olmak üzere daha uzun bir taahhüt listesi çıkardı. Eğer durum buysa

Maalesef, o zaman genel olarak son 100 kaydedilmesini ihtiyacım birini içeren emin olamaz.

nasıl git submodules sığ klon içinde sivri kaydedilmesini değil son olanları kullanmak anlatır?

Windows üzerinde budala 1.9.4 kullanıyorum.

+0

Ayrıca bkz 'git yapılandırma -f .gitmodules alt modülü. .shallow true', http://stackoverflow.com/a/38895397/6309 – VonC

cevap

7

Maalesef kimliğini taahhüt sadece spesifik bir ile git fetch yapmak için bir yol olarak görünmüyor. Eğer varsa gerçekten bilmek isterim. Bununla birlikte, probleminizi iki farklı şekilde ele aldım: biri, eğer mümkünse, uzaktaki depoda, istediğimi işaret eden bir etiket ya da dal yaratmak, buna "ref" diyoruz. Bu şekilde uzaktan ref getirebilir ve --depth onun için geçerli olacak, en son ipucu değil. Bunun yerine git submodule update --init I do:

"alt" altmodülün adı ve yolu
git submodule init 
git clone --depth 1 -b ref --separate-git-dir .git/modules/sub/ repository sub 

etiketleri oluşturamaz eğer

başka yolu (basitlik için en onlar aynıdır diyelim) veya uzaktan depoda dalları, bir döngü içinde istediğiniz taahhüt aramak içindir:

git submodule init 
id=$(git submodule status|sed -ne 's/.\([a-z0-9]*\) sub.*/\1/p' 
git clone --depth 1 --separate-git-dir -n .git/modules/sub/ repository sub  
cd sub 
while ! git rev-list $id ; do 
    git fetch --depth $((i+=1)) 
done 
git checkout $id 

sadece bir daha hızlı gitmek yapmak için bir seferde işlemek daha fazlası ile artırmaz, ancak sen sonunda olabilir İstediğinizden daha önce bazı taahhütler.

+0

ile birlikte. bahşiş için teşekkürler, aradığım şeye yakın gibi görünüyor. Klonu olabildiğince sığ tutarken, uzaktaki bir etiketi klonlamanın mümkün olup olmadığını biliyor musunuz? --depth 1 etiketi ref ile çalışır mı? –

+0

Geç cevap verdiğimiz için üzgünüz, sorunun cevabının evet olduğunu hatırlıyorum, ancak şu anda tekrar test edemiyorum. Sadece meraktan, denedin mi, istediğin gibi mi çalıştın? – kouk

+0

Evet, denedim ve işe yaradı. Bununla birlikte, farklı bir proje kurulumu yapmayı seçtim ve şimdilik alt modülleri kullanarak kaçındım. –