목차
Background
GIT LFS(대형 파일 저장소)
Migration
GIT LFS 서버 구성
GIT LFS 클라이언트 설치
로컬 기록 창고 마이그레이션
迁移一些补充说明
清理前后仓库对比
개발 도구 자식 10분 안에 GIT 웨어하우스 슬리밍 및 GIT LFS 마이그레이션 지침을 알아보세요.

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

Jan 07, 2022 pm 05:17 PM
git

이 기사는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. 크로스 플레이가 있습니까?
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

git로 저장소를 삭제하는 방법 git로 저장소를 삭제하는 방법 Apr 17, 2025 pm 04:03 PM

git 저장소를 삭제하려면 다음 단계를 따르십시오. 삭제하려는 저장소를 확인하십시오. 로컬 리포지토리 삭제 : rm -rf 명령을 사용하여 폴더를 삭제하십시오. 원격으로 창고 삭제 : 창고 설정으로 이동하고 "창고 삭제"옵션을 찾은 후 작동을 확인하십시오.

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 명령 사용).

git 코드 충돌을 다루는 방법 git 코드 충돌을 다루는 방법 Apr 17, 2025 pm 02:51 PM

코드 충돌은 여러 개발자가 동일한 코드를 수정하고 변경 사항을 자동으로 선택하지 않고 합병 할 때 발생하는 충돌을 말합니다. 해상도 단계에는 다음이 포함됩니다. 충돌하는 파일을 열고 충돌하는 코드를 찾으십시오. 코드를 수동으로 병합하고 보관하려는 변경 사항을 충돌 마커에 복사하십시오. 충돌 마크를 삭제하십시오. 변경 사항을 저장하고 제출하십시오.

GIT 계정에 공개 키를 추가하는 방법 GIT 계정에 공개 키를 추가하는 방법 Apr 17, 2025 pm 02:42 PM

GIT 계정에 공개 키를 추가하는 방법은 무엇입니까? 단계 : SSH 키 쌍을 생성합니다. 공개 키를 복사하십시오. Gitlab 또는 Github에 공개 키를 추가하십시오. SSH 연결을 테스트하십시오.

git 저장소 사용 방법 git 저장소 사용 방법 Apr 17, 2025 pm 04:06 PM

GIT 저장소는 변경 사항을 추적, 협업 및 프로젝트 버전을 관리하는 데 사용되는 코드 및 파일 버전 기록의 저장 위치입니다. git 저장소를 사용하려면 다음 단계를 수행하십시오. 저장소 작성 : git init를 실행하십시오. 파일 추가 : git을 사용하여 파일을 준비 영역에 추가하십시오. 커밋 변경 : GIT 커밋을 사용하여 저장소에 스테이징 변경을 저장하십시오. 푸시 변경 : GIT 푸시를 사용하여 원격 저장소로 변경 사항을 푸시하십시오. 풀 변경 : Git Pull을 사용하여 원격 저장소에서 변경 사항을 얻으십시오. 분기 : git 브랜치를 사용하여 지점을 만듭니다. 병합 : GIT 병합을 사용하여 다른 지점의 변경 사항을 병합하십시오. 태그 : git 태그를 사용하십시오

git에서 빈 폴더를 제출하는 방법 git에서 빈 폴더를 제출하는 방법 Apr 17, 2025 pm 04:09 PM

git에 빈 폴더를 제출하려면 다음 단계를 따르십시오. 1. 빈 폴더를 만듭니다. 2. 스테이징 영역에 폴더를 추가하십시오. 3. 변경 사항을 제출하고 커밋 메시지를 입력하십시오. 4. (선택 사항) 변경 사항을 원격 저장소로 밀어 넣습니다. 참고 : 빈 폴더의 이름은 시작할 수 없습니다. 폴더가 이미 존재하는 경우 git add -force를 사용하여 추가해야합니다.

Git에서 프로젝트를 만드는 방법 Git에서 프로젝트를 만드는 방법 Apr 17, 2025 pm 04:18 PM

GIT를 사용하여 프로젝트를 작성하려면 다음 단계가 필요합니다. 1. GIT의 공식 웹 사이트를 설치하여 해당 버전의 GIT를 다운로드하여 설치하십시오. 2. Git init를 사용하여 저장소를 생성하기 위해 프로젝트를 초기화합니다. 3. git add가있는 임시 저장 영역에 파일을 추가 할 파일을 추가하십시오. 4. 변경 및 지침을 추가하기 위해 변경 사항을 제출하십시오. 5. 푸시 푸시로 밀어 넣으십시오. 6. git 당김을 사용하여 원격 저장소에서 최신 변경 사항을 얻으려면 변경 사항을 잡아 당깁니다.

GIT 프로젝트를 로컬로 다운로드하는 방법 GIT 프로젝트를 로컬로 다운로드하는 방법 Apr 17, 2025 pm 04:36 PM

GIT를 통해 로컬로 프로젝트를 다운로드하려면 다음 단계를 따르십시오. GIT를 설치하십시오. 프로젝트 디렉토리로 이동하십시오. 다음 명령을 사용하여 원격 저장소 클로닝 : git 클론 https://github.com/username/repository-name.git

See all articles