Saya memiliki proyek A yang merupakan perpustakaan dan digunakan dalam proyek B.
Kedua proyek A dan B memiliki repositori terpisah di github TETAPI di dalam B kami memiliki submodul A.
Saya mengedit beberapa kelas di perpustakaan, yang ada di repo A, saya mendorong repo jarak jauh, sehingga perpustakaan (repo A) diperbarui.
Pembaruan ini tidak mencerminkan "referensi" (submodule) yang merujuk pada komit sebelumnya .... apa yang harus saya lakukan untuk memperbarui submodule on git?
sumber
git submodule update
ketika orang lain memperbarui projA (Anda akan mendapatkan id komit baru).git push
?git push <remote> <branch>
, misgit push origin dev
.git submodule update
hanya bekerja tanpa tanda ketika komit telah ditarik (dalam B) untuk pembaruan referensi ke submodule (s) yang bersangkutan (proj A). Untuk memperbarui proj B untuk referensiHEAD
cabang pelacakan jarak jauh untuk proj A, Anda harus melakukangit submodule update --remote --merge
seperti yang ditunjukkan dalam jawaban Paul Hatcher di bawah ini.Karena git 1.8 dapat Anda lakukan
Ini akan memperbarui submodule ke komit jarak jauh terbaru. Anda kemudian perlu melakukan perubahan sehingga gitlink dalam repositori induk diperbarui
Dan kemudian dorong perubahan karena tanpa ini, identitas SHA-1 yang menunjuk ke submodule tidak akan diperbarui dan sehingga perubahan tidak akan terlihat oleh orang lain.
sumber
git commit
semua orang masih tidak melihatnya.On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
sebelum melakukan.Jika Anda memperbarui submodule dan berkomitmen untuk itu, Anda harus pergi ke repo yang berisi, atau lebih tinggi dan menambahkan perubahan di sana.
akan menampilkan sesuatu seperti:
Fakta bahwa submodule tidak sinkron juga dapat dilihat
output akan menunjukkan:
Nilai tambah menunjukkan bahwa submodule Anda menunjuk ke depan di mana repo top mengharapkannya.
cukup tambahkan perubahan ini:
dan lakukan itu:
Ketika Anda mendorong perubahan Anda, pastikan Anda mendorong perubahan di submodule terlebih dahulu dan kemudian mendorong perubahan referensi di repo luar. Dengan cara ini orang yang memperbarui akan selalu dapat berjalan dengan sukses
Info lebih lanjut tentang submodula dapat ditemukan di sini http://progit.org/book/ch6-6.html .
sumber
+
ketika Anda menjalankangit submodule
, pastikan Anda menginisialisasi dan mengimpor submodul. Perintah untuk itu adalahgit submodule init
dangit submodule update
, masing-masing.Versi baris tunggal
sumber
Beberapa jawaban lain merekomendasikan penggabungan / komit dalam direktori submodule, yang IMO dapat menjadi sedikit berantakan.
Dengan asumsi server remote dinamai
origin
dan kami inginmaster
cabang submodule (s), saya cenderung menggunakan:git submodule foreach "git fetch && git reset --hard origin/master"
Catatan: Ini akan melakukan hard reset pada setiap submodule - jika Anda tidak ingin ini, Anda dapat mengubah
--hard
ke--soft
.sumber
Proyek saya harus menggunakan 'terbaru' untuk submodule. Di Mac OSX 10.11, git versi 2.7.1, saya tidak perlu 'masuk' ke folder submodule saya untuk mengumpulkan komitnya. Saya hanya melakukan rutin
di tingkat atas, dan itu benar memperbarui submodule saya.
sumber
Tanggapan Andy berhasil bagi saya dengan keluar dari $ path:
sumber
'$path'