Inilah bagian dari isi .gitmodules
file saya :
[submodule "src/static_management"]
path = src/static_management
url = git://github.com/eykd/django-static-management.git
[submodule "external/pyfacebook"]
path = external/pyfacebook
url = http://github.com/sciyoshi/pyfacebook.git
Namun, .git/config
hanya berisi yang pertama:
[submodule "src/static_management"]
url = git://github.com/eykd/django-static-management.git
Submodul kedua ( external/pyfacebook
) telah ditambahkan oleh pengembang lain di cabang fitur. Saya telah mewarisi pengembangan sekarang, dan telah memeriksa cabang fitur. Namun, Git tidak akan menarik submodul untuk saya. Saya sudah mencoba:
git submodule init
git submodule update
git submodule update --init
git submodule sync
- Menghapus semua definisi submodul dari
.git/config
dan menjalankangit submodule init
. Ini hanya menyalin submodul yang ada sebelumnya dan mengabaikan yang baru. - Memasukkan definisi submodul baru
.git/config
secara manual dan berjalangit submodule update
. Hanya submodul yang ada sebelumnya yang mau memperbarui.
dalam berbagai kombinasi, tetapi git tidak akan memperbarui .git/config
berdasarkan konten baru .gitmodules
, juga tidak akan membuat external/pyfacebook
folder dan menarik konten submodul.
Apa yang saya lewatkan? Apakah intervensi manual (menambahkan entri submodul dengan tangan .git/config
) benar-benar diperlukan, dan mengapa?
Edit: Intervensi manual tidak bekerja. Menambahkan entri submodul baru secara manual ke .git/config
tidak melakukan apa-apa. Submodul baru diabaikan.
sumber
Jawaban:
Saya memiliki masalah yang sama - ternyata file .gitmodules telah dikomit, tetapi submodule sebenarnya melakukan (yaitu catatan ID komit submodul) tidak.
Menambahkannya secara manual sepertinya berhasil - misalnya:
(Bahkan tanpa menghapus apa pun dari .git / config atau .gitmodules.)
Kemudian komit untuk merekam ID dengan benar.
Menambahkan beberapa komentar lebih lanjut ke jawaban yang berfungsi ini: Jika git submodule init atau git submodule update tidak berfungsi, maka seperti yang dijelaskan di atas git submodule add url harus melakukan triknya. Satu dapat memeriksa silang ini
dan seseorang harus mendapatkan entri dari submodule yang ingin Anda tarik sebagai hasil dari perintah git config --list. Jika ada entri submodule Anda di hasil config, maka sekarang update git submodule biasa --init harus menarik submodul Anda. Untuk menguji langkah ini, Anda dapat mengganti nama submodul secara manual, lalu memperbarui submodul tersebut.
Untuk mengetahui apakah Anda memiliki perubahan lokal pada submodule, dapat dilihat melalui git status -u (jika Anda ingin melihat perubahan pada submodule) atau git status --ignore-submodules (jika Anda tidak ingin melihat perubahan di submodul).
sumber
external/pyfacebook
untuk?'your/local/path' already exists and is not a valid git repo
git config --list | grep submodule | sed -e "s/submodule\.//" -e "s/\(.*\)\.url=\(.*\)/git submodule add --force \2 \1/" | bash
git versi 2.7.4. Perintah ini memperbarui kode lokal
git submodule update --init --force --remote
sumber
git submodule update --init --force --remote <module-name>
.Memiliki masalah yang sama, ketika git diabaikan
init
danupdate
perintah, dan tidak melakukan apa-apa.BAGAIMANA CARA MEMPERBAIKI
Jika persyaratan itu terpenuhi, itu akan berhasil. Jika tidak, semua perintah akan dijalankan tanpa pesan dan hasil apa pun.
Jika Anda melakukan semua itu, dan tetap tidak berhasil:
git submodule add git@... path/to
git submodule init
git submodule update
.gitmodules
dan folder modul Anda (perhatikan, konten folder itu tidak akan komit).git/config
belum ada submodulgit submodule init
- dan Anda akan melihat pesan bahwa modul telah terdaftargit submodule update
- akan mengambil modul.git/config
dan Anda akan menemukan submodul terdaftarsumber
Sepertinya ada banyak kebingungan di sini (juga) dalam jawabannya.
git submodule init
adalah tidak dimaksudkan untuk secara ajaib menghasilkan barang-barang di git / config (dari .gitmodules). Ini dimaksudkan untuk menyiapkan sesuatu di subdirektori yang sepenuhnya kosong setelah mengkloning project induk, atau menarik komit yang menambahkan submodul yang sebelumnya tidak ada.Dengan kata lain, Anda mengikuti
git clone
proyek yang memiliki submodules (yang akan Anda ketahui dengan fakta bahwa klon memeriksa file .gitmodules) oleh agit submodule update --init --recursive
.Anda tidak mengikuti
git submodule add ...
dengangit submodule init
(ataugit submodule update --init
), yang seharusnya tidak berhasil. Faktanya, penambahan sudah akan memperbarui .git / config yang sesuai jika semuanya berfungsi.EDIT
Jika submodul git yang sebelumnya tidak ada ditambahkan oleh orang lain, dan Anda melakukan salah satu
git pull
dari komit itu, maka direktori submodul tersebut akan kosong seluruhnya (saat Anda menjalankangit submodule status
hash submodul baru harus terlihat tetapi akan ada-
di depannya itu.) Dalam hal ini Anda harus mengikutigit pull
juga Anda dengangit submodule update --init
(plus--recursive
ketika itu adalah submodul di dalam submodul) untuk mendapatkan submodul baru, yang sebelumnya tidak ada, diperiksa; seperti setelah klon awal proyek dengan submodul (di mana jelas Anda juga tidak memiliki submodul tersebut sebelumnya).sumber
git help submodule
mengatakan ini tentang init: "init: Inisialisasi submodul yang dicatat dalam indeks (yang ditambahkan dan dilakukan di tempat lain) dengan menyalin nama dan url submodul dari .gitmodules ke .git / config." Jadi itu pasti terdengar seperti itu harus melakukan apa yang Anda katakan tidak dilakukan ...? Waktunya memperbarui dokumentasi git?--init
harus diperlukan untuk mendapatkan submodul baru (daripada mengambilnya secara otomatisupdate
)? Sepertinya memperbarui repositori Anda harus mengambil semua yang diperlukan kecuali itu akan menghancurkan data. Dengan--init
itu memaksa Anda untuk mengetahui bahwa submodul baru mungkin telah dibuat, atau hanya selalu mengeluarkan--init
setiap kali, sekali lagi, tampaknya itu harus diaktifkan secara default.Saya memiliki masalah yang sama tetapi tidak ada solusi di atas yang membantu. Entri dalam .gitmodules dan .git / config sudah benar tetapi perintah
git submodules update --init --recursive
itu tidak melakukan apa-apa. Saya juga menghapus direktori submodule dan menjalankangit submodules update --init --recursive
dan mendapatkan kembali direktori submodule tetapi dengan komit yang persis sama seperti sebelumnya.Saya menemukan jawabannya di halaman ini . Perintahnya adalah:
git submodule update --remote
sumber
git submodule update
bukangit submodule update --remote
.Gores itu. Saya benar-benar berhasil melakukannya
git submodule update --init --recursive
. Semoga ini membantu.PS: Pastikan Anda berada di direktori root git, bukan di submodule.
sumber
Berpikir bahwa pengaturan manual
.gitmodules
sudah cukup SALAHLokal saya
git version 2.22.0
pada tulisan ini.Jadi saya datang ke utas ini bertanya-tanya mengapa tidak
git submodule init
berhasil; Saya mengatur.gitmodules
file dan melanjutkan untuk melakukangit submodule init
...PENTING
git submodule add company/project.git includes/project
adalah diperlukan (saat menambahkan modul untuk pertama kalinya), ini akan:.git/config
.gitmodules
fileincludes/project
dalam contoh ini).Anda kemudian harus
git commit
setelah Anda menambahkan submodul, ini akan komit.gitmodules
dan lokasi submodul terlacak.Ketika proyek di kloning lagi, itu akan memiliki
.gitmodules
dan direktori submodul kosong (misalnyaincludes/project
dalam contoh ini). Pada titik.git/config
ini belum ada konfigurasi submodule, sampaigit submodule init
dijalankan, dan ingat ini hanya berfungsi karena.gitmodules
ANDincludes/project
dilacak di repo git utama.Juga untuk referensi lihat:
sumber
Menurut jawaban dari Dave James Miller, saya dapat memastikan bahwa itu berhasil untuk saya. Hal penting di sini adalah melakukan ID komit subproyek. Hanya memiliki entri di .gitmodules saja tidak cukup.
Berikut adalah komit yang sesuai:
https://github.com/dirkaholic/vagrant-php-dev-box/commit/d5f4c40bdbd80eefbb5ac6029823733f591435ae
sumber
Saya memiliki masalah yang sama.
.gitmodules
memiliki submodul, tetapi setelahgit submodule init
perintah tidak ada.git/config
.Ternyata developer yang menambahkan submodule juga menambahkan direktori submodule ke
.gitignore
filenya. Itu tidak berhasil.sumber
Sama seperti Anda, saya menemukan bahwa git submodule sync tidak melakukan apa yang Anda harapkan. Hanya setelah melakukan eksplisit
git submodule add
lagi, url submodule berubah.Jadi, saya memasukkan skrip ini di
~/bin/git-submodule-sync.rb
:https://gist.github.com/frimik/5125436
Dan saya juga menggunakan logika yang sama pada beberapa skrip git deploy pasca-terima.
Yang perlu saya lakukan sekarang adalah mengedit
.gitmodules
, lalu menjalankan skrip ini dan akhirnya berfungsi seperti yang saya kiragit submodule sync
.sumber
Saya memiliki masalah yang sama hari ini dan mengetahuinya karena saya mengetik
git submodule init
maka saya memiliki baris itu di.git/config
:Saya menghapusnya dan mengetik:
Dan semuanya kembali normal, submodul saya diperbarui di subdirektori seperti biasa.
sumber
Masalah bagi saya adalah bahwa pengembang repo sebelumnya telah melakukan
submodules/thing
folder itu hanya sebagai folder biasa, artinya ketika saya mencoba menjalankangit submodule add ...
, itu akan gagal dengan:,'submodules/thing' already exists in the index
namun mencoba memperbarui submodul juga akan gagal karena melihat bahwa jalurnya tidak mengandung submodul.Untuk memperbaikinya, saya harus menghapus
submodules/thing
folder, melakukan penghapusan, lalu menjalankangit submodule add
perintah untuk menambahkannya kembali dengan benar:sumber
Ketika saya melihat ini hari ini, seorang pengembang telah memindahkan sebagian dari pohon ke sub-direktori baru dan sepertinya klien git-nya tidak merekam aturan Subproyek yang diperbarui di pohon, sebaliknya mereka hanya nuked, meninggalkan
.gitmodules
merujuk keduanya ke basi lokasi dan subproyek yang tidak lagi ada di pohon saat ini.Menambahkan kembali submodul, dan membandingkan commit shas dari submodule dengan yang ditemukan di
git show $breaking_commit_sha
(cari baris yang cocok dengan regexp^-Subproject
) untuk menyesuaikan sesuai kebutuhan.sumber
Menghapus dir submodule dan isinya (folder "eksternal / pyfacebook") jika ada sebelumnya
git submodule add ...
dapat memperbaiki masalah.sumber
Saya memiliki masalah serupa dengan submodul. Itu hanya tidak ingin dikloning / ditarik / diperbarui / apa pun.
Ketika mencoba menambahkan kembali submodul menggunakan
git submodule add [email protected] destination
saya mendapatkan output berikut:Jadi, saya mencoba menerapkan perintah add :
git submodule add --force [email protected] destination
Itu berhasil dalam kasus saya.
sumber
Sebagai catatan:
Saya membuat masalah yang sama dengan menambahkan repositori kosong sebagai submodule. Dalam kasus ini, tidak ada hash referensi yang tersedia untuk submodule, yang menyebabkan kesalahan yang dijelaskan oleh pengirim asli.
Menambahkan paksa repositori setelah berkomitmen untuk menyelesaikan masalah (seperti dalam posting Arvids)
git submodule add --force [email protected] destination
sumber
.git/config
git submodule init
perintahgit pull origin master
Ini harus bekerja sekarang
sumber
Hanya berbagi apa yang berhasil untuk saya:
Ini mengkloning repositori jarak jauh yang sudah termasuk submodul. Ini berarti Anda tidak perlu menjalankan pembaruan submodul git atau init setelah kloning.
sumber
Di bawah perintah sinkronisasi menyelesaikan masalah:
sumber