찾다
개발 도구자식10분 안에 GIT 웨어하우스 슬리밍 및 GIT LFS 마이그레이션 지침을 알아보세요.

이 기사는 GIT 웨어하우스 슬리밍 및 GIT LFS 마이그레이션 지침에 대한 관련 지식을 제공하므로 모든 사람에게 도움이 되기를 바랍니다.

10분 안에 GIT 웨어하우스 슬리밍 및 GIT LFS 마이그레이션 지침을 알아보세요.

Background

이전에 일부 git 프로젝트에서 CI/CD를 사용했는데, jenkins git clone이 실패하고 깊이 및 복제 시간 설정에 실패했음을 발견했습니다. 창고 축소와 같은 전략만 고려할 수 있습니다. 웨어하우스에는 많은 바이너리 파일이 있고 이러한 바이너리 파일이 매우 자주 변경되는 것으로 나타났습니다. 이 작업으로 인해 Git 웨어하우스는 기하급수적으로 늘어나고 Git 자체는 텍스트 파일 관리에만 적합합니다.

또 다른 흥미로운 이야기는 그래픽 프로그래밍에 관심이 있는 동료가 있었다는 것입니다. 이 언어의 소스 코드는 이미지 형식이었고 파일이 매우 커서 git에서 관리되었으며 소규모 회사의 프로젝트가 변경되었습니다. 이로 인해 얼마 지나지 않아 git 서버 하드 디스크가 실제로 그의 git 저장소 중 일부로 가득 차게 되었습니다.

GIT LFS(대형 파일 저장소)

git은 바이너리 파일 관리에 적합한 적이 없었지만 이제 git은 대용량 파일 관리를 위해 특별히 설계된 플러그인인 git lfs를 기본적으로 제공하는 것 같습니다.

기본 원리는 단순히 실제 파일 저장 대신 파일 포인터(텍스트)를 사용하는 것입니다. git은 전체 바이너리 파일이 아닌 파일 포인터의 변경 내역만 저장하고 사용 시 자동으로 Hook을 제공하므로 편리합니다. clone, pull, 재설정 및 기타 작업의 경우 이러한 파일 포인터의 소스 바이너리 파일을 자동으로 얻습니다. 마찬가지로 바이너리 파일 커밋을 업데이트할 때 git은 자동으로 소스 파일을 파일 포인터로 변환하고 이를 git log에 입력합니다. 동시에 소스 파일이 lfs에 업로드됩니다. 따라서 사용자 수준에서 GIT LFS를 사용하는 것은 실제로 의미가 없습니다.

Migration

위에서는 GIT LFS에 대해 간략하게 소개합니다. 다음으로 LFS를 처음부터 사용하는 방법이 아닌 마이그레이션에 대해 직접 이야기하는 이유에 대해 설명하겠습니다.
git Warehouse를 사용하다 보면 종종 웨어하우스가 너무 크고 clone이 너무 느리다는 것을 알게 되면서 LFS를 사용해보고 싶다는 생각을 하게 되기 때문입니다.

마이그레이션을 위해서는 웨어하우스의 관리자 권한이 필요하고 보호된 지점의 보호를 해제해야 합니다.
구체적인 LFS 마이그레이션은 주로 다음 단계로 나뉩니다.

마이그레이션하기 전에 백업을 하고 팀 동료들과 잘 소통하는 것이 가장 좋습니다. 결국 작업에는 -f 고위험 작업이 포함되며 비난을 받기 쉽습니다.

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 글로벌 환경을 구성하려면 다음 명령을 실행해야 합니다. 한 번만 구성하면 되며 현재 웨어하우스의 후크도 동시에 업데이트됩니다

git lfs install

로컬 기록 창고 마이그레이션

lfs 마이그레이션의 기본 아이디어: lfs 로컬 기록 다시 쓰기 —>force push는 원격 끝을 덮어써 마이그레이션 효과를 얻습니다.
따라서 로컬 웨어하우스를 원격 웨어하우스와 동기화하고 모든 원격 브랜치에 대한 로컬 브랜치를 생성하는 것이 좋습니다.
그런 다음 로컬 웨어하우스로 이동하여 다음 명령을 실행합니다. –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.

로컬 브랜치, 태그 등을 다시 작성한 후

먼저 여기에서 git lfs ls-files를 실행하여 어떤 파일이 lfs 관리로 변환되었는지 확인할 수 있습니다. 누락된 부분이 있는지 확인해주세요
10분 안에 GIT 웨어하우스 슬리밍 및 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来说理论仍会有性能提升,但是可能感知不强。
10분 안에 GIT 웨어하우스 슬리밍 및 GIT LFS 마이그레이션 지침을 알아보세요.

推荐学习:《Git教程

위 내용은 10분 안에 GIT 웨어하우스 슬리밍 및 GIT LFS 마이그레이션 지침을 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
이 기사는 CSDN에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제
Git and Github : 그들의 역할과 기능을 탐구합니다Git and Github : 그들의 역할과 기능을 탐구합니다May 09, 2025 am 12:25 AM

소프트웨어 개발에서 GIT 및 GITHUB의 역할과 기능은 코드 및 협업 개발을 관리하는 것입니다. Gitub은 Commit, Branch 및 병합 기능을 통해 코드 버전을 효율적으로 관리하는 반면 Github은 PullRequest 및 문제와 같은 코드 호스팅 및 협업 도구를 제공하여 팀 협업 효율성을 향상시킵니다.

Github : 코드 발견, 공유 및 기여Github : 코드 발견, 공유 및 기여May 08, 2025 am 12:26 AM

Github는 개발자가 코드를 발견, 공유 및 기여하는 선호하는 플랫폼입니다. 1) 파이썬 프로젝트와 같은 검색 기능을 통해 특정 코드베이스를 찾으십시오. 2) 저장소 및 푸시 코드를 만들어 전 세계 개발자와 공유하십시오. 3) 오픈 소스 프로젝트에 참여하고 Fork 및 PullRequest를 통해 코드를 기여하십시오.

Github와 함께 Git 사용 : 실용 가이드Github와 함께 Git 사용 : 실용 가이드May 07, 2025 am 12:11 AM

GIT는 버전 제어 시스템이며 Github는 GIT를 기반으로 한 온라인 플랫폼입니다. 코드 관리 및 팀 협업에 GIT 및 GitHub를 사용하는 단계에는 다음이 포함됩니다. 1. GIT 저장소 초기화 : Gitinit. 2. 임시 저장 영역에 파일을 추가하십시오 : Gitadd. 3. 변경 사항 제출 : GitCommit-M "InitialCommit". 4. github 리포지토리와 관련된 : gitremoteaddoriginhttps : //github.com/username/repository.git. 5. 코드를 github로 푸시하십시오 : Gitpush-UoriginMaste

Github의 영향 : 소프트웨어 개발 및 협업Github의 영향 : 소프트웨어 개발 및 협업May 06, 2025 am 12:09 AM

Github는 소프트웨어 개발 및 협업에 광범위한 영향을 미칩니다. 1. GIT의 분산 버전 제어 시스템을 기반으로 코드 보안 및 개발 유연성을 향상시킵니다. 2. PullRequest와 같은 기능을 통해 팀 협업 효율성 및 지식 공유를 향상시킵니다. 3. GitHubactions와 같은 도구는 개발 프로세스를 최적화하고 코드 품질을 향상시키는 데 도움이됩니다.

GitHub 사용 : 코드 공유, 관리 및 기여GitHub 사용 : 코드 공유, 관리 및 기여May 05, 2025 am 12:12 AM

GitHub에서 코드를 공유, 관리 및 기여하는 방법에는 다음이 포함됩니다. 1. 저장소 및 푸시 코드를 작성하고 readme 및 라이센스 파일을 작성합니다. 2. 지점, 태그 및 병합 요청을 사용하여 코드를 관리합니다. 3. 저장소를 포크하고 풀 레크스 기여 코드를 수정하고 제출하십시오. 이러한 단계를 통해 개발자는 GitHub를 효과적으로 사용하여 개발 효율성과 협업 기능을 향상시킬 수 있습니다.

Git vs. Github : 비교 분석Git vs. Github : 비교 분석May 04, 2025 am 12:07 AM

GIT는 분산 버전 제어 시스템이며 GitHub는 GIT 기반 협업 플랫폼입니다. GIT는 버전 제어 및 코드 관리에 사용되며 GitHub은 코드 검토 및 프로젝트 관리와 같은 추가 협업 기능을 제공합니다.

git vs. github : 차이 이해git vs. github : 차이 이해May 03, 2025 am 12:08 AM

GIT는 분산 버전 제어 시스템이며 Github는 GIT를 기반으로 한 온라인 플랫폼입니다. GIT는 버전 제어, 지점 관리 및 합병에 사용되며 GitHub은 코드 호스팅, 협업 도구 및 소셜 네트워킹 기능을 제공합니다.

Github : The Frontend, Git : 백엔드Github : The Frontend, Git : 백엔드May 02, 2025 am 12:16 AM

GIT는 백엔드 버전 제어 시스템이며 GitHub는 GIT를 기반으로 한 프론트 엔드 협업 플랫폼입니다. GIT는 코드 버전을 관리하고 GitHub은 사용자 인터페이스 및 협업 도구를 제공하며 두 사람은 함께 작동하여 개발 효율성을 향상시킵니다.

See all articles

핫 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 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

MinGW - Windows용 미니멀리스트 GNU

MinGW - Windows용 미니멀리스트 GNU

이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음