Git으로 대용량 파일의 버전을 지정하는 방법

비밀이 아닙니다. Git은 대용량 파일을 잘 처리하지 못합니다.

Indeed. The git architecture simply sucks for big objects. It was discussed somewhat during the early stages, but a lot of it really is pretty fundamental. (Linus Torvalds)



이 짧은 게시물에서 다음을 수행하고 싶습니다.
  • Git으로 대용량 파일을 처리하기 위해 사용할 수 있는 도구를 확인하십시오
  • .
  • 다음 중 하나를 시도하십시오 - DVC



  • 몇 개의 100MB 파일을 커밋한 다음 현재 저장소의 일부임을 깨닫고take quite an effort to carve it out 저장소를 수정한 적이 있습니까?



    Git 클론은 몇 시간이 걸리고 일반 작업은 몇 초가 아닌 몇 분이 걸릴 수 있습니다. 실제로 가장 좋은 아이디어는 아닙니다. 그리고 게임 개발부터 대용량 데이터 세트, 비디오 등을 처리하려는 데이터 과학에 이르기까지 저장소에 대용량 파일 버전을 지정하려는 경우가 많습니다.

    따라서 이를 처리하기 위해 어떤 오픈 소스 및 Git 호환 옵션이 있는지 살펴보겠습니다.
  • Git-LFS - Github와 Gitlab 모두 이를 지원하며 서버에 대용량 파일을 저장할 수 있습니다. 일부limits
  • Git-annex - 매우 강력하고 정교한 도구이지만 내 마음에 배우고 관리하기가 어렵습니다
  • DVC - Git for Data 또는 데이터 버전 제어 - ML 및 데이터 프로젝트용으로 만들어진 도구이지만 기본적으로 대용량 파일 버전 관리에 도움이 됨



  • LFS 및 부속 도구here에 대한 (다소 오래된) 개요를 읽을 수 있지만 이번에는 DVC의 워크플로우가 어떻게 보이는지 보여드리고 싶습니다(예! 저는 관리자 중 한 명입니다).

    DVC가 installed인 후 우리가 해야 할 일은 dvc add를 실행하고 대용량 파일을 저장하는 데 사용할 저장소를 설정하는 것뿐입니다.

    여기저기서 시도해 봅시다. 먼저 더미 저장소가 필요합니다.

    $ mkdir example
    $ cd example
    $ git init
    $ dvc init
    $ git commit -m "initialize"
    

    둘째, 큰 파일을 생성합니다.

    $ head -c1000000 /dev/urandom > large-file 
    # Windows: fsutil file large-file test.txt 1048576
    

    작업 흐름은 Git과 유사하지만 큰 파일을 저장하려는 경우 git addgit push 대신 dvc adddvc push를 실행합니다.

    $ dvc add large-file
    

    이제 어딘가에 저장해 보겠습니다(여기서는 Google 드라이브를 사용하지만 AWS S3, Google Cloud, 로컬 디렉터리 및 기타 여러 항목storage options일 수 있음):

    $ dvc remote add -d mystorage gdrive://root/Storage
    $ dvc push
    

    You'd need to create the Storage directory in your Google Drive UI first and dvc push will ask you to give it access to your storage. It is absolutely safe! - credentials are saved on your local machine in the .dvc/tmp/gdrive-user-credentials.json, no access given outside.



    이제 git commit를 수행하여 큰 파일 자체 대신 DVC 파일을 저장할 수 있습니다(dvc status를 실행하여 large-file가 더 이상 Git에서 처리되지 않고 표시되지 않음을 확인할 수 있습니다):

    $ git add .
    $ git status
    
    On branch master
    Changes to be committed:
      (use "git restore --staged <file>..." to unstage)
        modified:   .dvc/config
        new file:   .gitignore
        new file:   large-file.dvc
    
    $ git commit -a -m "add large file"
    



    오늘은 여기까지입니다. 다음 시간에는 어떻게 작동했는지, large-file.dvc가 무엇을 의미하는지, 왜 .gitignore를 생성하는지, 그리고 어떻게 파일을 다시 가져올 수 있는지 살펴보겠습니다!

    좋은 웹페이지 즐겨찾기