目錄
GIT LFS (Large File Storage)
遷移
GIT LFS 服務端設定
GIT LFS 用戶端安裝
#遷移本地歷史倉庫
迁移一些补充说明
清理前后仓库对比
首頁 開發工具 Git GIT LFS遷移說明(實例詳解)

GIT LFS遷移說明(實例詳解)

Mar 16, 2022 pm 05:55 PM
git

本篇文章為大家帶來了關於Git的相關知識,其中主要介紹了GIT LFS的相關問題,包括了GIT LFS服務端配置、GIT LFS客戶端安裝、遷移本地歷史倉庫等等,希望對大家有幫助。

GIT LFS遷移說明(實例詳解)

推薦學習:《Git學習教學

之前一些git專案上CI/CD,發現jenkins git clone失敗,設定depth及clone時間之類的無果。只能考慮倉庫瘦身之類的策略。發現倉庫有不少的二進位文件,而這些二進位檔案變更還挺頻繁,這種操作會導致git倉庫成倍增長極速膨脹,git本身只適合管理文字檔案。

另外說一則有趣的往事,之前有個同事是圖形編程,這個語言源碼是圖片形式的,而且一個文件又特別大,上git管理,小公司項目變更又頻繁,導致沒多久公司內部搭的git伺服器硬碟居然就給他的幾個git倉庫給佔滿了。

GIT LFS (Large File Storage)

雖然git一直不適合管理二進位文件,不過現在 git 也好像預設提供了git lfs 這個專門用來管理大文件的插件。

基本原理簡單來說就是使用類似一個文件指針(文本)代替實際的文件存儲,git只存儲文件指針的變更歷史而不是整個二進製文件,並且在使用的時候,自動提供hook,方便在如clone、pull、reset等操作會自動去取得這些文件指標的來源二進位文件,同樣更新二進位檔案commit的時候,git 會自動將來源檔案轉成檔案指標進git log,同時原始檔上傳lfs。所以在使用者層面,GIT LFS的使用其實是無感覺的。

遷移

上面簡單介紹了一下GIT LFS,接下來直接將如何遷移,至於為什麼直接講遷移而不是從0開始如何使用LFS。
是因為往往是git倉庫用著用著發現,倉庫好大、clone好慢,然後才是想著用LFS。

遷移需要我們有倉庫的管理員權限,並且將保護分支之類取消保護;
具體LFS遷移主要分為以下幾步。

遷移前最好做好備份,並且和團隊同事溝通好,畢竟操作涉及-f高風險操作,容易背鍋。

GIT LFS 服務端設定

部分自建置git 服務的話,可能需要服務端設定開啟LFS,例如gitlab。

GIT LFS 用戶端安裝

windows 的git安裝包自備了該插件,不需要另外安裝,其他平台可自行安裝,連結。

在命令列嘗試以下命令。

git lfs

如果有類似help文件資訊輸出,就是已經有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>
登入後複製

而後需要執行以下指令設定LFS全域環境,只需要設定一次,同時也會去更新目前倉庫的hooks

git lfs install

#遷移本地歷史倉庫

lfs遷移基本概念:lfs重寫本地歷史—>force push覆寫遠端,達到遷移的效果。
所以我們最好將本地倉庫與遠端同步,並且將所有的遠端分支都創建本地分支;
而後cd到自己本地倉庫,執行以下下命令,–include裡面是glob表達式,自行加入想LFS管理的檔名,–everything代表所有本地分支

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.
登入後複製

重寫完本地分支、tag之類的,

我們在這裡可以先執行git lfs ls-files查看有哪些文件被轉成了lfs管理,檢查是否有遺漏
GIT LFS遷移說明(實例詳解)

#這個時候無論在哪個分支,都會出現.gitattributes 文件,且都會被添加上類似以下內容。

*.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
登入後複製

同時可以看到我們二進位檔案全部都轉成了以下形式文字

version https://git-lfs.github.com/spec/v1
oid sha256:9171c8350d72ccca6ad60ac80b577157ad1f9fd44ca05744216e02ccbfcdf491
size 10260
登入後複製

確認無誤,之後就可以推送到遠端;
由於lfs的遷移會重寫所有的commit,並且修改hash值,因此需要我們需要加上–froce
這一步驟需要取消保護分支(保護分支無法-f)

git push --force --all
登入後複製

這樣遠端倉庫的lfs遷移就完成了

迁移一些补充说明

  1. 迁移者的本地仓库lfs文件转源文件:经过以上步骤,由于我们将所有文件都已经转成文件指针,我们需要将文件下载回来才能正常使用该仓库。
    需要注意,其他人重新clone 或者同步 lfs迁移过的remote仓库 是不需要该步,只针对迁移作者本地的仓库。
git lfs pull
登入後複製
  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
登入後複製

清理前后仓库对比

lfs直观来讲更多的是针对仓库大clone慢的问题,我这边lfs迁移前后各备份各一个小型远程仓库做测试,
用的测试仓库二进制文件比较小,总大50m内,且变更次数也在个位数。
clone下来的仓库大小对比。
和我预估差不多,总的来说更适合二进制文件频繁变更,如果单纯是文件大,但文件不变更的话,在clone的时候区别不大,毕竟lfs在clone仍有下载源文件的步骤,除开下载,操作文件指针对git来说理论仍会有性能提升,但是可能感知不强。
GIT LFS遷移說明(實例詳解)推荐学习:《Git教程

以上是GIT LFS遷移說明(實例詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

git服務器怎麼連接公網 git服務器怎麼連接公網 Apr 17, 2025 pm 02:27 PM

將 Git 服務器連接到公網包括五個步驟:1. 設置公共 IP 地址;2. 打開防火牆端口(22、9418、80/443);3. 配置 SSH 訪問(生成密鑰對、創建用戶);4. 配置 HTTP/HTTPS 訪問(安裝服務端、配置權限);5. 測試連接(使用 SSH 客戶端或 Git 命令)。

git怎麼刪除倉庫 git怎麼刪除倉庫 Apr 17, 2025 pm 04:03 PM

要刪除 Git 倉庫,請執行以下步驟:確認要刪除的倉庫。本地刪除倉庫:使用 rm -rf 命令刪除其文件夾。遠程刪除倉庫:導航到倉庫設置,找到“刪除倉庫”選項,確認操作。

git賬戶怎麼添加公鑰 git賬戶怎麼添加公鑰 Apr 17, 2025 pm 02:42 PM

如何將公鑰添加到 Git 賬戶?步驟:生成 SSH 密鑰對。複製公鑰。在 GitLab 或 GitHub 中添加公鑰。測試 SSH 連接。

git代碼衝突怎麼處理 git代碼衝突怎麼處理 Apr 17, 2025 pm 02:51 PM

代碼衝突是指當多個開發者修改同一段代碼導致 Git 合併時無法自動選擇更改而出現的衝突。解決步驟包括:打開有衝突的文件,找出衝突代碼。手動合併代碼,將要保留的更改複製到衝突標記內。刪除衝突標記。保存並提交更改。

git怎麼檢測ssh git怎麼檢測ssh Apr 17, 2025 pm 02:33 PM

要通過 Git 檢測 SSH,需要執行以下步驟:生成 SSH 密鑰對。將公鑰添加到 Git 服務器。配置 Git 使用 SSH。測試 SSH 連接。根據實際情況解決可能遇到的問題。

git怎麼分開commit git怎麼分開commit Apr 17, 2025 pm 02:36 PM

使用 git 可以分開提交代碼,提供精細的變更追踪和獨立的工作能力。步驟如下: 1. 添加已更改的文件; 2. 提交特定更改; 3. 重複上述步驟; 4. 推送提交到遠程倉庫。

git服務器怎麼搭建 git服務器怎麼搭建 Apr 17, 2025 pm 12:57 PM

搭建 Git 服務器包括:在服務器上安裝 Git。創建運行服務器的用戶和組。創建 Git 存儲庫目錄。初始化裸存儲庫。配置訪問控制設置。啟動 SSH 服務。為用戶授予訪問權限。測試連接。

git怎么生成ssh密鑰 git怎么生成ssh密鑰 Apr 17, 2025 pm 01:36 PM

為了安全連接遠程 Git 服務器,需要生成包含公鑰和私鑰的 SSH 密鑰。生成 SSH 密鑰的步驟如下:打開終端,輸入命令 ssh-keygen -t rsa -b 4096。選擇密鑰保存位置。輸入密碼短語以保護私鑰。將公鑰複製到遠程服務器上。將私鑰妥善保存,因為它是訪問帳戶的憑據。

See all articles