Community

GitHub 백그라운드에서 실행되는 머지/리베이스를 개선한 이야기입니다. 제목에 나온 `merge-ort`는 Git에 새로 도임된 머지 전략입니다. 기존에는 `merge-recursive`전략을

GitHub 백그라운드에서 실행되는 머지/리베이스를 개선한 이야기입니다. 제목에 나온 `merge-ort`는 Git에 새로 도임된 머지 전략입니다. 기존에는 `merge-recursive`전략을 쓰고 있었는데 2년 전 새로운 머지 전략인 merge-ort가 도입되었고 지금은 Git의 기본 머지 전략입니다. GitHub 시스템 뒤에서는 수많은 PR과 푸시를 처리하기 위해 백그라운드에서 머지와 리베이스를 계속 실행하고 있기 때문에 머지/리베이스의 성능은 아주 중요합니다. GitHub에서 머지/리베이스의 3가지 전제 조건이 있는데 빨라야 하고 정확해야 하며 보안을 위해 체크아웃할 수 없기 워킹 디렉토리를 사용하지 않아야 한다는 점입니다. 이전에는 libgit2를 사용하고 있었다고 합니다. 이는 Git의 기본 전략보다 빨랐지만 정확성에서는 약간 차이가 나서 로컬에서는 머지가 잘 되는데 GitHub UI에서는 왜 머지되지 않는지에 관한 문의를 많이 받고 했습니다. 이제 새 기본 전략인 merge-ort는 recursive보다 빠르도 워킹 디렉토리도 필요치 않으므로 이를 GitHub 내에서 사용하기 위해 점진적으로 적용하면서 비교를 해보았습니다. p50에서는 10배, p99에서는 5배가 빨라졌으며 리베이스를 도입하기 위해 git-replay 명령어를 사용했는데 512시간 걸리던 리베이스가 merge-org에서는 33시간으로 줄어들었다고 합니다. https://github.blog/2023-07-27-scaling-merge-ort-across-github/

알림

알림이 없습니다