큰 바이너리 파일을 포함하는 git repo 최적화


21

우리 프로젝트는 약 11GB이며 그중 10 개는 이진 데이터 (.png 이미지)입니다. 결과적으로 a git diff또는 git status작업이 1 분 이상 소요됩니다. 다행히 모든 데이터 파일은 멋진 이름을 가진 폴더로 분리됩니다 data. "이진 파일에 대한 압축, 확산 및 기타 비용이 많이 드는 작업은 피하십시오."

  • 프로젝트를 두 개의 저장소로 나누는 것이 고려되었습니다. 그런 다음 data외부 리포지토리가되며, 이는 메인 소스 코드 리포지토리에 의해 체크 아웃됩니다. 저장소를 동기화 상태로 유지하는 오버 헤드는 특히 데이터 파일로 작업하는 아티스트에게 너무 많은 것으로 결정되었습니다.

  • 명시 적으로 이러한 파일은 바이너리 이눔 말 , 차이점은 파일을 제외 간주되었다, 그러나 그 질문에 단지 부분적인 해결책처럼 보인다.

git 속성이 해결책이라고 생각하지만 어떻게? 아니면 모 놀리 식 레포보다 더 나은 아키텍처가 있습니까?


1
여기서 첫 번째 큰 질문은 해당 데이터 파일이 얼마나 중요한지입니다. 유용한 기능을 수행하기 위해 프로그램에 사용 가능한 모든 이미지 가 필요 합니까 , 아니면 일반적인 개발 / 테스트 중에 작은 하위 집합으로 벗어날 수 있습니까?
Ixrec

@Ixrec, 이미지는 실제로 소스 코드보다 중요합니다. 모두 존재해야하며 .png 체크섬은 항상 손상된 파일이 있는지 검사합니다.
Vorac

1
스택 오버플로에서이 질문이 아닌 이유는 무엇입니까? Q. 정확히 맞는 것 같습니다.
spirc

@spirc이 질문은 SO에서 주제가되는 "소프트웨어 도구에 대한 도움말"과 여기서 주제에 관한 "버전 제어 전략"사이의 경계를 넘어선 다. 어떤 git 명령을 실행하여 무언가를 수행하도록 요구하지 않기 때문에 분명히 SO 라인에 있지 않으므로 여기에 열어두기로 투표했습니다.

@Snowman은 답변 주셔서 감사합니다. 주제별 목록에서 어떤 항목이 적합합니까? programmers.stackexchange.com/help/on-topic
spirc

답변:


18

당신이 사용할 수있는 자식-LFS 또는 유사한 도구 (자식 지방, 자식-별관 등). 이러한 도구는 기본적으로 리포지토리의 이진 파일을 해시가있는 작은 텍스트 파일로 바꾸고 실제 이진 데이터를 네트워크 공유와 같이 git이 아닌 방식으로 저장합니다.

해시 만 비교할 때 diff와 모든 것을 초고속으로 만들고, 적어도 git-lfs의 경우 사용자에게 투명합니다 (한 번 설치 한 후).

Afaik git-lfs는 github, gitlab, VisualStudio에서 지원되며 오픈 소스입니다.


2
git-lfs혼합 개발자 / 아티스트 팀과 함께 기가 바이트의 자산이있는 프로젝트에서 사용해 보셨습니까 ? 사람들이 게임이나 애니메이션과 같은 프로젝트에 git-lfs를 사용하고 있는지 알고 싶습니다. 글을 쓰는 시점에서 여전히 새롭기 때문에. 내 경험상 기술이 덜한 사용자의 git 진입 장벽은 이미 매우 높기 때문에 파일 관리를위한 추가 계층이 있으므로 사람들이 이미 git에 익숙하지 않으면 사용하기가 어려울 수 있습니다.
ideasman42

최대 약 1GB의 데이터에 대해서만 죄송합니다. 그러나 git-lfs는 최종 사용자를 위해 추가 단계를 추가해서는 안되며 완전히 투명해야합니다.
kat0r

이것은 정답 인 것 같습니다. 통합 중에 문제가 발생하면 여기에 다시보고하겠습니다. 따라서 각 클라이언트 시스템이 아닌 서버에서 설치 절차를 한 번만 완료해야합니까?
Vorac

Afaik 당신은 작은 클라이언트 애드 인도 설치해야합니다, github 페이지를 확인하십시오. 그러나 그것은 다른 대안보다 그룹 정책 / 단순으로 쉽게 배포 할 수 있어야합니다.
kat0r

1

GIT 및 SVN 저장소를 모두 사용하십시오.

이진 파일을 소스와 논리적으로 분리 할 수있는 경우 텍스트 파일에 git을 사용하고 이진 파일에 대한 subversion과 같은 비 DVCS를 고려할 수 있습니다.

내가 작업하는 프로젝트는 컴파일 된 라이브러리 (OSX / Win32 종속성의 경우)마다 많은 GB가 있으므로 버전을 유지해야하기 때문에이 작업을 수행합니다.


반면에 비 기술적 인 사용자가있는 경우 두 가지 버전 제어 시스템을 사용하면 문제가 발생할 수 있습니다. 그러나 아티스트가 코드 작업을하지 않는 경우 업데이트를 수행하는 스크립트를 제공 할 수 있으며 서브 버전을 사용하여 이진 자산을 커밋 할 수 있습니다.

SVN 사용 (포함 git svn)

이 트레이드 오프는 항상 일반적인 자식을 사용하는 개발자에게는 좋지 않지만 메인 리포지토리에 SVN을 사용할 수 있으며 개발자는 git svn도구 를 사용할 수 있습니다 .

이것은 git를 사용하는 개발자에게는 조금 더 효과적이지만 DVCS (또는 일반적으로 VCS)에 익숙하지 않은 모든 사람들에게는 의미가 있습니다. 복잡한 버전 제어 시스템을 여러 번 사용하지 않고도 SVN의 간단한 모델을 사용할 있습니다.


git-lfs도 옵션이지만 사용하지 않았으므로 작동 방식에 대해 이야기 할 수 없습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.