Git submodule menambahkan: “direktori git ditemukan secara lokal”

193

Saya sebenarnya mencoba belajar cara menggunakan git, termasuk git submodulesub- perintah . Saya sudah menyiapkan server tempat saya dapat meng-host, mendorong dan menarik repositori git dengan menggunakan SSH. Saya membuat repositori git utama "Travail" pada server ini di mana saya ingin meletakkan semua proyek saya sebagai submodul.

Dalam repositori Travail saya, saya sudah menambahkan proyek saya sebagai submodule di tools/libft: Saya dapat mengembangkan submodule ini, untuk mendorong dan menariknya.

Tetapi ketika saya mencoba untuk menambahkan submodule lain (bernama fdf, dari fdf.git di server saya), saya mendapatkan masalah berikut:

git submodule add ssh://XXX.XXX.XXX.XXX:XXXXX/opt/git/fdf.git projets/fdf

Direktori git untuk 'projets / fdf' ditemukan secara lokal dengan remote (s): origin ssh: //[email protected]: XXXXX / opt / git / fdf.git Jika Anda ingin menggunakan kembali git lokal ini direktori alih-alih mengkloning lagi dari ssh: //XXX.XXX.XXX.XXX: XXXXX / opt / git / fdf.git gunakan opsi '--force'. Jika direktori git lokal bukan repo yang benar atau Anda tidak yakin apa artinya ini, pilih nama lain dengan opsi '--name'.

Sebenarnya tidak ada subdirektori di projets/

Saya membaca di utas lain bahwa saya harus menggunakan git submodule syncatau mengedit file .gitmodules di mana URL ke repositori asal submodul saya bisa saja berubah.

Tetapi file .gitmodules saya hanya berisi informasi tentang submodule pertama saya (tools / libft), bukan tentang projets / fdf:

[submodule "tools/libft"]
    path = tools/libft
    url = ssh://[email protected]:XXXXX/opt/git/libft.git

Sebagai seorang mahasiswa Perancis saya bisa melewatkan sesuatu dalam dokumentasi bahasa Inggris yang saya miliki, tetapi saya mencari dan saya benar-benar tidak mengerti mengapa saya mendapatkan masalah ini.

Saya akan senang jika saya akan mendapatkan solusi tetapi hanya penjelasan akan sangat membantu juga.

vmonteco
sumber
Koreksi kecil: ini 'repositori', bukan 'penyimpanan'. Tidak benar-benar jawaban, tetapi jika proyek independen satu sama lain, akan lebih baik untuk setiap proyek untuk memiliki repo sendiri daripada submodula.
jcm
Terima kasih, saya koreksi. Saya tahu tetapi saya ingin mengumpulkan semua pekerjaan saya di repo yang sama tetapi sebagai proyek yang terpisah. Ini adalah pilihan untuk menjaga seluruh pekerjaan saya diperbarui ketika saya pergi dari rumah ke sekolah saya dan sebaliknya (dan untuk belajar bagaimana menggunakan alat-alat ini, saya ingin tahu;))
vmonteco
Keingintahuan selalu menjadi alasan yang bagus! :) Itu aneh. Apakah Anda yakin Anda belum menambahkan submodule sebelumnya?
jcm
Tidak di Travail /, dan saya tidak punya masalah untuk mengkloning fdf.git di ~ /. Di Travail / saya tidak menemukan jejak fdf. just libft: /
vmonteco
5
Oh, tunggu, saya melihat ke dalam /Travail/.git/modules/projets/dan menemukan sebuah fdfdirektori. Ini tampaknya tidak berada di pohon kerja tetapi dalam komitmen yang lebih tua. Bisakah itu menghasilkan masalah?
vmonteco

Jawaban:

444

Saya datang ke pos SO ini mencoba menambahkan submodule dengan jalur yang sama dengan submodule yang baru-baru ini saya hapus.

Inilah yang akhirnya berhasil bagi saya ( artikel ini banyak membantu ):

Jika Anda belum menjalankan git rm --cached path_to_submodule(tanpa trailing slash) juga rm -rf path_to_submodule, lakukan itu!

Kemudian:

  1. Hapus baris yang relevan dari .gitmodulesfile. misalnya hapus ini:

    [submodule "path_to_submodule"] path = path_to_submodule url = https://github.com/path_to_submodule

  2. Hapus bagian yang relevan dari .git / config. misalnya hapus ini:

    [submodule "path_to_submodule"] url = https://github.com/path_to_submodule

  3. rm -rf .git/modules/path_to_submodule

