Git alt modülünü kaldırmanın mevcut yolu nedir?


91

Mac'te git sürüm 1.9.3'ten (Apple Git-50) itibaren git alt modülünü nasıl kaldırırım? Pek çok geliştiricinin bana işe yaramayacaklarını söylediği bir sürü eski bilgi okuyorum. Şu anki yol nedir? olacak git deinit pathToSubModule hile yapmak?

İşe yarayacağını düşündüğüm adımlar burada ama yorumlar işe yaramayacağını söylüyor.

Mevcut durumumu ve neyi başarmam gerektiğini açıklamama izin verin. Hızlı depoyu kurdum ve projeme alt modül olarak ekledim. Bu kod zaten kontrol edildi ve diğerleri onu kullanıyor. Şimdi yapmam gereken , aynı Hızlı depoyu çatallamak ve onu şirketimin sahip olduğu daha güvenli bir github'da barındırmak (yani tamamen başka bir özel github). Çatalladıktan sonra, o çatalı bir gitSubmodule olarak eklemek ve daha önce kurduğum mevcut Quick alt modülünün yerini almasına izin vermek istiyorum.

güncelleme: En son git sürümünde aşağıdakilerin doğru yol olduğunu okudum lütfen onaylayın?

To remove a submodule added using:

git submodule add blah@blah.com:repos/blah.git lib/blah
Run:

git rm lib/blah
That's it.

For old versions of git (circa ~1.8.5) use:

git submodule deinit lib/blah
git rm lib/blah
git config -f .gitmodules --remove-section submodule.lib/blah

İki gün boyunca alt modül problemleriyle uğraştım. Buluş, bunu bulduğumda geldi: forums.developer.apple.com/thread/13102 . Temel olarak, Xcode ve belki de diğer uygulamalar, '~' içeren url'leri genişletmekte zorlanır. Ssh: //username@server.remoteHost.com/~/git/MyRepo.git'i ssh: //username@server.remoteHost.com/home/username/git/MyRepo.git olarak değiştirdikten sonra (gerçek yolu arayın sunucunuzda), tüm tuhaflıklar on dakika ile ortadan kalktı.
Elise van Looij

Yanıtlar:


193

Sahipsin git submodule deinit

git submodule deinit <asubmodule>    
git rm <asubmodule>
# Note: asubmodule (no trailing slash)
# or, if you want to leave it in your working tree
git rm --cached <asubmodule>
rm -rf .git/modules/<asubmodule>

deinit

Verilen alt modüllerin kaydını kaldırınsubmodule.$name , yani tüm
bölümü .git/configçalışma ağacı ile birlikte kaldırın .

Daha çağrılar için git submodule update, git submodule foreachve git submodule syncolacak atlamak tekrar başlatıldı kadar artık iş ağacında altmodülün yerel ödeme yapmak istemiyorsanız bu nedenle bu komutu kullanın kayıtsız submodules.

Bir alt modülü depodan gerçekten kaldırmak ve git rmbunun yerine bunu kullanmak istiyorsanız .

Eğer --forcebelirtilirse, alt modül çalışması ağacı yerel değişiklikler içerse bile kaldırılacaktır.


8
ben ve diğer kullanıcılar için alt modülü tamamen silmek istiyorum. Bu yüzden ihtiyacım olan tek şey git submodule deinit asubmodule; ve git rm asubmodule ?? Ayrıca alt modülü önbelleğe alan diğer kullanıcılar da, aşağı çektikten sonra onu silmek zorunda kalacaklar mı?
j2emanue

1
Alt modülün yerel kopyasını silmek istedim ve bu mükemmel çalıştı, alt dizindeki tüm dosyalar gitti.
malhal

1
rm -rf <asubmodule>Alt modülün kaydını kaldırmış olan temel deponun bir sürümünü zaten kontrol ettiyseniz de ihtiyacınız olabilir .
Sarah Messer

6

