Dieser Artikel vermittelt Ihnen relevantes Wissen über Git, in dem hauptsächlich Probleme im Zusammenhang mit GIT LFS vorgestellt werden, einschließlich der GIT LFS-Serverkonfiguration, der GIT LFS-Clientinstallation, der Migration des lokalen historischen Warehouse usw. Ich hoffe, dass er für Sie alle hilfreich ist ist hilfreich.
Empfohlene Studie: „Git Learning Tutorial“
Ich habe CI/CD zuvor bei einigen Git-Projekten verwendet und festgestellt, dass das Jenkins-Git-Klonen fehlgeschlagen ist und die Einstellung von Tiefe und Klonzeit fehlgeschlagen ist. Wir können nur Strategien wie Lagerverkleinerung in Betracht ziehen. Es wurde festgestellt, dass das Warehouse viele Binärdateien enthält und diese sich häufig ändern. Dieser Vorgang führt dazu, dass das Git-Warehouse exponentiell wächst und sich schnell erweitert. Git selbst ist nur für die Verwaltung von Textdateien geeignet.
Eine weitere interessante Geschichte ist, dass ich einmal einen Kollegen hatte, der sich mit Grafikprogrammierung beschäftigte. Der Quellcode dieser Sprache lag in Form von Bildern vor und die Datei war sehr groß. Sie wurde auf Git verwaltet und die Projekte des kleinen Unternehmens wurden geändert häufig, was dazu führte, dass die Festplatte des Git-Servers nicht lange danach für mehrere seiner Git-Repositorys voll war.
Obwohl Git nie für die Verwaltung von Binärdateien geeignet war, scheint Git jetzt standardmäßig Git LFS bereitzustellen, ein Plug-In, das speziell für die Verwaltung großer Dateien entwickelt wurde.
Das Grundprinzip besteht einfach darin, einen Dateizeiger (Text) anstelle der tatsächlichen Dateispeicherung zu verwenden. Git speichert nur den Änderungsverlauf des Dateizeigers und nicht der gesamten Binärdatei und stellt bei Verwendung automatisch Hooks bereit, was praktisch ist Beim Klonen, Ziehen, Zurücksetzen und anderen Vorgängen werden die Quellbinärdateien dieser Dateizeiger automatisch abgerufen. In ähnlicher Weise konvertiert Git beim Aktualisieren der Binärdatei automatisch die Quelldatei in einen Dateizeiger und gibt sie in das Git-Protokoll ein Gleichzeitig wird die Quelldatei in lfs hochgeladen. Auf Benutzerebene ist der Einsatz von GIT LFS also eigentlich sinnlos.
Das Obige stellt GIT LFS kurz vor. Als nächstes werden wir direkt darüber sprechen, wie man migriert, anstatt wie man LFS von Grund auf verwendet.
Das liegt daran, dass ich oft nach der Verwendung des Git-Warehouses feststelle, dass das Warehouse sehr groß und das Klonen sehr langsam ist, und dann über die Verwendung von LFS nachdenke.
Für die Migration müssen wir über Administratorrechte für das Lager verfügen und den Schutz des geschützten Zweigs aufheben. Die spezifische LFS-Migration ist hauptsächlich in die folgenden Schritte unterteilt.
Es ist am besten, vor der Migration ein Backup zu erstellen und gut mit den Teamkollegen zu kommunizieren. Schließlich handelt es sich bei der Operation um Hochrisikooperationen, und man kann leicht die Schuld auf sich nehmen.
GIT LFS-ServerkonfigurationWenn Sie einige selbst erstellte Git-Dienste erstellen, müssen Sie möglicherweise LFS auf der Serverseite aktivieren, z. B. Gitlab. GIT LFS-Client-InstallationDas Git-Installationspaket für Windows wird mit diesem Plug-in geliefert. Andere Plattformen können es selbst installieren, Link. Probieren Sie die folgenden Befehle in der Befehlszeile aus.git lfsWenn eine Informationsausgabe ähnlich dem Hilfedokument vorliegt, bedeutet dies, dass bereits ein Git-LFS-Client vorhanden ist.
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>
git lfs installMigrieren Sie das lokale historische Lager. Grundidee der LFS-Migration: LFS schreibt den lokalen Verlauf neu – > Force Push überschreibt das entfernte Ende, um den Migrationseffekt zu erzielen.
git lfs migrate import --include="*.bin,*.lib,*.so,*.dll,*.a,*.param,*.zip,*.gz" --everything
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.
*.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 -text
git lfs pull
git reflog expire --expire-unreachable=now --all git gc --prune=now
lfs直观来讲更多的是针对仓库大clone慢的问题,我这边lfs迁移前后各备份各一个小型远程仓库做测试,
用的测试仓库二进制文件比较小,总大50m内,且变更次数也在个位数。
clone下来的仓库大小对比。
和我预估差不多,总的来说更适合二进制文件频繁变更,如果单纯是文件大,但文件不变更的话,在clone的时候区别不大,毕竟lfs在clone仍有下载源文件的步骤,除开下载,操作文件指针对git来说理论仍会有性能提升,但是可能感知不强。
推荐学习:《Git教程》
Das obige ist der detaillierte Inhalt vonGIT LFS-Migrationsanweisungen (detaillierte Beispiele). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!