Rumah >alat pembangunan >git >Arahan migrasi GIT LFS (contoh terperinci)
Artikel ini membawakan anda pengetahuan yang berkaitan tentang Git, yang terutamanya memperkenalkan isu yang berkaitan dengan GIT LFS, termasuk konfigurasi pelayan GIT LFS, pemasangan klien GIT LFS dan pemindahan sejarah tempatan, dll. Saya harap ini membantu semua orang.
Kajian yang disyorkan: "Tutorial Pembelajaran Git"
Sebelum ini, beberapa projek git menggunakan CI/CD dan mendapati klon jenkins git gagal menetapkan kedalaman dan masa klon tidak mempunyai kesan. Kami hanya boleh mempertimbangkan strategi seperti pengecilan saiz gudang. Didapati bahawa gudang mempunyai banyak fail binari, dan fail binari ini berubah dengan agak kerap Operasi ini akan menyebabkan gudang git berkembang dengan pesat dan Git itu sendiri hanya sesuai untuk menguruskan fail teks.
Izinkan saya memberitahu anda satu lagi kisah silam yang menarik. Saya pernah mempunyai rakan sekerja yang berminat dalam pengaturcaraan grafik git untuk menguruskannya. Projek syarikat kecil kerap berubah, menyebabkan tiada Berapa lama masa yang diambil untuk cakera keras pelayan git dalaman syarikat diisi oleh beberapa gudang gitnya?
Walaupun git tidak pernah sesuai untuk menguruskan fail binari, git kini nampaknya menyediakan git lfs, pemalam khusus untuk menguruskan fail besar, secara lalai .
Prinsip asasnya ialah menggunakan penuding fail (teks) dan bukannya storan fail sebenar Git hanya menyimpan sejarah perubahan penuding fail dan bukannya keseluruhan fail binari, dan secara automatik menyediakan cangkuk ini adalah mudah untuk operasi seperti klon, tarik, set semula, dan lain-lain untuk mendapatkan fail binari sumber secara automatik penunjuk fail ini Begitu juga, apabila mengemas kini komit fail binari, git akan menukar fail sumber secara automatik menjadi penunjuk fail dan memasukkannya ke dalam. git log, dan pada masa yang sama, fail sumber akan dimuat naik ke lfs. Jadi pada peringkat pengguna, penggunaan GIT LFS sebenarnya tidak masuk akal.
Di atas secara ringkas memperkenalkan GIT LFS Seterusnya, kita akan bercakap secara langsung tentang bagaimana untuk berhijrah secara langsung dan bukannya cara menggunakan LFS dari awal.
Ini kerana selalunya apabila menggunakan gudang git, anda mendapati gudang itu sangat besar dan klon sangat perlahan, dan kemudian anda berfikir untuk menggunakan LFS.
Penghijrahan memerlukan kami mempunyai hak pentadbir gudang dan menyahlindungi cawangan yang dilindungi; Penghijrahan LFS khusus dibahagikan kepada langkah berikut.
Sebaik-baiknya buat sandaran sebelum berhijrah dan berkomunikasi dengan baik dengan rakan sekerja pasukan Lagipun, operasi itu melibatkan -f operasi berisiko tinggi , dan mudah untuk dipersalahkan.
Konfigurasi pelayan GIT LFSJika anda membina beberapa perkhidmatan git bina sendiri, anda mungkin perlu mendayakan LFS pada bahagian pelayan, seperti gitlab. Pemasangan klien GIT LFSPakej pemasangan git untuk tingkap disertakan dengan pemalam ini Tiada pemasangan tambahan diperlukan, pautan. Cuba arahan berikut pada baris arahan.git lfsJika terdapat maklumat yang serupa dengan output dokumen bantuan, ini bermakna sudah ada klien git lfs.
git-lfs/2.11.0 (GitHub; windows amd64; go 1.14.2; git 48b28d97)git lfs <command> [<args>]Git LFS is a system for managing and versioning large files in association with a Git repository. Instead of storing the large files within the Git repository as blobs, Git LFS stores special "pointer files" in the repository, while storing the actual file contents on a Git LFS server. The contents of the large file are downloaded automatically when needed, for example when a Git branch containing the large file is checked out.Git LFS works by using a "smudge" filter to look up the large file contents based on the pointer file, and a "clean" filter to create a new version of the pointer file when the large file's contents change.It also uses a pre-push hook to upload the large file contents to the Git LFS server whenever a commit containing a new large file version is about to be pushed to the corresponding Git server.</args></command>Kemudian anda perlu melaksanakan perintah berikut untuk mengkonfigurasi persekitaran global LFS Ia hanya perlu dikonfigurasikan sekali, dan cangkuk gudang semasa juga akan dikemas kini <.>git lfs install
Pindahkan gudang sejarah tempatan
Kemudian cd ke gudang tempatan anda dan laksanakan arahan berikut, –include mengandungi ungkapan glob, Tambah nama fail yang anda mahu LFS uruskan, –semuanya mewakili semua cawangan tempatan
git lfs migrate import --include="*.bin,*.lib,*.so,*.dll,*.a,*.param,*.zip,*.gz" --everythingSelepas menulis semula cawangan tempatan, teg, dll.,
migrate: Sorting commits: ..., done. migrate: Rewriting commits: 100% (193/193), done. develop bacb490a80ea46d73bd3866c2e7cf7ad199ce5eb -> 72884bcb4629417bad73ea3d485d08a0708909cd feature/npu-platform a3645632756becc527c7f4d58514b3c479f824d3 -> e227900a3903b3a6955e4dffee48daeceac6cdff master 1ccdecdcb4b5d6224a6e24c6f87793bfcc15ee4c -> 1d9fc2139600ef3d92a20d65bb5db89021b8c488 0.1.0 07c6b2aa732506f1cc88cedb551f37f376b6efa6 -> 8e55193221dfca9f6bb28ccd9cca85af9c5958c9 1.0.0 0f694efcd7aa9df641836e1ea6eebbb730b940b5 -> 3f9e77575120b6e56b34790c998a362116da75f5 migrate: Updating refs: ..., done.
kami boleh melaksanakannya di sini dahulu
git lfs ls-filesSemak fail mana yang telah ditukar kepada pengurusan lfs dan semak jika terdapat sebarang peninggalan
Pada masa ini, tidak kira cawangan mana anda berada, Fail .gitattributes akan muncul , dan kandungan yang serupa dengan yang berikut akan ditambahkan.
*.bin filter=lfs diff=lfs merge=lfs -text *.lib filter=lfs diff=lfs merge=lfs -text *.so filter=lfs diff=lfs merge=lfs -text *.dll filter=lfs diff=lfs merge=lfs -text *.a filter=lfs diff=lfs merge=lfs -text *.param filter=lfs diff=lfs merge=lfs -text *.zip filter=lfs diff=lfs merge=lfs -text *.gz filter=lfs diff=lfs merge=lfs -textSahkan bahawa ia betul, dan kemudian ia boleh ditolak ke hujung terpencil;
version https://git-lfs.github.com/spec/v1 oid sha256:9171c8350d72ccca6ad60ac80b577157ad1f9fd44ca05744216e02ccbfcdf491 size 10260Disebabkan lfs Migrasi akan menulis semula semua komit dan mengubah suai nilai cincang, jadi kita perlu menambah –froce
Langkah ini memerlukan pembatalan cawangan yang dilindungi (cawangan yang dilindungi tidak boleh -f)
git push --force --all
git lfs pull
git reflog expire --expire-unreachable=now --all git gc --prune=now
lfs直观来讲更多的是针对仓库大clone慢的问题,我这边lfs迁移前后各备份各一个小型远程仓库做测试,
用的测试仓库二进制文件比较小,总大50m内,且变更次数也在个位数。
clone下来的仓库大小对比。
和我预估差不多,总的来说更适合二进制文件频繁变更,如果单纯是文件大,但文件不变更的话,在clone的时候区别不大,毕竟lfs在clone仍有下载源文件的步骤,除开下载,操作文件指针对git来说理论仍会有性能提升,但是可能感知不强。
推荐学习:《Git教程》
Atas ialah kandungan terperinci Arahan migrasi GIT LFS (contoh terperinci). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!