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 = [email protected]:interstar/BEACHhtml.git

Dalam .gitmodules saya, saya memiliki ini:

[submodule "external_libraries/BEACHhtml"]
path = external_libraries/BEACHhtml
url = [email protected]:interstar/BEACHhtml.git

Ada yang tahu apa yang kurang?

interstar
sumber

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.

Han He
sumber
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
epatel
sumber
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.

Lu55
sumber
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.

Vehiclesakul
sumber
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

Adam Dymitruk
sumber
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.

David Lukac
sumber