Git alt modülü bir alt klasöre işaret edecek şekilde nasıl değiştirilir?


104

Sayfalarını karıştıran submodule öğretici , ben dışarı alt modülü yarattı boto projesi . Sonra, aslında bu projenin sadece bir alt kümesine, özellikle de boto klasörüne ihtiyacım olduğunu keşfettim .

Alt modülümü bu klasöre işaret edecek şekilde değiştirmek istiyorum. .Gitmodules'e baktığımda, görüyorum

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

Https://github.com/boto/boto.git yerine hangi URL'yi kullanmalıyım ? URL'yi değiştirdikten sonra, boto klasörünü yerel olarak silmeli ve yeniden çekmeli miyim?


3
Tam olarak istediğiniz şey değil - bir alt modül değil - ama bir göz git subtree
atabilirsiniz

1
Yaptığım şey, tüm alt modüle sahip olmak ve IntelliJ'e boto klasörünün bir 'kaynak klasör' olduğunu, böylece içindeki paketleri bulabileceğini söylemek oldu.
ripper234

16
Git'in bunu yerel olarak yapmadığına inanamıyorum ... evet.
rogerdpack

2
Benzer bir soru bulundu - stackoverflow.com/questions/1121227/…
sashoalm

Yanıtlar:


67

Korkarım alt modüller için URL her zaman sadece havuza işaret ediyor - tıpkı git'in genel olarak "dar klonları" desteklememesi gibi, bir havuzun sadece bir alt klasörünü istediğinizi belirtemezsiniz.

Tüm depoyu bir alt modül olarak yaşayamazsanız, her zaman boto'dan klonlanmış yeni bir depo oluşturabilir ve ardından aşağıdakileri yapmak için bir cron işi kurabilirsiniz:

  1. git fetch o depo bir dizine
  2. git filter-branchAlt dizinin en üst düzeyde olduğu bir dalı güncellemek için kullanın .
  3. Deponun bu dalını alt modül olarak ekleyin. Ancak, bunların hepsi biraz karmaşık ve benim tercihim sadece tüm depoyu bir alt modül olarak kullanmakla yaşamak olurdu.

24

Bir havuzun yalnızca bir bölümünü klonlayamazsınız. Bunun nedeni, git'in depoyu bütün bir nesne olarak ele almasıdır: onu aldığınızda, hepsini alırsınız .

Bu nedenle, buradaki çözüm, alt modülü başka bir dizine getirmek ve ardından hedefinize ulaşmak için bir sembolik bağlantı kullanmak olacaktır.


Pencerelerde sembolik bağlarım var ... çok iyi çalışıyor. (bu, makinemdeki msys yüzünden, bu yüzden ln -s
linux'taki

7
Vista ve & MKLink ile birlikte gelir. Bunu kullanıyorum. howtogeek.com/howto/windows-vista/…
Angel S. Moreno

1
Bunun yerine sabit bağlantıları kullanabilirsiniz
KindDragon

16

Yapmak istediğiniz, alt modülde bir dal oluşturmak ve klasörü yukarı taşımak ve ihtiyacınız olmayanları silmek. Bunun yerine o şubeyi yönetebilirsiniz. Değişikliklerinizi yükseltmek istiyorsanız, önce birleştirme işlemini geri alabilmelisiniz. Git, dosyaları taşıdığınızı ve birleştirmeyi başarıyla yaptığınızı bilecek.

Bu yardımcı olur umarım.


"Geri birleştirme" nedir? Bir örnek verebilir misin?
Sukima

"yukarı akışa" giden bir birleştirme - daha yüksek dereceli bir şubeden daha düşük seviyeli bir şubeye. Linus onlardan nefret ediyor. Zaten birleştirilmiş olabilecek diğer dallardan tarihe bağlılar.
Adam Dymitruk

Bu durumda "geri birleştirme" hakkında biraz örnek ekleyebilir misiniz?
Xiao

Tipik olarak, herkesin en son değişikliklerini birleştirdiği bir ana hat şubesinden gelen şeyleri birleştirerek özellik şubenizi güncel tutmaya çalıştığınız zamandır. Bu kötü çünkü şubenizi başkalarının çalışmalarına bağlıyor. Ürün şubenize ihtiyaç duyuyorsa ancak diğerlerinden biri entegrasyon şubesinde değilse, bu mümkün değildir.
Adam Dymitruk

1
ilginç fikir, bunu deneyen var mı? Yakında deneyeceğim, ancak yine de "geri birleştirmenin" net ve otomatik olabileceğinden emin değilim ...
moudrick
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.