Git 호환 소스 코드 제어 시스템 Sapling

어린 나무

Sapling은 세계 최대의 리포지토리로 확장하면서 사용 편의성을 강조합니다.

페이스 북 공개 블로그 게시물을 통해 소스 코드 관리 시스템 어린 나무 회사의 내부 프로젝트 개발에 사용됩니다. 시스템 버전 제어 인터페이스를 제공하는 것을 목표로 함 수천만 개의 파일, 커밋 및 분기에 걸쳐 있는 매우 큰 리포지토리로 확장할 수 있습니다.

시스템의 주요 아이디어는 리포지토리 저장소를 제공하는 서버의 특수 부분과 상호 작용하여 모든 작업은 파일 수에 따라 확장됩니다. 개발자가 작업 중인 코드에서 실제로 사용되며 전체 리포지토리의 총 크기에 의존하지 않습니다.

예를 들어, 개발자는 매우 큰 리포지토리에서 코드의 작은 부분만 사용할 수 있으며 전체 리포지토리가 아닌 이 작은 부분만 시스템으로 전송됩니다. 작업 디렉토리는 리포지토리 파일에 액세스할 때 동적으로 채워지며, 한편으로는 코드의 작업 속도를 크게 높일 수 있지만 다른 한편으로는 액세스할 때 속도가 느려집니다. 새 파일을 처음 접하고 지속적인 네트워크 액세스가 필요합니다(별도 및 오프라인 커밋 준비 모드 제공).

적응형 데이터 로딩 외에도 Sapling은 또한 변경 내역으로 정보 부하를 줄이기 위한 최적화를 구현합니다. (예를 들어, Linux 커널이 있는 리포지토리의 데이터 중 3/4은 변경 기록입니다).

변경 기록을 효과적으로 사용하기 위해 이와 관련된 데이터는 세그먼트화된 보기에 저장되어 서버에서 커밋 그래프의 개별 부분을 다운로드할 수 있습니다. 클라이언트는 여러 확인의 관계에 대한 정보를 서버에 요청하고 그래프에서 필요한 부분만 다운로드할 수 있습니다.

이 프로젝트는 지난 10년 동안 개발되어 왔습니다. "병합" 대신 "리베이스" 작업을 사용하는 관행이 실행되는 마스터 분기가 있는 매우 큰 모놀리식 리포지토리에 액세스할 때 문제를 해결하기 위해 만들어졌습니다.

당시에는 이러한 리포지토리 작업을 위한 개방형 솔루션이 없었으며 Facebook 엔지니어는 프로젝트를 작은 리포지토리로 분할하여 종속성 관리를 더 복잡하게 만드는 대신 회사의 요구를 충족하는 새로운 버전 제어 시스템을 만들기로 결정했습니다. 한때 비슷한 문제를 해결하기 위해 Microsoft는 GVFS 레이어를 만들었습니다.

처음에 Facebook은 Mercurial 시스템을 사용했습니다. Sapling 프로젝트는 처음에 Mercurial에 추가되어 개발되었습니다. 시간이 지남에 따라 시스템은 독립적인 프로젝트가 되었습니다. 자체 프로토콜, 스토리지 형식 및 알고리즘을 사용하며 Git 리포지토리와 상호 작용할 수 있는 기능으로 확장되었습니다.

작업, 명령줄 유틸리티 "sl"이 제안되었습니다. Git 및 Mercurial에 익숙한 개발자에게 친숙한 일반적인 개념, 워크플로우 및 인터페이스를 구현합니다. Sapling의 용어와 명령은 Git과 약간 다르며 Mercurial에 더 가깝습니다.

추가 기능 중 묘목의 하이라이트 "스마트 등록" 지원 (smartlog), 리포지토리 상태를 시각적으로 평가할 수 있습니다. 가장 중요한 정보를 강조 표시하고 사소한 세부 정보를 필터링합니다. 예를 들어 인수 없이 sl 유틸리티를 실행하면 자신의 로컬 변경 사항만 표시되고(외부 변경 사항은 축소됨) 외부 분기 상태, 변경된 파일 및 커밋의 새 버전이 표시됩니다. 또한 스마트 로그, 변경 트리 및 커밋을 통한 빠른 탐색을 위해 대화형 웹 인터페이스가 제공됩니다.

묘목의 또 다른 주목할만한 개선점은 오류를 수정 및 분석하고 이전 상태로 되돌리는 프로세스를 훨씬 쉽게 만듭니다. 예를 들어 "sl undo", "sl redo", "sl uncommit" 및 "sl unmend" 명령은 많은 작업을 되돌리기 위해 제안되고 "sl hide" 및 "sl unhide"는 커밋을 일시적으로 숨기고 대화형 탐색을 위해 제안됩니다. 상태 Sapling은 또한 커밋 스택의 개념을 지원하므로 복잡한 기능을 더 작고 이해하기 쉬운 증분 변경 세트(기본 프레임워크에서 최종 기능까지)로 분해하여 검토를 단계별로 구성할 수 있습니다.

갈라져, 리포지토리와의 효과적인 원격 작업을 위해 서버 부분이 개발되었습니다. 그리고 마치 완전한 저장소인 것처럼 저장소 일부의 로컬 부분과 함께 작동하는 가상 파일 시스템(개발자는 전체 저장소를 볼 수 있지만 요청된 데이터만 액세스할 수 있는 로컬 시스템에 복사됨).

Facebook의 인프라에서 사용되는 이러한 구성 요소에 대한 코드는 아직 공개되지 않았지만 회사는 향후 이를 공개하겠다고 약속했습니다. 그러나 Mononoke 서버(Rust) 및 VFS EdenFS(C++) 프로토타입은 이미 Sapling 저장소에서 찾을 수 있습니다. 이러한 구성 요소는 선택 사항이며 Git 리포지토리 복제, Git LFS 기반 서버와의 상호 작용 및 GitHub와 같은 git 호스트와의 작업을 지원하는 Sapling 클라이언트로 작업하기에 충분합니다.

Sapling을 위한 여러 플러그인이 준비되었습니다., 변경 사항을 검토하기 위한 ReviewStack 인터페이스(GPLv2의 코드)를 포함하여 GitHub에서 풀 요청을 처리하고 변경 스택 보기를 사용할 수 있습니다.

더 자세히 알고 싶으시면 자세한 내용을 참조하십시오 다음 링크에서.


코멘트를 남겨주세요

귀하의 이메일 주소는 공개되지 않습니다. 필수 필드가 표시되어 있습니다 *

*

*

  1. 데이터 책임자 : Miguel Ángel Gatón
  2. 데이터의 목적 : 스팸 제어, 댓글 관리.
  3. 합법성 : 귀하의 동의
  4. 데이터 전달 : 법적 의무에 의한 경우를 제외하고 데이터는 제 XNUMX 자에게 전달되지 않습니다.
  5. 데이터 저장소 : Occentus Networks (EU)에서 호스팅하는 데이터베이스
  6. 권리 : 귀하는 언제든지 귀하의 정보를 제한, 복구 및 삭제할 수 있습니다.