Saya tidak tahu sama ada anda pernah menemui projek yang lebih besar di mana klon git sangat perlahan atau gagal. Bagaimana semua orang akan menghadapinya?
Anda boleh mempertimbangkan untuk menukar sumber muat turun, dan anda boleh cuba meningkatkan kelajuan Internet melalui beberapa cara, tetapi bagaimana jika anda telah mencuba semua ini dan ia masih perlahan?
Saya menghadapi masalah ini hari ini, saya perlu memuat turun kod skrip taip dari gitlab, tetapi kelajuannya sangat perlahan:
git clone https://github.com/microsoft/TypeScript ts
Salin selepas log masuk
Setelah menunggu lama, muat turun masih tidak. selesai, jadi saya menambah Satu parameter:
git clone https://github.com/microsoft/TypeScript --depth=1 ts
Salin selepas log masuk
Ini meningkatkan kelajuan berpuluh-puluh kali ganda dan muat turun selesai serta-merta.
Menambah --depth hanya akan memuat turun satu komit, jadi kandungannya lebih kurang dan kelajuannya dipertingkatkan. [Cadangan berkaitan: Tutorial penggunaan Git]
Dan kandungan yang dimuat turun boleh terus menyerahkan komitmen baharu dan mencipta cawangan baharu. Ia tidak menjejaskan perkembangan seterusnya, tetapi anda tidak boleh bertukar kepada komitmen sejarah dan cabang sejarah.
Saya mengujinya dengan salah satu projek saya mula-mula memuat turun komit:
dan kemudian membuat beberapa perubahan, kemudian git add, commit, push, Boleh diserahkan seperti biasa:
Mencipta cawangan baharu juga boleh diserahkan seperti biasa. Satu-satunya kelemahan ialah anda tidak boleh beralih kepada komitmen sejarah dan cabang sejarah.
Ia agak berguna dalam beberapa senario: apabila anda perlu beralih kepada cabang sejarah, anda juga boleh mengira bilangan komitmen yang diperlukan, dan kemudian menentukan kedalaman, yang juga boleh meningkatkan kelajuan.
Pernahkah anda terfikir tentang sebab mengapa ini berkesan?
Prinsip Git
Git menyimpan maklumat melalui beberapa objek:
- kandungan fail storan objek glob
- laluan fail storan objek pokok
menyimpan objek komit menyimpan maklumat, dan pepohon yang berkaitan-
mengambil komit sebagai entri, dan semua pepohon serta gumpalan yang berkaitan ialah kandungan komit ini.
Komit adalah berkaitan antara satu sama lain, dan kepala, cawangan, tag, dll. adalah penunjuk kepada komitmen tertentu. Boleh dilihat di bawah .git/refs. Dengan cara ini, konsep seperti cawangan dan teg dilaksanakan berdasarkan komit.
Git melaksanakan pengurusan versi dan fungsi penukaran cawangan melalui ketiga-tiga objek ini. Semua objek boleh dilihat di bawah .git/objects.
Beginilah cara git berfungsi.
Terutamanya memahami tiga objek gumpalan, pokok dan komit, serta rujukan seperti kepala, tag, cawangan dan jauh.
Prinsip untuk dapat memuat turun satu komit
Kami tahu bahawa git mengaitkan semua objek melalui komit tertentu sebagai titik masuk, jadi jika kita tidak memerlukan sejarah, kita boleh secara semula jadi muat turun hanya satu komit.
Dengan cara ini, komit baharu masih dibuat berdasarkan komit itu, dan gumpalan, pokok, dll. baharu dikaitkan. Walau bagaimanapun, komitmen sejarah, pokok dan gumpalan tidak boleh ditukar kembali kerana ia belum dimuat turun, begitu juga teg, cawangan dan penunjuk lain yang sepadan. Beginilah cara kami memuat turun satu komit tetapi masih boleh membuat cawangan baharu, komit, dsb.
Ringkasan
Apabila menghadapi projek git yang besar, anda boleh meningkatkan kelajuan dengan menambahkan parameter --depth Semakin banyak komitmen sejarah, semakin besar peningkatan kelajuan muat turun.
Dan projek yang dimuat turun masih boleh dibangunkan untuk pembangunan seterusnya, dan komitmen baharu, cawangan baharu dan teg boleh dibuat, tetapi anda tidak boleh bertukar kepada komitmen, cawangan dan teg sejarah.
Kami telah menyusun prinsip git: menyimpan fail dan maklumat penyerahan melalui tiga objek: pokok, gumpalan dan komit, dan melaksanakan fungsi seperti cawangan dan teg melalui perkaitan antara komit. Komit ialah titik masuk, dikaitkan dengan semua pokok dan gumpalan.
Apabila kami memuat turun komit, kami memuat turun semua pokok yang berkaitan, gumpalan dan beberapa rujukan (termasuk teg, dahan, dll. Ini ialah prinsip --depth).
Saya harap anda boleh menggunakan teknik ini untuk meningkatkan kelajuan klon git projek besar tanpa beralih kepada komitmen dan cabang sejarah.
Atas ialah kandungan terperinci Menggunakan teknik ini, klon git boleh dipercepatkan berpuluh-puluh kali!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!