저장소가 너무 커져서 사용할 수 없게되었습니다. 기본적으로 저장소는 2GB 이상이며 복제하는 데 너무 오래 걸립니다. 이제는 축소하고 싶지만 여전히 특정 이전 버전으로 돌아갈 수 있습니다. 축소하면 기록을 다시 작성해야하므로 잘 처리됩니다. 클론을 가진 사람은 새로운 repo 복제본의 새 지점 맨 위에/cherrypick/copyfiles를 리베이스해야합니다.git 저장소 히스토리를 충돌없이 자동으로 스쿼시하는 방법. 축소하려면?
- 이 저장소에는 바이너리 파일이 있지만 필요로합니다 (소프트웨어를 실행하기위한 필수 리소스라고 생각합니다). 그래서 필터 커밋이나 BFG을 사용하여 커다란 바이너리 파일을 제거 할 수 없습니다. 과거의 커밋으로 되돌릴 때 필요하기 때문에.
- 이전의/이미 병합 된 브랜치 (예 : 브랜치 기능)에 대해서는 신경 쓰지 않지만, 특정 커밋에 대해서는 신경 쓰지 않습니다. (이전 릴리스 브랜치의 예 머리)
- ~ 오래된 커밋, 나는 현재 충돌을 병합 (기본 rebase/cherrypick에서 발생할 수있는 것처럼)하는 방법을 모르고 있으므로 충돌을 일으키지 않거나 자동으로 해결할 수있는 충돌 만 생성하는 해결책을 찾고 있습니다.
- 현재의 모든 브랜치를 보존하고 싶으므로 복제를 진행중인 사람들은 리베이스/복사 변경을 할 수 있습니다.
- 내 새로운 커밋 사이의 관련 내역을 이전의 repo의 내역과 일치 시키려합니다 (커밋이 부숴 진 것처럼). 현재 브랜치의 히스토리는 오래된 스쿼시 된 커밋 중 하나에서 시작합니다.
필자는 불필요한 오래된 저장소 기록 스쿼시라고 생각합니다. 지금까지 내가 할 수있는 일은 가능한 일이었습니다 (약간의 단계를 놓친 경우에도 여전히 생각하고있는 것이 확실하지 않습니다).
- 복제본 기존의 미러를 미러링합니다.
- 보관하려는 오래된 커밋에서 고아 분기를 만듭니다. 이렇게하면 부모가 필요없는 커밋이 만들어지고 그 안에 필요한 모든 파일이 만들어집니다.
- 어떻게 든 이전 레포 역사를 재현하려면 링크 => 어떻게? 병합/리베이스/리셋 + 고아 커밋?
- CherryPick 현재 분기의 커밋 목록 (간격을 사용하여)을 첫 번째 발산 커밋의 부모를 부숴 버린 최신 커밋에 적용 => 체리 선택 커밋 간격을 적용 할 커밋을 자동으로 찾는 방법? 충돌없이 작동할까요?
- 태그를 새 트리로 이동하십시오. 이전 트리를 제거하십시오. 자식 쓰레기 수집.
충돌없이 실현할 수 있습니까? 어떤 종류의 경우에도이 작업을 할 수 있습니까? (git commit tree는 꽤 복잡 할 수 있습니다)? 안전하고 자동으로 스쿼시 기록에 더 좋은 해결책이 있습니까?
이런 유형의 유지 관리 작업은 장기간 실행되는 프로젝트에서 발생하는 것으로 보이므로 다른 큰 프로젝트가 이미 일부 유형의 솔루션을 사용하고 있다고 가정합니다. 하지만 내가 알고있는 init (또는 다른 명령)을 git하는 옵션이있을 수 있다고 생각합니다.이 유스 케이스에 대한 이전 버전의 Repo를 새로 만들 수 있습니까?
업데이트 : 여기 솔루션의 시작을 찾았습니다. https://wincent.com/wiki/Editing,_amending,_or_squashing_the_root_commit_in_a_Git_repository 전 역사에 여러 번 이렇게하고 싶습니다. 완전히 자동으로 (즉, 충돌없이) ...이 얕은 복제라고
git clone --depth depth
:
실제로 기록을 축소하겠습니까? 만약 당신이 큰 바이너리 파일을 가지고 있다면, 그것은 커밋 자체가 아닌, 공간을 차지하는 것이다. 큰 오브젝트에 대한 BLOB 크기를 덤프하고 2GB 중에서 차지하는 비율을 확인하면 어떤 개선 효과를 얻을 수 있는지 알 수 있습니다. –
커밋이 부셔지면이 커밋에서 참조 된 바이너리 파일은 더 이상 사용되지 않으며 가비지 수집 될 수 있습니다 ... 생각합니다. 블롭 크기 팁 덕분에 확인하는 것이 좋습니다. – Asmodehn