Submodul Git. Menarik klon baru dari proyek super


87

BAIK. Jadi saya pikir saya telah menjilat ini ... tapi sekarang ....

Saya memiliki proyek yang menyertakan satu perpustakaan kecil dari GitHub sebagai submodul. Dalam versi asli proyek super itu, submodule berfungsi seperti yang diharapkan.

Namun, saya baru saja mengkloning superproject, melakukan apa yang saya pikir harus: "git submodule init", membuat direktori submodul muncul, tetapi direktori tersebut kosong.

Jika sekarang saya coba lakukan

git submodule update

saya mendapat

fatal: Needed a single revision 
Unable to find current revision in submodule path 'external_libraries/BEACHhtml'

Jika saya mencoba

git submodule foreach git pull

saya mendapat

Entering 'external_libraries/BEACHhtml'
fatal: Where do you want to fetch from today?
Stopping at 'external_libraries/BEACHhtml'; script returned non-zero status.

Di .git / config saya, saya memiliki ini:

[submodule "external_libraries/BEACHhtml"]
    url = git@github.com:interstar/BEACHhtml.git

Dalam .gitmodules saya, saya memiliki ini:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = git@github.com:interstar/BEACHhtml.git

Ada yang tahu apa yang kurang?

Jawaban:


189

Tampaknya sekarang (pada 2019) menginstal klien GIT terbaru dapat menyelesaikan masalah sesuai dengan komentar di bawah ini. Ini harus menjadi solusi terbaik untuk saat ini.


Saya memiliki masalah yang sama dengan Anda. Ini adalah bug di git: http://git.661346.n2.nabble.com/BUG-git-submodule-update-is-not-fail-safe-td7574168.html

Singkatnya, untuk masalah Anda, cobalah:

# rm -rf external_libraries/BEACHhtml
# git submodule update

Tampaknya ada yang salah dengan folder checkout sebelumnya, hapus, dan perbarui lagi menyelesaikan masalah.


1
bagi saya itu adalah git-fetch yang digantung yang membuat folder terkunci
Mihai Timar

32
Saya harus menghapus submodule worktree ( ext/blah) dan folder yang cocok di bawah GIT_DIR( .git/modules/ext/blah).
Tobu

2
Dalam kasus khusus saya git submodule updateterus gagal di server CI saya karena ingin seseorang menerima kunci RSA (server ci biasanya menggunakan koneksi https dan ini adalah pertama kalinya submodule menarik koneksi ssh). Semoga ini menyelamatkan seseorang dari satu jam garukan kepala!
Maverik

8
Pada tahun 2016 bug ini masih berlanjut :(
Paulo Neves

7
2017 check-in, masih ada.
william.taylor.09

4

Saya punya masalah ini (jaringan tidak stabil jadi saya terjatuh checkout submodule seperti ini) dan saya menyelesaikannya dengan membuat skrip ini (beri nama git-submodule-fixsehingga saya bisa menjalankannya sebagai git submodule-fix)

#!/bin/bash 

for arg 
do 
  echo $arg 
  find . -name "`basename $arg`" | grep "$arg\$" | xargs rm -fr
done

Jika Anda mendapatkan ini, yaitu dari a git submodule update

fatal: Needed a single revision
Unable to find current revision in submodule path 'some/submodule/path'

melakukan

git submodule-fix some/submodule/path
git submodule update

3

Dipecahkan dengan menghapus 2 direktori dan mengambil kembali submodul:

  1. Buka external_libraries/BEACHhtmldan lihat .gitfile. Isinya harus sepertigitdir: ../../.git/modules/external_libraries/BEACHhtml
  2. Hapus keduanya external_libraries/BEACHhtmldan .git/modules/external_libraries/BEACHhtmldirektori.

Mulai sekarang git submodule updateberjalan tanpa kesalahan.


Anda mungkin perlu menjalankan git submodule initsebelumnya git submodule updateagar submodule diinisialisasi ulang, lalu ini akan berfungsi.
Pellet

1

Jika Anda membaca pada tahun 2019 atau lebih baru, perbarui saja klien git. Bekerja untuk saya.


0

gunakan alat diff untuk membandingkan klon asli yang berfungsi dan yang ini. Juga, apa git submoduleoutputnya. Pastikan Anda menunjuk ke cabang yang sama di setiap repo sebelum Anda melakukannya.

Saya curiga Anda telah beralih ke cabang atau revisi lama di mana submodul tidak ditentukan.

semoga ini membantu


0

Saya memiliki masalah yang sama dengan submodul pada sebuah proyek. Ketika saya mencoba mengkloning submodul secara terpisah, itu bekerja dengan baik.

Saya sudah mencoba semua jawaban di atas, tetapi tidak berhasil (update git submodule, ..., menghapus folder submodule, ...).

Masalah menghilang setelah pembaruan git (dari Git-1.7.11-preview20120710) ke versi terbaru (ke Git-1.8.1.2-preview20130201) pada saat itu. Anehnya kolega saya memiliki versi yang lebih lama, bekerja tanpa masalah, tetapi mereka menggunakan Mac. Saya menggunakan Win7 64bit.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.