2017-11-24 14 views
1

4 년 된 git 저장소가 매우 커지기 시작합니다. ~ 30GO, 60.000 개의 파일이 있습니다. 하나 또는 두 개의 커밋이 매일 수행됩니다. 첫 번째 커밋에 1 년 이상 된 모든 커밋을 스쿼시하고 싶습니다. 그러나 기술적 인 문제로 인해, 나는 repo를 다시 만들 수 없으며, 나는 그것으로 작업해야합니다. 사용 가능한 자식 버전은 1.7.2.5입니다 (업데이트 할 수 없음). 디스크 공간은 100go로 제한되어 있으므로 (70go 만 사용할 수 있음) 장치 메모리는 4go (19MB의 스왑, 예 MO ...)이며 다른 컴퓨터에서도 저장소를 이동할 수 없습니다.스쿼시가 아주 커다란 저장소와 제한된 리소스에서 1 년 넘게 커밋됩니다.

나는이 페이지 Squash the first two commits in Git? (2009 년 2 월 버전)에서 선택한 솔루션을 사용해 보았습니다. 그것은 'git rebase - 토론'때까지 작동합니다. 이 자식 rebase OutOfMemory 오류가 발생합니다, 나는 원인을 잘 모르겠다, 그것은 아마도 그것은 한 번에 모든 커밋을 재생하려고하기 때문에 생각합니다. 나는 git-cherry-pick을 사용하고 각 커밋을 한 번에 하나씩 연주 한 다음 마스터를 맨 위로 이동하려고 생각합니다.

좋은 생각인가요? 또는 누군가는 더 나은 아이디어가 있습니까? ! :)

+0

가상 컴퓨터에서 사용할 수있는 메모리를 늘리면 메모리 부족 문제가 해결 될 수 있습니다. –

+0

VM의 물리 설정이 고정되어 있습니다.이 설정은 실제 독점적 인 가상 시스템입니다. 내가 늘릴 수있는 유일한 방법은 추가 디스크를 추가하여 디스크 저장 공간을 확보하는 것입니다. – djo

답변

0

커밋 수가 문제를 일으키지는 않을 것입니다. git은 텍스트 파일 압축시 매우 효율적입니다.

git 저장소의 크기를 줄이는 가장 좋은 방법은 BFG repo cleaner과 같은 도구를 사용하여 기록에서 큰 바이너리 파일을 제거하는 것입니다.

Nuget 패키지 및 Jars와 같은 컴파일 된 종속성은 주로 git가 아닌 artefact 저장소에 저장되어야하며, 응용 프로그램 빌드 프로세스는 빌드시 종속성을 가져옵니다.

또한 Git LFS을 사용하면 이진 파일을 더 투명하게 저장할 수 있습니다.

+0

사실 바이너리가 아닌 저장소에 텍스트 파일 만 있습니다. 하지만 BFG 또는 git-filter-branch를 사용하여 전체 역사를 통해 오래되고 쓸모없는 파일을 제거하려고합니다. – djo