Bir alt modülü nasıl kaldırabilirim?


3539

Git alt modülünü nasıl kaldırabilirim?

Bu arada, basitçe yapamayacağım bir sebep var git submodule rm whatevermı?


109
Basit cevap stackoverflow.com/a/21211232/94687 artık doğru cevaptır ve işaretlenmelidir. Şimdi, sadece git rm modulenameverm -rf .git/modules/modulename
imz - Ivan Zakharyaschev

10
Aslında bu doğru değil. Bu cevap, alt modül girişinin kaldırılmasıyla ilgili değildir .git/config. Kabul edilen cevap, bir alt modülü tamamen kaldırmak için güncel yolu gösterir. Ayrıca bu cevapta daha özlü bir şekilde açıklanmıştır: stackoverflow.com/a/36593218/1562138
fvgs

Bu makaleyi alt modüllerin çıkarılmasında çok yararlı buldum. .Gitsubmodules ve .git / config dosyaları bağlantısındaki
Ri_

12
Lütfen biraz zaman
kazanın

Alt modül problemlerini iki gündür güreştim. Atılım bunu bulduğumda geldi: forums.developer.apple.com/thread/13102 . Temel olarak, Xcode ve belki de diğer uygulamalar, url'nin '~' içerenlerini genişletmek için mücadele eder. Ssh: //username@server.remoteHost.com/~/git/MyRepo.git öğesini ssh olarak değiştirdikten sonra: //username@server.remoteHost.com/home/username/git/MyRepo.git (asıl yola bakın) sunucunuzda), tüm tuhaflıklar on dakika içinde ortadan kayboldu. Ayrıca bkz. Stackoverflow.com/questions/32833100/…
Elise van Looij

Yanıtlar:


2213

Git1.8.3'ten beri (22 Nisan 2013) :

"" Bu alt modülle ilgilenmiyorum "demenin Porselen yolu yoktu," submodule init" ile bir alt modüle olan ilginizi ifade ettikten sonra .
" submodule deinit" bunu yapmanın yolu.

Silme işlemi de kullanılır git rm(git1.8.5 Ekim 2013'ten beri).

özet

3 adımda kaldırma işlemi şu şekilde olur:

0. mv a/submodule a/submodule_tmp

1. git submodule deinit -f -- a/submodule    
2. rm -rf .git/modules/a/submodule
3. git rm -f a/submodule
# Note: a/submodule (no trailing slash)

# or, if you want to leave it in your working tree and have done step 0
3.   git rm --cached a/submodule
3bis mv a/submodule_tmp a/submodule

açıklama

rm -rfBu belirtilen Daniel Schroeder bireyin cevabı ile ve özetlenmiştir Eonil içinde yorumlarla :

Bu .git/modules/<path-to-submodule>/değişmeden kalır.
Bu yöntemle bir alt modülü bir kez silip yeniden eklerseniz, havuz zaten bozulmuş olduğundan bu mümkün olmaz.


git rm: Bkz. Taahhüt 95c16418 :

Şu anda git rmbir alt modülde " " kullanılması , alt modülün çalışma ağacını üst projenin çalışma ağacından ve gitlink'i dizinden kaldırır.
Ancak alt modülün bölümüne .gitmodulesdokunulmadan bırakılır, bu da şimdi kaldırılan alt modülün arta kalan kısmıdır ve kullanıcıları tahriş edebilir (bu ayarın aksine .git/config, kullanıcının bu alt modüle ilgi gösterdiğini hatırlatması gerekir, böylece daha sonra yeniden doldurulur. eski bir teslim alındığında).

" git rm" Sadece alt ağacı çalışma ağacından kaldırarak değil, aynı zamanda " submodule.<submodule name>" bölümünü .gitmodulesdosyadan kaldırarak ve her ikisini de sahne alarak kullanıcıya yardımcı olsun .


git submodule deinit: Bu yamadan kaynaklanıyor :

" git submodule init" İle kullanıcı git'e bir veya daha fazla alt modülü önemsediğini söyleyebilir ve bir sonraki " git submodule update" çağrısında doldurulmasını ister .
Ama şu anda git artık bir alt modül umurumda değil ve yerel çalışma ağacından kurtulmak istiyor (kullanıcı alt modül içleri hakkında çok şey bilmiyor ve " submodule.$name.url" ayarını .git/configiş ile birlikte kaldırmazsa) ağaç kendisi).

' deinit' Komutu sağlayarak bu kullanıcılara yardımcı olun .
Bu , tüm submodule.<name>bölümü .git/configya verilen alt modül (ler) den (ya da ' .' verilirse başlatılmış olanlardan ) kaldırır .
Geçerli çalışma ağacı zorunlu olmadığı sürece değişiklikler içeriyorsa başarısız olur.
Komut satırında verilen bir alt modül için url ayarının ne zaman bulunamadığını .git/config, ancak yine de başarısız olmadığından şikayet edin .

Bu, (de) başlatma adımlarının ( .git/configve .git/modules/xxx)

Git1.8.5 beri git rmalır da bakımı:

  • addBir alt modülün URL'sini .gitmodulesdosyaya kaydeden ' ' adım : sizin için kaldırılması gerekir.
  • alt modül özel girişi ( bu soruda gösterildiği gibi ): git rm dizinden kaldırır:
    git rm --cached path_to_submodule(arkadaki eğik çizgi yok)
    Dizinde depolanan dizini özel bir "160000" modu ile kaldırarak alt modül kök dizini olarak işaretler .

Bu son adımı unutursanız ve bir alt modülün ne olduğunu normal bir dizin olarak eklemeyi denerseniz, aşağıdaki gibi hata mesajı alırsınız:

git add mysubmodule/file.txt 
Path 'mysubmodule/file.txt' is in submodule 'mysubmodule'

Not: Git 2.17'den (Q2 2018) beri git alt modül deinit artık bir kabuk betiği değildir.
Bir C fonksiyonuna yapılan çağrıdır.

Bkz 2e61273 işlemek , 1.342.476 taahhüt tarafından (14 Oca 2018) Prathamesh Chavan ( pratham-pc) .
(Göre Birleştirilmiş Junio Cı Hamano - gitster- içinde ead8dbe tamamlama , 13 Şubat 2018)

git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit \
  ${GIT_QUIET:+--quiet} \
  ${prefix:+--prefix "$prefix"} \
  ${force:+--force} \
  ${deinit_all:+--all} "$@"

