Saya punya proyek yang memiliki submodule di lib/three20
.gitmodule
File saya terlihat seperti ini:
[submodule "lib/three20"]
path = lib/three20
url = git://github.com/facebook/three20.git
Saya telah mengkloning ini di masa lalu tanpa kesalahan, ( git submodule init
diikuti oleh a git submodule update
) dan sudah berfungsi untuk sementara waktu.
Saya mencoba untuk mengkloning ini ke mesin baru, dan sekarang saya mendapatkan kesalahan ini pada git submodule init
:
No submodule mapping found in .gitmodules for path 'Classes/Support/Three20'
Path itu hanyalah folder kosong di Xcode yang saya gunakan untuk menyimpan proyek-proyek dari direktori lain. Itu bukan bagian dari .gitmodules
file, jadi saya tidak melihat dari mana ia mendapatkan jalur ini.
Ada ide?
git
git-submodules
Ben Scheirman
sumber
sumber
.git
folder. Melakukan halgrep -r "Classes/Support/Three20" *.*
itu juga tidak membuahkan hasil apa pungit ls-tree HEAD Classes/Support
, dan jika dikatakan bahwa Three20 adalah commit, ada gitlink di sana. Jika ada, ikuti instruksi yang sesuai dari pertanyaan VonC yang ditautkan di atas untuk mengubahnya menjadi submodule yang tepat atau mengubahnya menjadi konten yang dilacak secara teratur.Jawaban:
Berikut rajibchowdhury 's jawaban (upvoted), penggunaan
git rm
perintah yang disarankan adalah untuk menghapus entri khusus dalam indeks menunjukkan submodule (a 'folder' dengan modus khusus160000
).Jika jalur entri khusus itu tidak dirujuk dalam
.gitmodule
(seperti 'Classes/Support/Three20
' dalam pertanyaan asli), maka Anda harus menghapusnya, untuk menghindari pesan kesalahan " Tidak ada pemetaan submodule yang ditemukan di.gitmodules
jalur ".Anda dapat memeriksa semua entri dalam indeks yang mereferensikan submodul:
Jawaban sebelumnya (November 2010)
Ada kemungkinan bahwa Anda belum menyatakan submodul awal Anda dengan benar (yaitu tanpa ekor '/' pada akhirnya, seperti yang dijelaskan dalam jawaban saya yang lama , meskipun Anda
.gitmodule
memiliki jalur yang terlihat ok di dalamnya).Utas ini menyebutkan:
Jelas, jangan hapus
.gitmodules
file utama Anda , tetapi perhatikan.gitmodules
file tambahan lainnya di pohon kerja Anda.Masih dalam topik "inisialisasi submodul yang salah", Jefromi menyebutkan submodul yang sebenarnya adalah gitlink.
Lihat Bagaimana cara melacak konten yang tidak terlacak? untuk mengubah direktori seperti itu menjadi submodule nyata.
sumber
git rm xxx
(tanpa trailing slash)git rm --cached
memungkinkan Anda untuk menyimpannya di disk saat menghapusnya dari indeks..gitmodule
referensi entri tersebut, kemudian stackoverflow.com/a/16162000/6309 . Jika tidak, sederhanagit rm afolder
(tanpa trailing / slash)Tidak ditemukan pemetaan submodule di .gitmodules untuk jalur 'OtherLibrary / MKStore' saat
Saya tidak tahu mengapa kesalahan itu terjadi. Setelah menghabiskan satu menit dan menemukan jawabannya di stackoverflow.
dan kemudian perbarui submodule lagi. Ini bekerja dengan baik.
http://en.saturngod.net/no-submodule-mapping-found-in-gitmodules
sumber
git submodule sync | grep "mapping found"
kemudiangit rm
dan lagigit submodule sync
. Masalah hilang !.Ketika saya menggunakan SourceTree untuk melakukan hal-hal itu, itu akan memuntahkan pesan ini.
Pesan yang saya temui:
Skenario saya adalah saya salah menerapkan direktori proyek yang berisi folder .git .
SourceTree menganggap folder ini sebagai git submodule, tetapi sebenarnya tidak.
Solusi saya adalah menggunakan baris perintah untuk menghapusnya.
hapus sampah di git dan jaga kebersihannya.
sumber
Saya menyelesaikan masalah ini untuk saya. Awalnya saya mencoba melakukan ini:
Karena ternyata spesifikasi opsi - cabang tidak boleh digunakan jika Anda ingin mengkloning cabang master . Itu melempar kesalahan ini:
Setiap kali Anda mencoba melakukan
Kesalahan ini akan terjadi:
Dan garis yang dibutuhkan dalam .gitmodules tidak pernah ditambahkan.
Jadi solusi bagi saya adalah ini:
sumber
Saya baru saja menemukan kesalahan ini setelah mencoba "git submodule init" pada checkout baru dari repo saya. Ternyata saya telah menentukan sub-folder modul dengan case yang salah pada awalnya. Karena saya menggunakan Mac dengan sistem file case-sensitive (jam) itu gagal. Sebagai contoh:
berhasil tetapi masalahnya adalah pada disk pathnya
Yang tidak saya mengerti adalah mengapa git init'ing modul ke folder yang salah (mengabaikan kasus yang salah dalam perintah saya) tetapi kemudian beroperasi dengan benar (dengan gagal) dengan perintah berikutnya.
sumber
Hanya
git rm subdir
akan baik-baik saja. yang akan menghapus subdir sebagai indeks.sumber
Baru saja mengalami masalah ini. Untuk sementara saya mencoba saran tentang menghapus path, git menghapus path, menghapus .gitmodules, menghapus entri dari .git / config, menambahkan submodule kembali, kemudian melakukan dan mendorong perubahan. Itu membingungkan karena sepertinya tidak ada perubahan ketika saya melakukan "git commit -a" jadi saya mencoba mendorong penghapusan saja, lalu mendorong readdition untuk membuatnya terlihat seperti perubahan.
Setelah beberapa saat saya perhatikan secara tidak sengaja bahwa setelah menghapus semuanya, jika saya menjalankan "git submodule update --init", ada pesan tentang nama spesifik yang git seharusnya tidak lagi memiliki referensi ke: nama repositori submodule sedang ditautkan, bukan nama jalur yang diperiksanya. Grepping mengungkapkan bahwa referensi ini ada di .git / index. Jadi saya menjalankan "git rm --cached repo-name" dan kemudian membaca kembali modul. Ketika saya melakukan kali ini, pesan komit menyertakan perubahan bahwa ia menghapus objek yang tidak terduga ini. Setelah itu berfungsi dengan baik.
Tidak yakin apa yang terjadi, saya menduga seseorang menyalahgunakan perintah submit git, mungkin membalikkan argumen. Bisa jadi saya bahkan ... Semoga ini bisa membantu seseorang!
sumber
dalam file .gitmodules , saya mengganti string
dengan
dan itu terpecahkan! - -
sumber
Pemetaan folder dapat ditemukan di
.git/modules
folder (masing-masing memilikiconfig
file dengan rujukannyaworktree
), jadi pastikan folder ini sesuai dengan konfigurasi di.gitmodules
dan.git/config
.Begitu
.gitmodules
juga dengan jalur yang benar:dan di
.git/modules/<path>/config
dalam[core]
bagian Anda memiliki jalur yang benar ke Anda<path>
, misalnyaJika folder kanan
.git/modules
tidak ada, maka Anda harus pergi ke dir submodule Anda dan cobagit reset HEAD --hard
ataugit checkout master -f
. Jika ini tidak membantu, Anda mungkin ingin menghapus semua referensi untuk submodule yang rusak dan menambahkannya lagi, lalu lihat: Ganti nama submit git .sumber
Skenario: mengubah submodule dari direktori dirA-xxx ke direktori dirB-xxx lainnya
Lari
git submodule status
if return error: Tidak ditemukan pemetaan submodule di .gitmodules untuk path dirA-xxx. Ini karena dirA-xxx tidak ada, namun masih dilacak oleh git. Perbarui indeks git dengan:
git rm --cached dirA-xxx
Coba dengan
git submodule foreach git pull
. Saya tidak mempelajari struktur submodule git yang sebenarnya, jadi langkah-langkah di atas mungkin merusak sesuatu. Meskipun demikian melalui langkah-langkah di atas, semuanya terlihat bagus saat ini. Jika Anda memiliki wawasan atau langkah-langkah yang tepat untuk menyelesaikan sesuatu, silakan bagikan di sini. :)sumber
Biasanya, git membuat direktori tersembunyi di direktori root proyek (.git /)
Ketika Anda bekerja pada CMS, mungkin Anda menginstal modul / plugin yang membawa direktori .git / dengan metadata git untuk modul / plugin tertentu
Solusi tercepat adalah dengan menemukan semua direktori .git dan hanya menyimpan direktori metadata root git Anda. Jika Anda melakukannya, git tidak akan menganggap modul-modul itu sebagai submodul proyek.
sumber
Setelah melihat saya
.gitmodules
, ternyata saya memang memiliki huruf besar di mana seharusnya tidak. Jadi perlu diingat,.gitmodules
direktori adalah case-sensitivesumber
.gitmodules
sebaliknya?Dalam kasus saya kesalahan itu mungkin karena penggabungan yang salah antara .gitmodules pada dua cabang dengan konfigurasi submodula yang berbeda. Setelah menerima saran dari forum ini, saya menyelesaikan masalah pengeditan secara manual file .gitmodules, menambahkan entri submodule yang hilang cukup mudah. Setelah itu, perintah git submodule update --init --recursive bekerja tanpa masalah.
sumber
Masalahnya bagi kami adalah entri entri duplikat telah ditambahkan ke .gitmodules (mungkin dari gabungan). Kami mencari jalan yang dikeluhkan oleh git dalam .gitmodules dan menemukan dua bagian yang identik. Menghapus salah satu bagian memecahkan masalah bagi kami.
Untuk apa nilainya, git 1.7.1 memberikan kesalahan "no submodule mapping" tetapi git 2.13.0 tampaknya tidak peduli.
sumber