Saya baru mengenal git dan akan sangat menghargai bantuan dengan menambahkan submodules. Saya telah menerima dua proyek berbagi beberapa kode umum. Kode bersama hanya disalin ke dua proyek. Saya membuat repo git terpisah untuk kode umum dan menghapusnya dari proyek dengan rencana untuk menambahkannya sebagai submodule git.
Saya menggunakan opsi path dari git submodule add untuk menentukan folder:
git submodule add url_to_repo projectfolder
tapi kemudian mendapat kesalahan:
'projectfolder' already exists in the index"
Ini adalah struktur repositori yang saya inginkan:
repo
|-- projectfolder
|-- folder with common code
Dimungkinkan untuk menambahkan submitule git langsung di repo atau ke folder baru di sana, tetapi tidak di folder proyek. Masalahnya adalah itu benar-benar perlu ada di folder proyek .. Apa yang bisa saya lakukan tentang ini dan apa yang saya salah pahami tentang opsi path dari git submodule add?
sumber
git ls-files --stage projectfolder
?git rm
pada folder yang ada membantu: |Jawaban:
Saya khawatir tidak ada informasi yang cukup dalam pertanyaan Anda untuk memastikan tentang apa yang terjadi, karena Anda belum menjawab pertanyaan tindak lanjut saya, tetapi ini mungkin bisa membantu.
Kesalahan itu berarti
projectfolder
sudah dipentaskan ("sudah ada dalam indeks"). Untuk mencari tahu apa yang terjadi di sini, cobalah mendaftar semua yang ada di indeks di bawah folder itu dengan:Kolom pertama dari output itu akan memberi tahu Anda apa jenis objek dalam indeks di
projectfolder
. (Ini terlihat seperti filem Unix, tetapi memiliki arti khusus dalam git.)Saya menduga Anda akan melihat sesuatu seperti:
(yaitu baris yang diawali dengan
160000
), dalam hal ini repositori diprojectfolder
telah ditambahkan sebagai "gitlink". Jika tidak muncul di output ofgit submodule
, dan Anda ingin menambahkannya kembali sebagai submodule, Anda dapat melakukan:... untuk melepas panggung, lalu:
... untuk menambahkan repositori sebagai submodule.
Namun, mungkin juga Anda akan melihat banyak blob terdaftar (dengan mode file
100644
dan100755
), yang akan menyarankan kepada saya bahwa Anda tidak melakukan unstage file dengan benarprojectfolder
sebelum menyalin repositori baru ke tempatnya. Jika itu masalahnya, Anda dapat melakukan yang berikut untuk menghapus semua file tersebut di atas panggung:... lalu tambahkan submodule dengan:
sumber
projectfolder
tidak mengandung.git
direktori. Itu terdengar dari pertanyaan Anda seolah-olah Anda telah membuat repositori baru untukprojectfolder
tempat lain, dan menyalinnya ke tempatnya, tetapi jelas bukan itu masalahnya. Anda harus memindahkan yang sudah adaprojectfolder
, dan kemudian salin repositori baru (lengkap dengan.git
direktori) ke tempatnya sebelum menambahkan sebagai submodule. Atau, jika Anda sudah mendorongnya ke repositori yang diwakili olehurl_to_repo
, Anda bisaprojectfolder
keluar dari jalan dan kemudian menambahkan submodule dari URL itu.Menghapus submodule secara manual melibatkan sejumlah langkah dan ini berhasil untuk saya.
Dengan asumsi Anda berada di direktori root proyek dan nama modul contoh git adalah "c3-pro-ios-framework"
Hapus file yang terkait dengan submodule
Hapus referensi untuk submodule di konfigurasi
Hapus .gitmodules
Hapus dari cache tanpa "git"
Tambahkan submodule
sumber
git submodule
setelah penghapusan dan sebelum menambahkan dan itu memberi saya kesalahan, melakukan penghapusan merawatnya.touch .gitmodules
(harus ada di pohon yang berfungsi, jadi menghapusnya membantu. Tapi Anda perlu menambahkannya kembali). Btw pos yang luar biasa. Satu-satunya yang bekerja di sini..git
direktori yang masih memiliki sisa-sisa untuk saya. Ini bekerja dengan baik. Terima kasih.Anda perlu menghapus repositori git submodule Anda (projectfolder dalam kasus ini) terlebih dahulu untuk path git.
dan kemudian tambahkan submodule
sumber
git submodule add --force <git_submodule_repository>
bekerja untuk saya untuk menjaga nama submodul yang samaSaya memiliki masalah yang sama dan setelah berjam-jam mencari menemukan jawabannya.
Kesalahan yang saya dapatkan sedikit berbeda:
<path> already exists and is not a valid git repo
(dan ditambahkan di sini untuk nilai SEO)Solusinya adalah TIDAK membuat direktori yang akan menampung submodule. Direktori akan dibuat sebagai bagian dari
git submodule add
perintah.Selain itu, argumennya diharapkan relatif terhadap root induk-repo, bukan direktori kerja Anda, jadi waspadalah.
Solusi untuk contoh di atas:
common_code
direktori tidak ada.cd Repo
git submodule add git://url_to_repo projectfolder/common_code/
( Perhatikan garis miring yang diperlukan. )Saya harap ini membantu seseorang, karena sangat sedikit informasi yang dapat ditemukan di tempat lain tentang ini.
sumber
git submodule add
, dan garis miring tidak diperlukan.jika ada folder bernama di
x
bawah kontrol git, Anda ingin menambahkan submodule nama yang sama, Anda harus menghapus folderx
dan komit dulu .Diperbarui oleh @ ujjwal-singh:
Komitmen tidak diperlukan, pementasan sudah cukup ..
git add
/git rm -r
sumber
git add
/gir rm -r
Hanya untuk mengklarifikasi dalam bahasa manusia apa kesalahan yang coba disampaikan kepada Anda:
Anda tidak dapat membuat repositori di folder ini yang sudah dilacak di repositori utama.
Sebagai contoh: Anda memiliki folder tema yang disebut
AwesomeTheme
repositori khusus, Anda coba lakukan dump langsung ke repositori utamagit submodule add sites/themes
Anda dan Anda mendapatkannya"AwesomeTheme" index already exists
.Anda hanya perlu memastikan belum ada
sites/themes/AwesomeTheme
di pelacakan versi repositori utama sehingga submodule dapat dibuat di sana.Jadi untuk memperbaikinya, di repositori utama Anda jika Anda memiliki
sites/theme/AwesomeTheme
direktori kosong lalu hapus. Jika Anda telah membuat komit dengansites/theme/AwesomeTheme
direktori di repositori utama Anda, Anda perlu membersihkan semua riwayatnya dengan perintah seperti ini:Sekarang kamu bisa lari
git submodule add [email protected] sites/themes/AwesomeTheme
Karena repositori utama belum pernah melihat apa pun (alias index'd)
sites/themes/AwesomeTheme
sebelumnya, sekarang ia dapat membuatnya.sumber
Saya membuatnya bekerja dengan melakukannya sebaliknya. Dimulai dengan repo kosong, menambahkan submodule di folder baru yang disebut "projectfolder / common_code". Setelah itu dimungkinkan untuk menambahkan kode proyek dalam folder proyek. Detailnya ditunjukkan di bawah ini.
Dalam jenis repo kosong:
Itu akan membuat struktur folder yang diinginkan:
Sekarang dimungkinkan untuk menambahkan lebih banyak submodul, dan kode proyek dapat ditambahkan ke folder proyek.
Saya belum bisa mengatakan mengapa cara ini berhasil dan bukan yang lain.
sumber
Tidak tahu apakah ini berguna, meskipun saya memiliki masalah yang sama ketika mencoba untuk melakukan file saya dari dalam IntelliJ 15. Pada akhirnya, saya membuka SourceTree dan di sana saya hanya bisa melakukan file. Masalah terpecahkan. Tidak perlu mengeluarkan perintah fancy git. Sebut saja kalau-kalau ada orang yang memiliki masalah yang sama.
sumber
Pergi ke folder repositori. Hapus submodules yang relevan dari .gitmodules. Pilih tampilkan file yang disembunyikan. Buka folder .git, hapus submodul dari folder modul dan konfig.
sumber
Ini terjadi jika file .git hilang di jalur target. Itu terjadi pada saya setelah saya dieksekusi
git clean -f -d
.Saya harus menghapus semua folder target yang ditampilkan dalam pesan dan kemudian mengeksekusi
git submodule update --remote
sumber
Di dir git Anda, misalkan Anda telah menyinkronkan semua perubahan.
Kemudian lakukan:
sumber