18
Bunun için bir örnek verebilir misiniz submodule deinit?
zakdances

5
@yourfriendzak burada başarıyla kullanan birinin bir örneği: stackoverflow.com/a/16161950/6309 . Ancak, başlangıçta inandığımın aksine, 1.8.3'ün henüz yayınlanmadığını unutmayın! Unix'te, kaynaklardan derleyebilirsiniz.
VonC

2
@HamishDowner özel giriş gitmiş olmalı (dizin artık bir alt modül değil) ve .gitmodulestamam olmalı, ama yine de .gitdizini ile bir şey kontrol ediyorum (yani yerel repo içinde yerel yapılandırma, bu değil: tarafından değiştirildi a git pull)
VonC

2
@ Evet evet, .gitmodulesgirişin kaldırılmasını ve dizindeki özel girişin kaldırılmasını ve bu repoyu ittirmeyi taahhüt ederseniz , diğerleri onu çekebilir ve bu alt modül gider.
VonC

3
Geçerli git'te (v1.9 +), düz eski git rm submoduletam olarak diğerlerinin söylediği gibi tam olarak istediğinizi yapar.
Pete Peterson

3445

Git Alt Modül Eğitimi sayfası aracılığıyla :

Bir alt modülü çıkarmak için yapmanız gerekenler:

  1. İlgili bölümü .gitmodulesdosyadan silin .
  2. Sahneye .gitmodulesdeğişiklikleri:
    git add .gitmodules
  3. İlgili bölümü sil .git/config.
  4. Alt modül dosyalarını çalışma ağacından ve dizinden kaldırın:
    git rm --cached path_to_submodule(sondaki eğik çizgi yok).
  5. Alt modülün .gitdizinini kaldırın :
    rm -rf .git/modules/path_to_submodule
  6. Değişiklikleri yapın:
    git commit -m "Removed submodule <name>"
  7. Şimdi izlenmeyen alt modül dosyalarını silin:
    rm -rf path_to_submodule

Ayrıca bakınız : aşağıdaki alternatif adımlar .


410
"Ve bu arada, alt modül rm'yi ne olursa olsun gitmememin bir nedeni var mı?" ?
abernier

48
@abernier Kısa bir yanıt "böyle bir komut olmadığı için" olabilir. Tahminimce, yanlışlıkla veri kaybını önlemek için alt modül dosyalarının alt modül yapılandırmasına karşı açık hale getirilmesi çalışıyorlar. Belki de bir kişi git submodule rmsadece modül kaydını kaldırdığını düşünür ve komut yerel depoyu da sildiyse şaşırırdı. Herhangi bir yerel değişiklik geri alınamaz bir şekilde kaybedilecektir. Ve belki de başka bir kişi sadece dosyaların kaldırılacağını düşünür.
John Douthat

119
Açıkçası, neden bilmiyorum. Umarım bir komut eklerler. Bu 4 adım çok karmaşıktır.
John Douthat

25
İşte bir alt modülü kaldıran bir bash betiği, sadece submodule-rm için bir git takma adı oluşturun;) gist.github.com/2491147
Capi Etheriel

33
ayrıca rm -rf .git \ modülleri \ alt modül adı gerekir?
rogerdpack

484

Sadece bir not. Git 1.8.5.2'den bu yana iki komut yapılacaktır:

git rm the_submodule
rm -rf .git/modules/the_submodule

@Mark Cheverton'un cevabının doğru bir şekilde işaret ettiği gibi, ikinci satır kullanılmazsa, şimdilik alt modülü kaldırmış olsanız bile, kalan .git / modules / the_submodule klasörü aynı alt modülün gelecekte eklenmesini veya değiştirilmesini önleyecektir . Ayrıca, @VonC'un belirttiği gibi git rm, işin çoğunu bir alt modülde yapacaktır.

- Güncelleme (07/05/2017) -

Sadece açıklığa kavuşturmak için, the_submoduleprojenin içindeki alt modülün göreli yolu. Örneğin subdir/my_submodule, alt modül bir alt dizinin içindeyse subdir.

Yorumlarda ve diğer cevaplarda doğru bir şekilde belirtildiği gibi , iki komut (bir alt modülü çıkarmak için işlevsel olarak yeterli olsa da ), üçüncü bir komut kullanılarak kaldırılabilen (Temmuz 2017 itibarıyla) [submodule "the_submodule"]bölümünde bir iz bırakır .git/config:

git config -f .git/config --remove-section submodule.the_submodule 2> /dev/null

5
Git sürüm 2.4.9 (Apple Git-60) kullanıyorum ve tek yapmam gereken rm the_submodule oldu. Daha sonra alt modülle aynı adlı bir klasörü yeniden ekledim ve sorunsuz çalıştı.
David Silva Smith

19
Bu, alt modül girişini kaldırmaz .git/config. Bir alt modülü çıkarmanın tam yolu için stackoverflow.com/a/36593218/1562138 adresine bakın .
fvgs

2
@drevicko Bunu Git 2.11.1 ile test ettim ve eskisi gibi davranıyorum. girişin, dizinin ve içeriğinin git init && git submodule add <repository> && git rm <name>arkasında kalır . Belki de alt modülü çıkarmadan önce başlatmadınız mı? .git/config.git/modules/<name>
fvgs

2
i bu ilk çalışan daha güvenli hissediyorum .. git submodule deinit -f the_submodule
danday74

1
@JarrodSmith Evet, işte yol. lütfen güncellemeye bakın.
tinlyx

478

Bu soruya verilen cevapların çoğu modası geçmiş, eksik veya gereksiz yere karmaşıktır.

Git 1.7.8 veya daha yenisi kullanılarak klonlanan bir alt modül yerel deponuzda en fazla dört iz bırakacaktır. Bu dört izi kaldırma işlemi aşağıdaki üç komutla verilir:

# Remove the submodule entry from .git/config
git submodule deinit -f path/to/submodule

# Remove the submodule directory from the superproject's .git/modules directory
rm -rf .git/modules/path/to/submodule

# Remove the entry in .gitmodules and remove the submodule directory located at path/to/submodule
git rm -f path/to/submodule

39
Neden bu cevabın bu kadar az oyu var? Tüm bu popüler cevaplar bir şeyi özlüyor, bir alt modülün tüm izlerini gerçekten mümkün olan en basit şekilde kaldıran tek cevap bu. Ve not: komutların sırası önemlidir.
mbdevpl


