Saya memiliki repo git ~/.janus/
dengan banyak submodul di dalamnya. Saya ingin menambahkan submodule ~/.janus/snipmate-snippets/snippets/
, tetapi ketika saya menjalankan git submodule add <[email protected]:...>
di snipmate-snippets
direktori, saya mendapatkan pesan kesalahan berikut:
You need to run this command from the toplevel of the working tree.
Jadi pertanyaannya adalah: Bagaimana cara menambahkan submodule ke snipmate-snippets
direktori?
git
git-submodules
Robert Audi
sumber
sumber
git submodule add -b <branch> <url> <relative_path_4m_root>
Jawaban:
Anda masuk
~/.janus
dan lari:Jika Anda memerlukan informasi lebih lanjut tentang submodula (atau git secara umum) ProGit sangat berguna.
sumber
'subprojects' already exists in the index
(saya menggunakan sub proyek sebagai nama direktori) . Alih-alih yang membantu, adalah jawaban VonC di bawah ini, yaitu melakukancd subprojects
, dan kemudiangit submodule add <get@github …>
tanpa jalan.Perhatikan bahwa mulai git1.8.4 (Juli 2013), Anda tidak perlu kembali ke direktori root lagi.
( Bouke Versteegh berkomentar bahwa Anda tidak harus menggunakan
/.
, seperti dalamsnippets/.
:snippets
sudah cukup)Lihat komit 091a6eb0feed820a43663ca63dc2bc0bb247bbae :
Tergantung pada komit 12b9d32790b40bf3ea49134095619700191abf1f
sumber
/.
tidak diperlukan, git akan membuat snippet direktori tanpa itu.Relative path can only be used from the toplevel of the working tree
. Saya lakukangit submodule add ../../../functest
Relative path can only be used from the toplevel of the working tree
") bukan yang dari pertanyaan awal ("You need to run this command from the toplevel of the working tree
")Saya memiliki masalah serupa, tetapi telah melukis diri saya di sudut dengan alat GUI.
Saya memiliki subproyek dengan beberapa file di dalamnya yang sejauh ini saya salin daripada memeriksa git repo mereka sendiri. Saya membuat repo di subfolder, dapat melakukan, mendorong, dll dengan baik. Tetapi dalam repo induk, subfolder tidak diperlakukan sebagai submodule, dan file-nya masih dilacak oleh repo induk - tidak baik.
Untuk keluar dari kekacauan ini, saya harus memberi tahu Git untuk berhenti melacak subfolder (tanpa menghapus file):
Lalu saya harus mengatakan bahwa ada submodule di sana (yang tidak dapat Anda lakukan jika ada sesuatu yang saat ini dilacak oleh git):
Memperbarui
Cara ideal untuk menangani ini melibatkan beberapa langkah lagi. Idealnya, repo yang ada dipindahkan ke direktori sendiri, bebas dari modul git induk, dikomit dan didorong, dan kemudian ditambahkan sebagai submodule seperti:
Itu akan mengkloning git repo sebagai submodule - yang melibatkan langkah-langkah kloning standar, tetapi juga beberapa langkah konfigurasi lainnya yang tidak jelas yang git ambil atas nama Anda agar submodule itu berfungsi. Perbedaan yang paling penting adalah bahwa ia menempatkan file .git sederhana di sana, alih-alih direktori .git, yang berisi referensi path ke tempat dir git yang sebenarnya tinggal - umumnya di root proyek induk .git / modules / jslib.
Jika Anda tidak melakukan hal-hal seperti ini mereka akan bekerja dengan baik untuk Anda, tetapi segera setelah Anda berkomitmen dan mendorong orang tua, dan pengembang lain pergi untuk menarik orang tua itu, Anda hanya membuat hidup mereka jauh lebih sulit. Akan sangat sulit bagi mereka untuk meniru struktur yang Anda miliki di mesin Anda selama Anda memiliki dir .git penuh dalam subfolder dari dir yang berisi dir .git sendiri.
Jadi, pindah, dorong, git add submodule, adalah opsi terbersih.
sumber
Bagi Anda yang berbagi kesukaan aneh saya mengedit file konfigurasi secara manual, menambahkan (atau memodifikasi) berikut ini juga akan melakukan trik.
.git / config (konfigurasi pribadi)
.gitmodules (konfigurasi bersama yang dilakukan)
Lihat ini juga - perbedaan antara .gitmodules dan spesifikasi submodules di .git / config?
sumber
script bash one-liner untuk membantu fasilitas jawaban Chris di atas, seperti yang telah saya lukis sendiri di sudut juga menggunakan pembaruan Vundle untuk skrip .vim saya.
DEST
adalah jalur ke direktori yang berisi submodula Anda. Lakukan ini setelah melakukangit rm -r $DEST
Bersulang
sumber