“Anda berada di cabang yang belum lahir” saat menambahkan submodul git

118

Saya mencoba menambahkan beberapa submodul ke .vim/bundlesdirektori saya , dan ketika saya mencoba menambahkan repo khusus ini, Git memberi saya kesalahan aneh yang belum pernah saya lihat sebelumnya:

$ git submodule add -f git://github.com/derekwyatt/vim-scala.git .vim/bundle/vim-scala
fatal: You are on a branch yet to be born
Unable to checkout submodule '.vim/bundle/vim-scala'

Tahu apa yang bisa menyebabkan ini?

Jika saya mengkloning repo yang sama ke direktori uji (bukan melalui perintah submodule), itu berfungsi dengan baik, dan membuat file yang diharapkan.

matt b
sumber

Jawaban:

212

Untuk memperbaiki kesalahan itu, Anda harus menghapus folder dengan jalur yang sama ke submodule di dalam .git/modules/direktori. Kesalahan ini dapat terjadi ketika url salah untuk submodul untuk pertama kalinya saat submodul ditambahkan.

lisachenko
sumber
2
Terima kasih, itu berhasil. Agak tidak jelas pada awalnya bahwa sejak saya mengkloning ke .vim/bundle/vim-scalajalur yang akan dihapus adalah.git/modules/.vim/bundle/vim-scala
matt b
2
Jika Anda menggunakan windows perhatikan bahwa direktori di bawah .git / modules mungkin tidak muncul kecuali Andadir /AH
paxos1977
13
Setelah saya melihat menghapus .git/modules/path/to/submoduledirektori itu dan mencoba untuk menambahkan kembali submodule, saya menerima kesalahan Jalur berikut ini diabaikan oleh salah satu file .gitignore Anda: path / to / submodule .
Drew Noakes
1
@Drew Noakes menghapus .vim / bundle / vim-scala yang dibuat setelah menjalankan pertama add submodule git
Piotr Król
Di windows Anda juga dapat menggunakan opsi Windows Explorer (di tempat yang sama Anda akan memilih untuk melihat ekstensi file) untuk melihat folder tersembunyi di GUI dan menghapusnya.
pengguna83358
13

Anda perlu menambahkan submodule di dalam repo yang sudah ada, repo tersebut harus dalam keadaan untuk menambahkan & mengkomit tautan submodul, dan repo submodul itu sendiri harus memiliki komit untuk diperiksa.

Sekarang, repo submodul itu sendiri harus baik-baik saja jika Anda dapat membuat klon biasa di tempat lain. Namun, sepertinya ada submodule addkeluhan jika repo kosong sedangkan clone tidak. Orang ini menyarankan ini diperbaiki dengan hanya menjalankan submodule addperintah yang sama lagi.

Jika repo batin tidak kosong, periksa repo Anda ingin mengandung submodule tersebut. Ubah ke direktori yang sama tempat Anda menjalankan git submodule add, dan menjalankan git status, dan git branchuntuk memverifikasi bahwa repo berisi Anda memiliki setidaknya satu cabang yang dibuat dan tidak dalam keadaan aneh.

Tak berguna
sumber
Saya telah memverifikasi semua hal ini. Ketika saya memeriksa repo yang diinginkan ke direktori lain, ia memiliki banyak file, dan sebuah mastercabang. Repo yang saya coba tambahkan ini sebagai submodul ada di mastercabang, tidak memiliki masalah yang jelas (status mengembalikan beberapa file yang dimodifikasi, tapi itu saja), dan yang paling aneh dari semuanya adalah saya dapat menambahkan submodul lain dengan baik ke repositori ini .
matt b
Juga aneh: setelah fatalperingatan dari OP saya, git meninggalkan dir kosong di .vim/bundle/vim-scala. Saya juga memperhatikan bahwa meskipun .gitmodulestidak tersentuh, itu menambahkan beberapa baris yang merujuk ke repo github.com ini .git/config, tetapi setelah menghapusnya, saya masih mendapatkan fatalpesan kesalahan yang sama .
matt b
7
+1 Argh! This guy suggests this is fixable by just running the same submodule add command again.. Saya telah berjuang melawan masalah ini mencoba menemukan jawaban yang masuk akal dan ini akhirnya memperbaikinya. Ini untuk git 1.8.0 di bawah MSYS saat membuat submodule dari BitBucket, jadi jika Anda berada dalam situasi yang sama, coba ini terlebih dahulu.
Aaron Newton
Menambahkan dua kali juga berhasil bagi saya. Tapi saya tidak mengerti kenapa. Ada penjelasan?
Elise
Menambahkan dua kali di sini juga. Saya ingin sekali memahami mengapa
Vinicius Dantas
12

Kesalahan ini dapat terjadi jika Anda menambahkan submodul yang tidak memiliki mastercabang. Jika Anda ingin menggunakan cabang lain saat menambahkan submodule ( developmisalnya), Anda dapat menggunakan perintah berikut:

git submodule add -b <branch> <repository>
k4nar
sumber
1
Dalam kasus saya, repo baru dibuat dan karena itu tidak memiliki file dan cabang apa pun (kosong), sangat git submodule add -b master <repo.git> <folder>membantu
vladkras
Ini adalah masalah saya submodul saya hanya memiliki 2 cabang tidak satupun dari mereka adalah mastersolusi Anda berhasil untuk saya.
Guerneen4
0

Seperti yang disinggung oleh @ drew-noakes, hal ini dapat terjadi karena mencoba menambahkan submodule menggunakan nama direktori yang terdaftar di file .gitignore Anda .

John McFarlane
sumber