Git 2.16.2 sürümünü kullanıyorum ve git rmişi çoğunlukla iyi yapıyor:

git rm path-to-submodule

İle git statusve git diff --cachedbunun alt modülü başlattığını ve .gitmodulesotomatik olarak değiştirdiğini doğrulayabilirsiniz . Her zaman olduğu gibi, değişikliği kabul etmelisiniz.

Bununla birlikte, alt modül kaynak kontrolünden kaldırılmış olsa bile, .git/modules/path-to-submoduleyine de alt modül deposunu ve .git/configURL'sini içerdiği için bunları manuel olarak kaldırmanız gerekir:

git config --remove-section submodule.path-to-submodule
rm -rf .git/modules/path-to-submodule

Alt modül havuzunu ve yapılandırmasını tutmak kasıtlıdır, böylece örneğin git reset --hard.


1
en yeni cevap ve en kısa çözüm
TurboGuma

3

Bir alt modül nasıl güvenle kaldırılır.

( https://stackoverflow.com/a/1260982/342794 sayfasına eklenir )

  1. .gitmodulesDosyadaki alt modül bölümünü listeleyin ve bulun . Terminal aracılığıyla söyleyin vi .gitmodules. Misal:

    [submodule "submodules/afnetworking"]
        path = submodules/afnetworking
        url = https://github.com/CompanyName/afnetworking.git
    
  2. Alt modüller yerel çatallarla kullanılabilir. Uzun süren projeler için kod orijinal depodan farklı olabilir ve bazı düzeltmeler olabilir. Alt modül kodunun proje süresince değişikliklere uğrayıp uğramadığını doğrulamak iyi bir fikirdir. Örnek: Bir masterşubeye veya yerel bir şubeye işaret ediyorsa, günlüklere bakın . uçbirim aracılığıyla yapılan değişiklikleri bulmak için git günlüklerini keşfetmek. bunlar tipik olarak benim örneğim gibi bir dizin altında, dizin altında saklanır submodules.

    User$ cd submodules/afnetworking
    User$ git log
    
  3. Alt modül bölümünü .gitmodules'den kaldırın, dosyayı kaydedin. Örnek: git statusyalnızca aşağıdakileri değiştirilmiş olarak göstermelidir

    modified:   .gitmodules
    
  4. Değişiklikleri ile sahneleyin git add .gitmodules.

  5. .git/configDosyalardaki alt modül bölümünü listeleyin ve bulun . Terminal aracılığıyla söyleyin vi .git/config. Misal:

    [submodule "submodules/afnetworking"]
        url = https://github.com/CompanyName/afnetworking.git
    
  6. Git cache sobmodule dosyalarını kaldırın. koşmak git rm --cached submodules/afnetworking(eğik çizgi yok) başarılı bir şekilde kaldırır. Misal:

    User$ git rm --cached submodules/afnetworking
    rm 'submodules/afnetworking'    <-- terminal output
    
  7. .gitDizinin altındaki alt modül dosyalarını ile kaldırın rm -rf .git/modules/.... git statusDaha sonra ile onaylayın .

    User$ rm -rf .git/modules/submodules/afnetworking/
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
        modified:   .gitmodules
        deleted:    submodules/afnetworking
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    
  8. Değişiklikleri uygulayın. git statusDaha sonra ile onaylayın .

    User$ git commit -m "Remove submodule afnetworking"
    [feature/replace-afnetworking-submodule-with-pod 70e239222] Remove submodule afnetworking
    2 files changed, 4 deletions(-)
      delete mode 160000 submodules/afnetworking
    User$ git status
    On branch feature/replace-afnetworking-submodule-with-pod
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
        submodules/afnetworking/
    nothing added to commit but untracked files present (use "git add" to track)
    
  9. İzlenmeyen alt modül dosyalarını silin.

    User$ rm -rf submodules/afnetworking
    
  10. Xcode projesinden referansları silin. Derleme ve çalıştırma sorunlarını derleyin, düzeltin.

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.