Kemudian, Anda akhirnya dapat:

git submodule add https://github.com/path_to_submodule

jbmilgrom
sumber
47
Ini sangat membantu, karena saya tidak dapat menemukan hal lain yang berfungsi. Perbedaan utama dari saran lain adalah langkah Anda # 3. Terima kasih!
AndroidDev
8
Langkah 2 & 3 dibutuhkan untuk saya.
U007D
8
Langkah 3 diperlukan untuk saya tetapi, mengapa submodule juga ada di sana?
Crt
1
Bagi saya, saya melewatkan langkah 1 & 2 (yang sudah memiliki pengaturan yang benar di dalamnya) dan langkah 3 memperbaikinya untuk saya. (Saya sudah melakukan langkah awal git rmdan rm -rflangkah - langkah.)
Rock Lee
2
Bahkan langkah 3 tidak berhasil untuk saya. Saya hanya punya satu submodule jadi saya menghapus keseluruhan .git/modulesdan akhirnya berfungsi.
ach
47

saya mencoba solusi jbmilgrom, secara khusus saya mencoba git rm --cachedan itu tidak berhasil bagi saya karena direktori / submodule tidak ada. Apa yang berhasil untuk saya adalah:

  1. rm -rf .git/modules/blah
  2. git submodule add git://path.to.new

Saya melakukan ini setelah mencoba --forcedalam git submoduleperintah dan rmsemua direktori lain, mendorong untuk menguasai dll ... direktori tidak ada dan tidak ada alasan untuk cache. Ternyata di .git/modulessitulah letak kesalahan ini.

pamammer
sumber
15

Anda mungkin telah menghapus 'projets/fdf'dari disk, tetapi repositori Git Anda masih memilikinya. Gunakan git rm -rf projets/fdfuntuk menghapusnya dari Git, lalu lakukan perubahan. Setelah itu Anda akan dapat menambahkan folder ini sebagai submodule.

bredikhin
sumber
Berhasil :) Terima kasih. Saya pikir saya benar-benar membuat kesalahan ini.
vmonteco
21
Saya diberitahu bahwa direktori tidak ada ketika saya melakukan ini. Tampaknya keduanya ada dan tidak: /
Nathan Hornby
41
@ tom-mcfarlin Pada akhirnya, saya secara manual menghapus baris dari .gitmodule dan folder dari .git / modules, maka saya akan menambahkan submodule baru. Mungkin ada cara yang lebih baik untuk melakukan ini, tetapi saya kehabisan waktu. Jika Anda pergi dengan cara ini, saya sarankan Anda membuat cadangan yang baik dan jangan salahkan saya, jika itu salah bagi Anda. Semoga berhasil.
sparklos
5
Terima kasih, saya temukan di posting lain untuk menghapus folder dari .git / modules dan itu berhasil untuk saya. Masuk akal karena itulah yang dikatakan kesalahan adalah konflik ... Saya hanya tidak mengetahui folder itu
Tom McFarlin
10
@NathanHornby @Sparklos @TomMcFarlin - Dalam versi git yang lebih baru, Anda akan mendapati bahwa git-submodule menambahkan direktori dalam folder .git. Misalnya, jika Anda berada di direktori /tmp/repo, lalu jalankan git submodule add ../otherrepo.git, maka Anda akan melihat /tmp/repo/.git/modules/otherrepofolder itu ada. Itulah masalahnya bagi saya. Saya secara manual menghapus folder itu dari .git, dan semuanya berfungsi.
Alexander Bird
13

Jika Anda sudah menghapus direktori submodule, seperti yang saya lakukan, ikuti petunjuk jbmilgrom lainnya. Kuncinya adalah rm -rf .git/modules/path_to_submoduletetap maju dan buat cadangan seluruh direktori repo induk Anda terlebih dahulu .

Jika Anda hanya memiliki satu submodule, hapus saja .gitmodules

Dmitri R117
sumber
2

Dua perintah ini bekerja untuk saya.

rm path/to/submodule -rf
rm .git/modules/path/to/module -rf
W.Perrin
sumber
Ini. Tampaknya ada dua cara untuk submodula untuk dibuat. Di salah satu dari mereka, subfolder hanya akan memiliki satu file .git yang hanya menunjuk ke direktori di proyek super, dimulai dengan .git/modules/. Di sana ada folder yang menyimpan repositori untuk submodule. Menghapus repositori itu memperbaiki masalah untuk saya, sedangkan jawaban yang diterima tidak.
William Randokun