Heim > Entwicklungswerkzeuge > Idiot > Lernen Sie in zehn Minuten die GIT Warehouse-Verschlankung und die GIT LFS-Migrationsanweisungen

Lernen Sie in zehn Minuten die GIT Warehouse-Verschlankung und die GIT LFS-Migrationsanweisungen

WBOY
Freigeben: 2022-01-07 17:17:13
nach vorne
3239 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über GIT Warehouse-Verschlankung und GIT LFS-Migrationsanweisungen. Ich hoffe, dass er für alle hilfreich ist.

Lernen Sie in zehn Minuten die GIT Warehouse-Verschlankung und die GIT LFS-Migrationsanweisungen

Hintergrund

Ich habe CI/CD zuvor bei einigen Git-Projekten verwendet und festgestellt, dass der Git-Klon von Jenkins 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.

GIT LFS (Large File Storage)

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.

Migration

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.
Dies liegt daran, dass Sie bei der Verwendung des Git-Warehouse häufig feststellen, dass das Warehouse sehr groß und das Klonen sehr langsam ist, und dann über die Verwendung von LFS nachdenken.

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 Ihren Teamkollegen zu kommunizieren. Schließlich handelt es sich bei der Operation um Hochrisikooperationen, und es ist leicht, die Schuld auf sich zu nehmen.

GIT LFS-Serverkonfiguration

Wenn Sie einige selbst erstellte Git-Dienste erstellen, müssen Sie möglicherweise LFS auf der Serverseite aktivieren, z. B. Gitlab.

GIT LFS-Client-Installation

Das Git-Installationspaket für Windows wird mit diesem Plug-in geliefert. Es ist keine zusätzliche Installation erforderlich, Link.

Probieren Sie die folgenden Befehle in der Befehlszeile aus.

git lfs

Wenn 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>
Nach dem Login kopieren
Dann müssen Sie den folgenden Befehl ausführen, um die globale LFS-Umgebung zu konfigurieren. Er muss nur einmal konfiguriert werden und gleichzeitig werden auch die Hooks des aktuellen Warehouse aktualisiert

git lfs install

Migrieren 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.

Also synchronisieren wir besser das lokale Warehouse mit dem entfernten und erstellen lokale Zweige für alle entfernten Zweige.

Gehen Sie dann zu Ihrem lokalen Warehouse, führen Sie den folgenden Befehl aus: –include enthält den Glob-Ausdruck und fügen Sie LFS selbst hinzu Name der verwalteten Datei, – alles stellt alle lokalen Zweige dar

git lfs migrate import --include="*.bin,*.lib,*.so,*.dll,*.a,*.param,*.zip,*.gz" --everything
Nach dem Login kopieren
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.
Nach dem Login kopieren

Nach dem Umschreiben lokaler Zweige, Tags usw.
Wir können hier zunächst

git lfs ls-files

ausführen, um zu sehen, welche Dateien in die LFS-Verwaltung konvertiert wurden. Überprüfen Sie, ob Auslassungen vorliegen


Zu diesem Zeitpunkt wird die .gitattributes-Datei angezeigt, unabhängig davon, in welchem ​​Zweig Sie sich befinden, und es werden Inhalte ähnlich dem folgenden hinzugefügt. Lernen Sie in zehn Minuten die GIT Warehouse-Verschlankung und die GIT LFS-Migrationsanweisungen

*.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
Nach dem Login kopieren
Gleichzeitig können Sie sehen, dass alle unsere Binärdateien in die folgende Textform konvertiert wurden

version https://git-lfs.github.com/spec/v1
oid sha256:9171c8350d72ccca6ad60ac80b577157ad1f9fd44ca05744216e02ccbfcdf491
size 10260
Nach dem Login kopieren
Bestätigen Sie, dass sie korrekt sind, und können Sie sie dann an das entfernte Ende übertragen;

Seit der Migration von lfs schreibt alle Commits neu und ändert den Hash-Wert, daher müssen wir –froce hinzufügen. Dieser Schritt erfordert das Abbrechen des geschützten Zweigs (geschützte Zweige können nicht -f sein).

git push --force --all
Nach dem Login kopieren

Auf diese Weise ist die LFS-Migration des Remote-Warehouse abgeschlossen

迁移一些补充说明

  1. 迁移者的本地仓库lfs文件转源文件:经过以上步骤,由于我们将所有文件都已经转成文件指针,我们需要将文件下载回来才能正常使用该仓库。
    需要注意,其他人重新clone 或者同步 lfs迁移过的remote仓库 是不需要该步,只针对迁移作者本地的仓库。
git lfs pull
Nach dem Login kopieren
  1. 团队中其他成员迁移前的本地仓库同步: 由于远程仓库的历史已经被全部重写,所以无法直接同步,最好是删除本地分支,重新拉取远程分支,如果本地已经有部分commit需要提交,可以重名本地分支,拉取远程再做cherry pick。git tag 同理,删除迁移前的tag。
  2. 本地仓库清理:上面的迁移成功将二进制文件迁移成git lfs 对象,git log 也不在存储源文件文件变更而是指针变更,但是在本地.git文件夹中仍存在之前不再需要的git log 缓存,执行以下命令做清理。
git reflog expire --expire-unreachable=now --all
git gc --prune=now
Nach dem Login kopieren

清理前后仓库对比

lfs直观来讲更多的是针对仓库大clone慢的问题,我这边lfs迁移前后各备份各一个小型远程仓库做测试,
用的测试仓库二进制文件比较小,总大50m内,且变更次数也在个位数。
clone下来的仓库大小对比。
和我预估差不多,总的来说更适合二进制文件频繁变更,如果单纯是文件大,但文件不变更的话,在clone的时候区别不大,毕竟lfs在clone仍有下载源文件的步骤,除开下载,操作文件指针对git来说理论仍会有性能提升,但是可能感知不强。
Lernen Sie in zehn Minuten die GIT Warehouse-Verschlankung und die GIT LFS-Migrationsanweisungen

推荐学习:《Git教程

Das obige ist der detaillierte Inhalt vonLernen Sie in zehn Minuten die GIT Warehouse-Verschlankung und die GIT LFS-Migrationsanweisungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
git
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage