目次
GIT LFS (Large File Storage)
移行
lfs 移行の基本的な考え方: lfs はローカル履歴を書き換えます - > 強制プッシュでリモート エンドを上書きして移行を実現します効果。
迁移一些补充说明
清理前后仓库对比
ホームページ 開発ツール Git GIT LFS 移行手順 (詳細な例)

GIT LFS 移行手順 (詳細な例)

Mar 16, 2022 pm 05:55 PM
git

この記事では、Git に関する関連知識を提供し、主に GIT LFS サーバーの構成、GIT LFS クライアントのインストール、ローカル履歴の移行など、GIT LFS に関連する問題を紹介します。これはみんなに役立ちます。

GIT LFS 移行手順 (詳細な例)

推奨学習: "Git Learning Tutorial"

以前、CI/CD を使用すると jenkins git clone が失敗することがわかりました。一部の git プロジェクト。深さとクローン作成時間を設定しても効果はありません。倉庫の縮小などの戦略を考えるしかない。ウェアハウスには多数のバイナリ ファイルがあり、これらのバイナリ ファイルは非常に頻繁に変更されることがわかりました。この操作により、git ウェアハウスは急激に増大し、急速に拡張されます。Git 自体はテキスト ファイルの管理にのみ適しています。

もう一つの興味深い過去の話をさせてください。私にはかつてグラフィックス プログラミングに夢中だった同僚がいました。この言語のソース コードは画像の形式であり、ファイルは非常に大きかったです。私は小規模企業のプロジェクトは頻繁に変更され、その結果、社内の Git サーバーのハードディスクがいくつかの Git ウェアハウスでいっぱいになるまでにどれくらい時間がかかりましたか?

GIT LFS (Large File Storage)

git はバイナリ ファイルの管理には決して適していませんでしたが、現在では、git は大きなファイルの管理に特化したプラグインである git lfs をデフォルトで提供しているようです。 。

基本原則は、実際のファイル ストレージの代わりにファイル ポインター (テキスト) を使用することです。Git は、バイナリ ファイル全体ではなくファイル ポインターの変更履歴のみを保存し、使用時に自動的にフックを提供します。これらのファイル ポインターのソース バイナリ ファイルを自動的に取得するには、クローン、プル、リセットなどの操作に便利です。同様に、バイナリ ファイルのコミットを更新するときに、git はソース ファイルを自動的にファイル ポインターに変換して入力します。 git log に保存され、同時にソースファイルが lfs にアップロードされます。したがって、ユーザー レベルでは、GIT LFS の使用は実際には無意味です。

移行

上記では GIT LFS について簡単に紹介し、次に移行方法について直接説明します。なぜ最初から LFS を使用するかではなく移行について直接説明するのかについてです。
これは、git ウェアハウスを使用しているときに、ウェアハウスが非常に大きく、クローン作成が非常に遅いことに気づき、LFS の使用を検討することがよくあるためです。

移行には、ウェアハウスの 管理者権限が必要であり、保護されたブランチの保護を解除する必要があります;
具体的な LFS 移行は、主に次の手順に分かれています。

移行前にバックアップを作成し、チームの同僚とよくコミュニケーションをとることが最善です。結局のところ、この操作にはリスクの高い操作が含まれており、責任を負うことは簡単です。

GIT LFS サーバー構成

いくつかの自己構築 git サービスを構築する場合は、gitlab などのサーバー側で LFS を有効にする必要がある場合があります。

GIT LFS クライアントのインストール

Windows 用の git インストール パッケージには、このプラグインが付属しています。追加のインストールは必要ありません。他のプラットフォームは、それ自体をインストールしてリンクできます。

コマンド ラインで次のコマンドを試してください。

git lfs

ヘルプドキュメントと同様の情報出力がある場合は、すでに 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 グローバル環境を構成する必要があります。構成する必要があるのは 1 回だけであり、現在のウェアハウスのフックも更新されます。

#git lfs install

ローカル履歴ウェアハウスを移行する

lfs 移行の基本的な考え方: lfs はローカル履歴を書き換えます - > 強制プッシュでリモート エンドを上書きして移行を実現します効果。

したがって、ローカル ウェアハウスとリモート ウェアハウスを同期し、すべてのリモート ブランチに対してローカル ブランチを作成する方がよいでしょう。

次に、ローカル ウェアハウスに cd して次のコマンドを実行します。 -include には glob 式が含まれており、 LFS に自分で管理させたいファイル名 – すべてはすべてのローカル ブランチを表します

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.
ログイン後にコピー

ローカル ブランチ、タグなどを書き換えた後、

ここで最初に

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 の移行はすべてのコミットを書き換えるため、ハッシュ値が変更されるため、-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 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

GITでリポジトリを削除する方法 GITでリポジトリを削除する方法 Apr 17, 2025 pm 04:03 PM

gitリポジトリを削除するには、次の手順に従ってください。削除するリポジトリを確認します。リポジトリのローカル削除:RM -RFコマンドを使用して、フォルダーを削除します。倉庫をリモートで削除する:倉庫の設定に移動し、「倉庫の削除」オプションを見つけて、操作を確認します。

Gitプロジェクトをローカルにダウンロードする方法 Gitプロジェクトをローカルにダウンロードする方法 Apr 17, 2025 pm 04:36 PM

gitを介してローカルにプロジェクトをダウンロードするには、次の手順に従ってください。gitをインストールします。プロジェクトディレクトリに移動します。次のコマンドを使用してリモートリポジトリのクローニング:git clone https://github.com/username/repository-name.git

GitでSSHキーを生成する方法 GitでSSHキーを生成する方法 Apr 17, 2025 pm 01:36 PM

リモートGitサーバーに安全に接続するには、パブリックキーとプライベートキーの両方を含むSSHキーを生成する必要があります。 SSHキーを生成する手順は次のとおりです。端子を開き、ssh -keygen -t rsa -b 4096を入力します。キー保存場所を選択します。秘密鍵を保護するには、パスワード句を入力します。公開キーをリモートサーバーにコピーします。アカウントにアクセスするための資格情報であるため、秘密鍵を適切に保存します。

Gitダウンロードがアクティブでない場合はどうすればよいですか Gitダウンロードがアクティブでない場合はどうすればよいですか Apr 17, 2025 pm 04:54 PM

解決:gitのダウンロード速度が遅い場合、次の手順を実行できます。ネットワーク接続を確認し、接続方法を切り替えてみてください。 GIT構成の最適化:ポストバッファーサイズ(Git Config -Global HTTP.Postbuffer 524288000)を増やし、低速制限(GIT Config -Global HTTP.LowsPeedLimit 1000)を減らします。 Gitプロキシ(Git-ProxyやGit-LFS-Proxyなど)を使用します。別のGitクライアント(SourcetreeやGithubデスクトップなど)を使用してみてください。防火を確認してください

Gitアカウントにパブリックキーを追加する方法 Gitアカウントにパブリックキーを追加する方法 Apr 17, 2025 pm 02:42 PM

Gitアカウントに公開キーを追加する方法は?ステップ:SSHキーペアを生成します。公開キーをコピーします。 gitlabまたはgithubに公開キーを追加します。 SSH接続をテストします。

PHPプロジェクトで効率的な検索問題を解決する方法は?タイプセンスはあなたがそれを達成するのに役立ちます! PHPプロジェクトで効率的な検索問題を解決する方法は?タイプセンスはあなたがそれを達成するのに役立ちます! Apr 17, 2025 pm 08:15 PM

eコマースのウェブサイトを開発するとき、私は困難な問題に遭遇しました:大量の製品データで効率的な検索機能を達成する方法は?従来のデータベース検索は非効率的であり、ユーザーエクスペリエンスが低いです。いくつかの調査の後、私は検索エンジンタイプセンスを発見し、公式のPHPクライアントタイプセンス/タイプセンス-PHPを通じてこの問題を解決し、検索パフォーマンスを大幅に改善しました。

GITコードの競合に対処する方法 GITコードの競合に対処する方法 Apr 17, 2025 pm 02:51 PM

コード競合とは、複数の開発者が同じコードを変更し、GITが変更を自動的に選択せずにマージすると発生する競合を指します。解決手順には、競合するファイルを開き、競合するコードを見つけます。コードを手動でマージし、競合マーカーに保持する変更をコピーします。競合マークを削除します。変更を保存して送信します。

Gitサーバーのパブリックネットワークに接続する方法 Gitサーバーのパブリックネットワークに接続する方法 Apr 17, 2025 pm 02:27 PM

GITサーバーをパブリックネットワークに接続するには、5つのステップが含まれます。1。パブリックIPアドレスのセットアップ。 2。ファイアウォールポート(22、9418、80/443)を開きます。 3。SSHアクセスを構成します(キーペアを生成し、ユーザーを作成します)。 4。http/httpsアクセスを構成します(サーバーをインストールし、許可を構成); 5.接続をテストします(SSHクライアントまたはGITコマンドを使用)。

See all articles