5
@mbdevpl kabul edilen cevaptan 3 yıl sonra geldi ve sanırım hiç kimse OP'yi bunu kabul etmeye ikna etmeyi başaramadı
Andy

10
BU 2018'de karmaşık olmayan cevap mı?
Warren P

9
.gitmodules dosya hala şu komutları çalıştırarak etkilenmemiş görünüyor
Fractalf

206

Basit adımlar

  1. Yapılandırma girişlerini kaldır:
    git config -f .git/config --remove-section submodule.$submodulename
    git config -f .gitmodules --remove-section submodule.$submodulename
  2. Dizini dizinden kaldır:
    git rm --cached $submodulepath
  3. işlemek
  4. Kullanılmayan dosyaları silin:
    rm -rf $submodulepath
    rm -rf .git/modules/$submodulename

Lütfen dikkat: $submodulepath önde gelen veya sondaki eğik çizgiler içermez.

Arka fon

Bunu yaptığınızda git submodule add, sadece ekler .gitmodulesama yaptın kez git submodule init, bu ilave .git/config.

Dolayısıyla, modülleri kaldırmak, ancak hızlı bir şekilde geri yükleyebilmek istiyorsanız, sadece şunu yapın:

git rm --cached $submodulepath
git config -f .git/config --remove-section submodule.$submodulepath

Bunu bir senaryoya koyarsanız, git rebase HEADönce ve git commitsonunda yapmak iyi bir fikirdir .

Ayrıca bir göz bir cevap Can Ben Git submodule unpopulate? .


1
Çok sayıda alt modül (ve daha büyük bir karmaşa) vardı, bu yüzden onları bir for döngüsünden geçirmek zorunda kaldım. Çoğu beri belirli bir dizin ve ls çıktı altında sondaki eğik çizgiler içeriyordu. Böyle bir şey yaptım for dir in directory/*; do git rm --cached $dir; done.
Pablo Olmos de Aguilera C.9

Bunu elde etmek için özyinelemeli silme için komut dosyasında kullanılabilecek liste - git config -f .git/config -l | cut -d'=' -f1 | grep "submodule.$MODPATH" | sed 's/^submodule\.//' | sed 's/\.url$//'- - bir şeylerin git submodule | grep -v '^+' | cut -d' ' -f3
dağınık

2
hiçbir yerel değişiklik yapılmayan modüllerin listesini almak için -git submodule | grep '^+' | cut -d' ' -f2
errordeveloper

not, ben submodulenameçift ​​tırnak eklemek zorunda "submodulename".. .git/configdosyaya atıfta
muon

Basit. Verimli. 2.25.0'da, adım 1'den sonra, adım 2'den önce .timmodüller değişir.
Michel

83

Önerilere ek olarak, rm -Rf .git/modules/path/to/submoduleaynı ada sahip yeni bir alt modül ekleyebilmeliydim (benim durumumda bir çatalı orijinaliyle değiştiriyordum)


1
Ben de bu konuda sıkıntı yaşıyordum. Bir alt modülü aynı yola yeniden yüklemeye çalışırsanız, şube bilgilerini bahsettiğiniz yerde önbelleğe alır ve bu da işleri bozar.
jangosteve

Teşekkürler, ben de buna ihtiyacım vardı. @Anton, katılıyorum ve bu bilgiyi eklemek için en üstteki cevabı düzenledim.
William Denniss

Değiştirme işlemini yapmak için --name seçeneğini kullandım ... bkz. Stackoverflow.com/questions/14404704/…
joseph.hainline

60

Şunları kullanarak eklenen bir alt modülü kaldırmak için:

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

Çalıştırmak:

git rm lib/blah

Bu kadar.

Git'in eski sürümleri için (yaklaşık ~ 1.8.5) kullanın:

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

1
+1. Git 1.8.3'ten sonraki tek doğru cevap budur. Doğru olarak kabul edilmelidir.
Xananax

6
git rmhala içeri giriyor .git/modules/. (2.5.4)
Rudolf Adamkovič

1
@ RudolfAdamkovic benim için çalışıyor mu? Yalnızca tam yol eşleştiğinde alt modül girişini kaldırdığına dikkat edin; bir alt modülü taşıdıysanız ve sonra kullanmazsanız git rm; Mac'imde 2.5.4 ile yapılan hızlı bir test, buradaki belgelerde açıklandığı gibi .gitmodules dosyasını günceller: git-scm.com/docs/git-rm#_submodules ... ancak bir çeşit platform kombinasyonu bulduysanız / sürümünün olmadığı durumlarda, muhtemelen bu konuda bir hata bildirmelisiniz.
Doug

2
Bu cevap tamamen doğru değil. git rmşeyleri .git/modules/dir ve .git/configdosyada bırakır (ubuntu, git 2.7.4). Diğer cevaplar% 100 çalışıyor: stackoverflow.com/a/36593218/4973698
mbdevpl

50

İçeri girişi kaldırmak gerekir .gitmodulesve .git/config, ve tarihten modülün dizini kaldırın:

git rm --cached path/to/submodule

Git'in posta listesine yazacaksanız muhtemelen birisi sizin için bir kabuk betiği yapar.


Herhangi bir kabuk betiğine gerek yoktur, diğer cevapta bir alt
modülün

42

Başkaları tarafından sağlanan çözümleri otomatikleştirmek için bir takma ad kullanabilirsiniz:

[alias]
  rms = "!f(){ git rm --cached \"$1\";rm -r \"$1\";git config -f .gitmodules --remove-section \"submodule.$1\";git config -f .git/config --remove-section \"submodule.$1\";git add .gitmodules; }; f"

Git git yapılandırmanıza koyun ve şunları yapabilirsiniz: git rms path/to/submodule


-1 çünkü bu çok yanlış. BİRİNCİ: Bu, alt modülün adının ve yolunun özdeş olduğunu varsayar; bu çoğu zaman durum böyle değildir . IE git clone https://github.com/hilbix/empty.git; cd empty; git submodule add https://github.com/hilbix/empty.git one; git mv one two; git rms two. İKİNCİ: Bunu doğru yoldan yürütmelisiniz. gittakma adlar çalışma ağacının herhangi bir yerinde çalışmalıdır (veya zarif bir şekilde başarısız olur). ÜÇÜNCÜ: genellikle orada bir dosya olduğu git config -f .git/configgibi alt modüllerde başarısız olur .git.
Tino

42

Özetlemek gerekirse, yapmanız gereken budur:

  1. Takım path_to_submodulevar (bir eğik çizgi):

    path_to_submodule=path/to/submodule

  2. İlgili satırı .gitmodules dosyasından silin:

    git config -f .gitmodules --remove-section submodule.$path_to_submodule

  3. İlgili bölümü .git / config dizininden silin

    git config -f .git/config --remove-section submodule.$path_to_submodule

  4. $ Path_to_submodule değişkenini kaldırın ve yalnızca dizinden kaldırın (bilgi kaybını önlemek için)

    git rm --cached $path_to_submodule

  5. .Gitmodules üzerinde yapılan değişiklikleri izleyin

    git add .gitmodules

  6. Süper projeyi yürütün

    git commit -m "Remove submodule submodule_name"

  7. Şimdi izlenmeyen alt modül dosyalarını silin

    rm -rf $path_to_submodule

    rm -rf .git/modules/$path_to_submodule


benim değişikliği aşağı çeken herkes alt modül önbelleğini kaldırmak için rm -rf $ path_to_submodule rm -rf .git / modules / $ path_to_submodule çalıştırmak zorunda kalacak?
j2emanue

Güncellemenizi tavsiye ederim git submodule update. Ve alt modül yolları doğru şekilde güncellenmediyse (git bir hata atar), bunları kaldırın:rm -rf .git/modules/<submodule> && rm -rf <submodule> && git submodule update
luissquall

40

Zaten Git deposu olan (içerdiği ) bir klasörü eklediğiniz, işlediğiniz ve ittiğiniz için alt modül yanlışlıkla eklendiyse, düzenleyecek .gitbir .gitmodulesdosyanız veya içinde hiçbir şey olmaz .git/config. Bu durumda ihtiyacınız olan tek şey:

git rm --cached subfolder
git add subfolder
git commit -m "Enter message here"
git push

FWIW , ben de .gityapmadan önce klasörü kaldırdım git add.


tam olarak
davam

37

Benim deinitiçin iyi işler buldum :

git submodule deinit <submodule-name>    
git rm <submodule-name>

Gönderen git docs :

deinit

Verilen alt modüllerin kaydını kaldırın, yani tüm submodule.$name bölümü çalışma ağaçlarıyla birlikte .git / config'ten kaldırın .


Aynı çözümü buldum. Bugün 2018'de en iyi yol)
woto

1
.git / modules / .. öğesini kaldırmadı. Sen @fvgs tarafından cevap görmek, bunları kaldırmak gerekir
Vilém Kurz

Bu basit ve kolay çözümün neden 1 numara olduğunu bilmiyorum
Marc Magon

AFAICS bu gibi görünüyor yeni en güvenli cevap gits bildiğim deinitgibi diğer cevap kaldırır .git/modules/submoduleçok erken dizini yeni yapmaya tavır sergileyen gitler şimdi veya daha sonra başarısız olmasına. Ayrıca (oradaki yorumuma bakın) kaldırma .git/modules/submoduleyanlış yol olabilir, bu yüzden bu en iyi gitşikayet daha sonra ancak (ne istediğinizi% 299 emin iseniz, doğru yol ve gerçekten gerekli olduğunda) atılan tehlikeli bir adımdır .
Tino

Ayrıca git commitçalışma direktifinde aşamalı değişiklikler yapmam gerekiyordu : modified .gitmodulesve deleted <submodule-path>.
Yuriy Pozniak

20

Bu sitedeki tüm farklı cevapları denedikten sonra bu çözümü buldum:

#!/bin/sh
path="$1"
if [ ! -f "$path/.git" ]; then
  echo "$path is no valid git submodule"
  exit 1
fi
git submodule deinit -f $path &&
git rm --cached $path &&
rm -rf .git/modules/$path &&
rm -rf $path &&
git reset HEAD .gitmodules &&
git config -f .gitmodules --remove-section submodule.$path

Bu, alt modülü eklemeden önceki durumun aynısını geri yükler. Hemen alt modülü tekrar ekleyebilirsiniz, buradaki cevapların çoğu ile mümkün değildi.

git submodule add $giturl test
aboveScript test

Bu işlem size hiçbir değişiklik yapmadan temiz bir ödeme yapmanıza olanak tanır.

Bu aşağıdakilerle test edildi:

$ git --version
git version 1.9.3 (Apple Git-50)

Neden git rm --cached $patho zaman rm -rf $pathyerine kullanıyorsun git rm -r $path?
bfontaine

-1 Bir alt modül içindeki bir alt modülü kaldırmaya çalışırsanız çalışmaz (alt modül ağaçlar oluşturabilir!). Ayrıca bu eksik alıntı nedeniyle tehlikeli bir adamcağız ! Örnek git submodule add https://github.com/hilbix/empty.git 'dangerous .. submodule'-> betiğinizle 'tehlikeli .. alt modülünü' kaldırmaya çalıştığınızda, bu rm -rf ..büyük olasılıkla istediğiniz şey değildir ..
Tino

17

Şu anda ne yapıyorum Aralık 2012 (bu cevapların çoğunu birleştirir):

oldPath="vendor/example"
git config -f .git/config --remove-section "submodule.${oldPath}"
git config -f .gitmodules --remove-section "submodule.${oldPath}"
git rm --cached "${oldPath}"
rm -rf "${oldPath}"              ## remove src (optional)
rm -rf ".git/modules/${oldPath}" ## cleanup gitdir (optional housekeeping)
git add .gitmodules
git commit -m "Removed ${oldPath}"

15

İşte yaptığım şey:

1.) İlgili bölümü .gitmodules dosyasından silin. Aşağıdaki komutu kullanabilirsiniz:

git config -f .gitmodules --remove-section "submodule.submodule_name"

2.) .gitmodulesDeğişiklikleri aşamalandırın

git add .gitmodules

3.) İlgili bölümü silin .git/config. Aşağıdaki komutu kullanabilirsiniz:

git submodule deinit -f "submodule_name"

4.) Gitlink'i kaldırın (sondaki eğik çizgi yok):

git rm --cached path_to_submodule

5.) Temizleyin .git/modules:

rm -rf .git/modules/path_to_submodule

6.) Taahhüt:

git commit -m "Removed submodule <name>"

7.) Şimdi izlenmeyen alt modül dosyalarını silin

rm -rf path_to_submodule

Bunun için teşekkürler. Benim için ilk üç adımın sırasını 3), 1), 2) yeniden düzenlemek zorunda kaldım. 1) yapmak ilk olarak fatal: no submodule mapping found in .gitmodules for path 'submodule_name'3. adımda verdi . Her iki adım da gerekliydi. (git v2.8.2)
U007D

13

Son zamanlarda git ile ilgili birçok yararlı komut içeren bir git projesi buldum: https://github.com/visionmedia/git-extras

Kurun ve şunu yazın:

git-delete-submodule submodule

Sonra işler yapılır. Alt modül dizini deponuzdan kaldırılacak ve dosya sisteminizde bulunmaya devam edecektir. Ardından gibi değişiklik işleyebileceği: git commit -am "Remove the submodule".


Buna git delete-submodule, git-extrasçalışma yolunda olması gerektiği gibi diyebilirsiniz . Ayrıca , birçok parçasının son derece buggy ve tehlikeli olduğu için kullanılmamasını tavsiye ettiğimigit-extras unutmayın . IE , modül ve yolun aynı olduğunu varsaydığı için (muhtemelen çoğu zaman böyle değildir) ve bir alt modül içindeki bir alt modülü kaldırmaya çalıştığınızda doğru şekilde çalışmadığından aşağıdaki yanlış yolu kaldırır . 99% faydalı olabilir, ancak işler tamamen yanlış giderse lütfen şikayet etmeyin. UYARILDIN! git-delete-submodule.git/modules/*git-extras
Tino

10

John Douthat'ın adımlarını bir adım daha ileriye ve cdalt modülün dizinine götürüp Git deposunu kaldırmam gerekiyordu:

cd submodule
rm -fr .git

Daha sonra dosyaları bir alt modüle eski referans olmadan üst Git havuzunun bir parçası olarak işleyebilirim.


Bu git rm --cacheadımı yapmaya çalışırken bir "ölümcül: Git git depository:" hatası geçmiş almak için de yapmak zorunda kaldı .
RickDT

9

İşte gerekli veya yararlı bulduğum 4 adım (önce önemli olanlar):

git rm -f the_submodule
rm -rf .git/modules/the_submodule
git config -f .git/config --remove-section submodule.the_submodule
git commit -m "..."

Teoride , git rmiçinde adım 1'de icabına gerekir. Umarım, OP sorununun ikinci kısmı bir gün olumlu olarak cevaplanabilir (bu bir komutta yapılabilir).

Ancak Temmuz 2017'den itibaren verileri kaldırmak için 2. adım gereklidir; .git/modules/aksi takdirde, örneğin alt modülü ileride geri ekleyemezsiniz.

Tüm komutlar işe yaradığı için tinlyx'in cevabının belirtildiği gibi git 1.8.5+ için yukarıdaki iki adımı atlayabilirsiniz git submodule.

Adım 3 the_submoduledosyadaki bölümü kaldırır .git/config. Bu bütünlük için yapılmalıdır. (Giriş eski git sürümleri için sorunlara neden olabilir, ancak test etmek için bir tane yok).

Bunun için cevapların çoğu kullanmanızı önerir git submodule deinit. Bunu daha açık ve daha az kafa karıştırıcı buluyorum git config -f .git/config --remove-section. Göre git-alt modül belgelerinde , git deinit:

Verilen alt modüllerin kaydını kaldırın ... Bir alt modülü depodan gerçekten kaldırmak ve bunun yerine git-rm [1] komutunu kullanmak istiyorsanız .

Son fakat en az değil, eğer yapmazsanız git commit, yaparken git submodule summary( hata 2.7'den itibaren) bir hata alırsınız / alabilirsiniz :

fatal: Not a git repository: 'the_submodule/.git'
* the_submodule 73f0d1d...0000000:

Bu, 2. veya 3. adımları uygulamanızdan bağımsızdır.


7
project dir:     ~/foo_project/
submodule:       ~/foo_project/lib/asubmodule
- - - - - - - - - - - - - - - - - - - - - - - - -
run:
  1.   cd ~/foo_project
  2.   git rm lib/asubmodule && 
          rm .git/modules/lib/asubmodule && 
            git submodule lib/asubmodule deinit --recursive --force

7

Ben sadece .submodule (tam adı unuttum) gizli dosyayı buldum, bir listesi var ... onları bu şekilde ayrı ayrı silebilirsiniz. Sadece bir tane vardı, bu yüzden sildim. Basit, ama Git'e zarar verebilir, çünkü alt modüle bir şey bağlı olup olmadığını bilmiyorum. Şimdiye kadar, libetpan'ın her zamanki yükseltme sorunu dışında ok gibi görünüyor, ancak (umarım) ilgisiz.

Kimsenin manuel silme göndermediğini fark etti, bu yüzden eklendi


Bu.gitmodules
Arialdo Martini

7

Git 2.17 ve üstü ile sadece:

git submodule deinit -f {module_name}
git add {module_name}
git commit

İşe için ne yoktu git 2.17.1, ne de git 2.20.1. Ancak git rmyerine git addher ikisi için çalıştı. Notlar: işler temizse -fgerekli değildir . Emin olun seçeneklerini kullanmak asla ile gitsize istenmeyen veri kaybına karşı koruma istiyorum. Ayrıca bunun .git/modules/{module_name}yerinde kaldığını unutmayın . Onu orada tutmak en iyi uygulamadır, çünkü gitdoğru (!) Baskılar bu nedenle bir şey engellenirse nasıl devam edeceğinize yardımcı olur.
Tino

4

Alt modülü yeni eklediyseniz ve örneğin, yanlış alt modülü eklediyseniz veya yanlış yere eklediyseniz git stash, klasörü silin. Bu, son modülden yaptığınız tek şey alt modülün eklenmesinin olduğunu varsayar.


3

Bu, okuyucunun yararı için, onu özetlemeye ve işler beklendiği gibi çalışmazsa nasıl yapılacağına dair adım adım bir kılavuz vermeye çalışır. Aşağıda test edilmiş ve güvenli bir yol için gitsürümüne 2.17ve üzeri bir altmodülün kurtulmak için :

submodule="path/to/sub"              # no trailing slash!
git submodule deinit -- "$submodule"
git rm -- "$submodule"
  • Bu sizin için işe yaramazsa aşağıya bakın.
  • Seçenek yok. Tehlikeli bir şey yok. Ve daha fazlasını yapmayı bile düşünmeyin!
  • Debian Buster 2.20.1ve Ubuntu 18.04 ile test edildi 2.17.1.
  • "$submodule" sadece adı nereye koyacağınızı ve boşluklara ve benzerlerine dikkat etmeniz gerektiğini vurgulamaktır
  • Windows üzerinde ise, ilk satırı yok sayın "$submodule"ve alt modüle doğru şekilde belirlenmiş bir yolun Windows yoluyla değiştirin . (Ben Windows değilim)

Uyarı!

Asla .gitdizinin iç kısımlarına dokunmayın ! İçeride düzenleme .gitkaranlık tarafa girer. Ne pahasına olursa olsun uzak dur!

Ve evet, bunun gitiçin suçlayabilirsiniz , çünkü gitgeçmişte birçok kullanışlı şey eksikti . Alt modülleri tekrar çıkarmanın uygun bir yolu gibi.

Dokümantasyonunda çok tehlikeli bir kısım olduğunu düşünüyorum git submodule. $GIT_DIR/modules/<name>/Kendinizi çıkarmanızı önerir . Anladığım kadarıyla bu sadece basit bir yanlış değil, son derece tehlikelidir ve gelecekte büyük baş ağrılarına neden olur! Aşağıya bakınız.

Bunu not et

git module deinit

doğrudan ters

git module init

fakat

git submodule deinit -- module
git rm -- module

ayrıca oldukça ters

git submodule add -- URL module
git submodule update --init --recursive -- module

çünkü bazı komutların temelde tek bir şeyden daha fazlasını yapması gerekir:

  • git submodule deinit -- module
    • (1) güncelleme .git/config
  • git rm
    • (2) modülün dosyalarını kaldırır
    • (3) böylece alt modülün alt modüllerini tekrar tekrar kaldırır
    • (4) güncelleme .gitmodules
  • git submodule add
    • verileri içine çeker .git/modules/NAME/
    • (1) yapar git submodule init, bu yüzden güncellemeler.git/config
    • (2) git submodule update, modülü tekrar tekrar kontrol etmez
    • (4) güncelleme .gitmodules
  • git submodule update --init --recursive -- module
    • gerekirse daha fazla veri çeker
    • (3) alt modülün alt modüllerini tekrar tekrar kontrol eder

Bu tamamen simetrik olamaz, çünkü kesinlikle simetrik tutmak pek mantıklı değildir. İkiden fazla komuta gerek yoktur. Ayrıca, "veriyi çekmek" örtüktür, çünkü buna ihtiyacınız vardır, ancak önbelleğe alınmış bilgilerin kaldırılması yapılmaz, çünkü bu hiç gerekli değildir ve değerli verileri silebilir.

Bu gerçekten yeni gelenler için şaşırtıcı, ama temelde iyi bir şey: gitsadece açık bir şey yapar ve bunu doğru yapar ve daha fazlasını yapmaya bile çalışmaz. gitbaşka bir "Eierlegende Wollmilchsau" olmak yerine güvenilir bir iş yapması gereken bir araçtır ("Eierlegende Wollmilchsau" benim için "İsviçreli bir ordu bıçağının kötü versiyonuna" çevirir).

Bu yüzden insanların şikayetlerini anlıyorum, "Neden gitbenim için açık olanı yapmıyor ". Çünkü buradaki "açık" bakış açısından bağlıdır. Her durumda güvenilirlik çok daha önemlidir. Bu nedenle, sizin için açık olan şey, olası tüm teknik durumlarda doğru olan şey değildir. Lütfen unutmayın: AFAICS gitsosyal yolu değil, teknik yolu izler. (Dolayısıyla akıllı isim: git)

Bu başarısız olursa

Yukarıdaki komutlar aşağıdakiler nedeniyle başarısız olabilir:

  • Sizin gitçok eski. Sonra daha yenisini kullanın git. (Nasıl yapılacağı konusunda aşağıya bakın.)
  • Onaylanmamış verileriniz var ve verilerinizi kaybedebilirsiniz. O zaman ilk önce onları halletsen iyi olur.
  • Alt modülünüz bir git cleananlamda temiz değil . Ardından önce bu komutu kullanarak alt modülünüzü temizleyin. (Aşağıya bakınız.)
  • Geçmişte desteklenmeyen bir şey yaptınız git. O zaman karanlık taraftasın ve işler çirkinleşiyor ve karmaşıklaşıyor. (Belki başka bir makine kullanmak sorunu düzeltir.)
  • Belki de bilmediğim başarısız olmanın daha fazla yolu var (Ben sadece biraz gitgüç kullanıcısıyım.)

Olası düzeltmeler takip edilir.

Daha yeni bir tane kullanın git

Makineniz çok eskiyse hayır vardır submodule deinitGözlerinde farklı git. Güncellemenizi istemiyorsanız (veya yapamıyorsanız) git, daha yeni bir makine kullanın git! gittamamen dağıtılmak içindir, bu nedenle gitişi yapmak için başka bir tane kullanabilirsiniz :

  • workhorse:~/path/to/worktree$ git status --porcelain hiçbir şey çıktı olmamalıdır ! Varsa, önce şeyleri temizleyin!
  • workhorse:~/path/to/worktree$ ssh account@othermachine
  • othermachine:~$ git clone --recursive me@workhorse path/to/worktree/.git TMPWORK && cd TMPWORK
  • Şimdi alt modül işlerini yapın
  • othermachine:~/TMPWORK$ git commit . -m . && exit
  • workhorse:~/path/to/worktree$ git fetch account@othermachine:TMPWORK/.git
  • workhorse:~/path/to/worktree$ git merge --ff-only FETCH_HEAD. Bu işe yaramazsa,git reset --soft FETCH_HEAD
  • Şimdi bir şeyleri git statustemizle, tekrar temiz olana kadar . Bunu yapabilirsiniz, çünkü ilk adım sayesinde daha önce temizlediniz.

Bu othermachine, bir VM veya Windows altındaki bazı Ubuntu WSL olabilir. Hatta bir chroot(ama kök olmayan olduğunu varsayıyorum, çünkü eğer öyleyse rootyenisine güncellemek daha kolay olmalı git).

Not açamıyorsa sshüzere ulaşım yolları trainloads vardır gitdepoları. Çalışma ağacınızı bazı USB çubuklara ( .gitdizin dahil ) kopyalayabilir ve çubuktan klonlayabilirsiniz. Sadece temiz bir şekilde bir şeyler almak için kopyayı kopyalayın. Alt modüllerinize doğrudan diğer makineden erişilememesi durumunda, bu bir PITA olabilir. Ancak bunun için de bir çözüm var:

git config --add url.NEWURLPREFIX.insteadOf ORIGINALURLPREFIX

Bu çarpımı kullanabilirsiniz ve bu içine kaydedilir $HOME/.gitconfig. Gibi bir şey

git config --add 'url./mnt/usb/repo/.insteadof' https://github.com/

gibi URL'leri yeniden yazar

https://github.com/XXX/YYY.git

içine

/mnt/usb/repo/XXX/YYY.git

Böyle güçlü gitözelliklere alışmaya başlarsanız çok kolaydır .

Önce şeyleri temizle

Elle temizlemek iyidir, çünkü bu şekilde unuttuğunuz bazı şeyleri tespit edebilirsiniz.

  • Git kaydedilmemiş şeylerden şikayet ederse, taahhüt edin ve güvenli bir yere itin.
  • Git bazı yemeklerden şikayetçiyse git statusve git clean -ixfdarkadaşınsa
  • Seçenekler kaçınmak için deneyin rmve deinitolabildiğince sürece. Eğer bir Pro iseniz seçenekleri (gibi -f) gitiyidir. Ama buraya geldiğiniz gibi, muhtemelen submodulebölgede çok deneyimli değilsiniz . Bu yüzden üzülmektense güvende olsan iyi olur.

Misal:

$ git status --porcelain
 M two
$ git submodule deinit two
error: the following file has local modifications:
    two
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'two' contains local modifications; use '-f' to discard them
$ cd two
$ git submodule deinit --all
error: the following file has local modifications:
    md5chk
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'md5chk' contains local modifications; use '-f' to discard them
$ cd md5chk
$ git submodule deinit --all
error: the following file has local modifications:
    tino
(use --cached to keep the file, or -f to force removal)
fatal: Submodule work tree 'tino' contains local modifications; use '-f' to discard them
$ cd tino
$ git status --porcelain
?? NEW
$ git clean -i -f -d
Would remove the following item:
  NEW
*** Commands ***
    1: clean                2: filter by pattern    3: select by numbers    4: ask each
    5: quit                 6: help
What now> 1
Removing NEW
$ cd ../../..
$ git status --porcelain
$ git submodule deinit two
Cleared directory 'two'
Submodule 'someunusedname' (https://github.com/hilbix/src.git) unregistered for path 'two'

Bakın, buna -fgerek yok submodule deinit. İşler temizse, bir git cleanbakıma. Ayrıca git clean -xgerekli olmadığını da unutmayın . Bu git submodule deinit, yoksayılan izlenmemiş dosyaları koşulsuz olarak kaldırdığı anlamına gelir . Bu genellikle istediğiniz şeydir, ancak unutmayın. Bazen yok sayılan dosyalar, yeniden hesaplanması saatler veya günler süren önbelleğe alınmış veriler gibi değerli olabilir.

Neden asla çıkarmıyorsunuz $GIT_DIR/modules/<name>/?

Muhtemelen insanlar önbelleğe alınmış depoyu kaldırmak istiyorlar, çünkü daha sonra bir sorunla karşılaşmaktan korkuyorlar. Bu doğrudur, ancak bu "problem" ile karşılaşmak onu çözmenin doğru yoludur! Düzeltme kolay ve doğru yapıldığından sonsuza dek mutlu yaşayabileceksiniz. Bu, verileri kendiniz kaldırdığınızdan daha zahmetli bir sorunu önler.

Misal:

mkdir tmptest &&
cd tmptest &&
git init &&
git submodule add https://github.com/hilbix/empty.git two &&
git commit -m . &&
git submodule deinit two &&
git rm two &&
git commit -m . &&
git submodule add https://github.com/hilbix/src.git two

Son satır şu hatayı verir:

A git directory for 'two' is found locally with remote(s):
  origin    https://github.com/hilbix/empty.git
If you want to reuse this local git directory instead of cloning again from
  https://github.com/hilbix/src.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.

Neden bu hata? Çünkü .git/modules/two/daha önce https://github.com/hilbix/empty.git adresinden dolduruldu ve şimdi başka bir şeyden, yani https://github.com/hilbix/src.git olarak yeniden doldurulacak . Https://github.com/hilbix/empty.git adresinden yeniden doldurursanız bunu görmezsiniz

Şimdi ne yapmalı? Peki, aynen söylendiği gibi yapın! kullanım--name someunusedname

git submodule add --name someunusedname https://github.com/hilbix/src.git two

.gitmodules sonra benziyor

[submodule "someunusedname"]
    path = two
    url = https://github.com/hilbix/src.git

ls -1p .git/modules/ verir

someunusedname/
two/

Bu şekilde size dalları geçiş yapabilirsiniz gelecekte / ileri ve geri işlemek ve yeniden herhangi belaya asla nedeniyle, two/iki farklı (ve muhtemelen uyumsuz) memba depoları sahip. Ve en iyisi: Her ikisini de yerel olarak önbelleğe al.

  • Bu sadece sizin için geçerli değil. Deponuzu kullanan diğer herkes için de geçerlidir.
  • Ve tarihi kaybetmezsiniz. Eski alt modülün en son sürümünü aktarmayı unuttuysanız, yerel kopyayı girebilir ve daha sonra yapabilirsiniz. Birisinin bazı alt modülleri itmeyi unutmasının oldukça yaygın olduğuna dikkat edin (çünkü bu alışmaya başlayana kadar yeni gelenler için bir PITA'dır git).

Ancak önbelleğe alınan dizini kaldırdıysanız, --nameseçenekleri kullanamayacağınız için her iki farklı ödeme birbiri üzerine rastlar , değil mi? Yani her ödeme yaptığınızda, .git/modules/<module>/dizini tekrar tekrar kaldırmanız gerekebilir . Bu son derece hantaldır ve benzeri bir şeyi kullanmayı zorlaştırır git bisect.

Bu nedenle bu modül dizinini yer tutucu olarak tutmak için çok teknik bir neden var. Aşağıdaki bir şeyi kaldırmayı öneren kişiler .git/modules/daha iyi bilmezler veya git bisectbu tür bir alt modül uyumsuzluğunu geçerse bunun neredeyse imkansız gibi güçlü özellikleri kullanmasını söylemeyi unuturlar .

Başka bir neden yukarıda gösterilmiştir. Şuna bak ls. Orada ne görüyorsun?

Modülün 2. varyantı two/altında .git/modules/two/değil, altında .git/modules/someunusedname/! Yani gibi şeyler git rm $module; rm -f .git/module/$moduletamamen yanlış! Çıkarmanız module/.gitveya .gitmoduleskaldırmanız gereken doğru şeyi bulmanız gerekir !

Yani sadece diğer çoğu cevap bu tehlikeli tuzağa düşmekle kalmıyor, çok popüler gituzantılar bile bu hatayı aldı ( şimdi orada düzeltildi )! .git/Eğer tam olarak yapmazsanız çok daha iyi dizin, ne yaptığınızı!

Felsefi açıdan bakıldığında, tarihi silmek her zaman yanlıştır! Kuantum mekaniği hariç , her zamanki gibi, ama bu tamamen farklı bir şey.

Muhtemelen tahmin ettiniz : hilbix benim GitHub hesabım.


Bir gönderinin bu ansiklopedisi, gerçek cevabı ve farklı "sorun giderme" / vb bölümlerini belirtmek için daha büyük / daha net alt başlıkları olan daha net bölümlere ayrılmalıdır.
Andrew

2

Özetlemek gerekirse, yapmanız gereken budur:

Path_to_submodule var (sondaki eğik çizgi yok):

path_to_submodule=path/to/submodule

İlgili satırı .gitmodules dosyasından silin:

git config -f .gitmodules --remove-section submodule.$path_to_submodule

İlgili bölümü .git / config dizininden silin

git config -f .git/config --remove-section submodule.$path_to_submodule

$ Path_to_submodule değişkenini kaldırın ve yalnızca dizinden kaldırın (bilgi kaybını önlemek için)

git rm --cached $path_to_submodule

.Gitmodules üzerinde yapılan değişiklikleri izleyin

git add .gitmodules

Süper projeyi yürütün

git commit -m "Remove submodule submodule_name"

Şimdi izlenmeyen alt modül dosyalarını silin

rm -rf $path_to_submodule

rm -rf .git/modules/$path_to_submodule

Ayrıca bakınız: Alternatif kılavuz çizgileri


Bunu, 'git submodule add'i takip eden ancak daha önce hiç işlem yapmadan bir alt modülün nasıl kaldırılacağıyla genişletebilir misiniz? Bu durumda alt modülün çıkarılması için herhangi bir taahhüt gerekmediğini varsayıyorum, değil mi?
Carlo Wood

Sanırım takas etmek zorundasın git rm --cached $path_to_submoduleve git add .gitmoduleshayır? İlk komutta bir hata fatal: Please stage your changes to .gitmodules or stash them to proceedaldım : çünkü üzerinde değişmemiş değişiklikler vardı .gitmodules. İlkini yapmak bunu git add .gitmodulesçözer.
Carlo Wood

2

Bu kolay:

  1. Bölümü şuradan kaldır: .gitmodules
  2. Aramak: git add .gitmodules
  3. Aramak: git submodule deinit <path to submodule>
  4. Aramak: git rm <path to submodule>
  5. Taahhüt ve İtme

Projenizdeki modül dosyalarını manuel olarak silmeniz gerekir.


2
Benim için çağrı için yeterli oldu git submodule deinit <submodule_name>ve git rm <path_to_submodule>. Son komut, içindeki girişi otomatik olarak siler .gitmodules. Git 2.17
Dmytro Ovdiienko


0

En son git'te git alt modülünü kaldırmak için sadece 4 işlem gerekir.

  • İçindeki ilgili girişi kaldır .gitmodules
  • Sahne değişiklikleri git add .gitmodules
  • Alt modül dizinini kaldırın git rm --cached <path_to_submodule>
  • Yap git commit -m "Removed submodule xxx"

0

Aşağıdaki gibi bash komut dosyası ile bir satır komutunda yapmanız gerekirse :

$ cd /path/to/your/repo && /bin/bash $HOME/remove_submodule.sh /path/to/the/submodule

$HOMEİe adlı dizinde bash komut dosyası oluşturun remove_submodule.sh:

#!/bin/bash

git config -f .gitmodules --remove-section submodule.$1
git config -f .git/config --remove-section submodule.$1
git rm --cached $1
git add .gitmodules
git commit -m "Remove submodule in $1"
rm -rf $1
rm -rf .git/modules/$1
git push origin $(git rev-parse --abbrev-ref HEAD) --force --quiet


0
  • Bir alt modül çalıştırılarak silinebilir git rm <submodule path> && git commit. Bu kullanılarak geri alınabilirgit revert .
    • Silme işlemi, projenin hem gitlink girişi hem de bölümdeki bölüm olan izleme verilerini kaldırır. .gitmodules .
    • Alt modülün çalışma dizini dosya sisteminden kaldırılır, ancak Git dizini, başka bir depodan getirilmeye gerek kalmadan geçmiş işlemlerin teslim alınmasını mümkün kılmak için tutulur.
  • Bir alt modülü tamamen kaldırmak için ayrıca manuel olarak silin$GIT_DIR/modules/<name>/ .

Kaynak: git help submodules


-1

Git alt modülünün kaldırılması

Bir gitalt modülün çıkarılması için 4 adım gereklidir.

  1. .gitmodulesDosyadaki ilgili girişi kaldırın . Giriş aşağıda belirtildiği gibi olabilir
[submodule "path_to_submodule"]
    path = path_to_submodule
    url = url_path_to_submodule
  1. Sahne değişiklikleri git add .gitmodules
  2. Alt modül dizinini kaldırın git rm --cached <path_to_submodule>.
  3. Taahhüt et git commit -m "Removed submodule xxx"ve it.

Yerel klonlanmış kopyada alt modülü tamamen temizlemek için aşağıda belirtilen 2 ek adım daha gereklidir.

  1. .git/configDosyadaki ilgili girişi kaldırın . Giriş aşağıda belirtildiği gibi olabilir
[submodule "path_to_submodule"]
    url = url_path_to_submodule
  1. Yapmak rm -rf .git/modules/path_to_submodule

Bu 5. ve 6. adımlar taahhüt gerektiren herhangi bir değişiklik yaratmaz.


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.