본문 바로가기
git

[후기] Sapling 써보기

by marble25 2023. 11. 5.

Graphite 유료화 이슈로 다른 stacked diff 툴을 찾아보다가 다른 동료 분이 추천해주신 sapling을 써보려고 한다.

웹페이지: https://sapling-scm.com/

소개

Sapling은 Meta에서 개발하고 사용하고 있는 source control system이다. Meta 안에서는 큰 모노레포를 위해서 사용되지만, 개발자 개개인을 위해 Git이나 Github와의 호환을 지원한다. 개발된 이유 역시 메타의 모노레포 스케일에서는 다른 오픈소스 source control system이 제대로 동작하지 않기 때문이라고 한다.

설치

맥북에서 설치는 꽤 간단하다. homebrew를 이용해 설치하면 된다.

brew install sapling

이후 간단한 설정이 필요하다.

commit authoring을 위해 username을 세팅해주어야 한다.

sl config --user ui.username "Alyssa P. Hacker <alyssa@example.com>"

github와의 연동을 위해 authentication이 필요하다.

gh auth login --git-protocol https

사용하기 위한 준비는 완료되었다.

사용

먼저 repo를 clone해와야 한다.

sl clone <https://github.com/facebook/sapling>

만약 이미 git으로 만든 repo가 로컬에 존재한다면 지우고 다시 clone해와야 한다.

주로 사용하는 명령어는 다음 페이지에 정리되어 있다.

  • Pull: sl pull 그 후 sl goto main 으로 main(또는 트렁크 브랜치)으로 이동해야 변화를 확인할 수 잇따.
  • Push: push는 다양한 방식으로 동작시킬 수 있으나, sl pr submit이 가장 편한 것 같다.
  • Commit 확인: sl
  • File 추가: sl add FILE
  • commit: sl commit
  • stash: sl shelve
  • unstash: sl unshelve

명령어는 vscode extension과 함께 사용하면 빛을 발한다.

sapling의 단점 중 하나가 gitlens같은 vscode git extension과 연동이 잘 되지 않는다는 점이 있는데, 이 부분을 조금이나마 보완해준다. vscode extension을 이용해서 commit message를 작성하거나, commit amend, sl에 파일 추가 등을 gui로 동작시킬 수 있다.

후기

단점

  1. git과 다른 시스템: 처음 썼을 때는 멀쩡히 잘 있는 깃 레포지토리를 다시 다운로드받아야 하는 점이 불편했다. 명령어들 또한 약간씩 명령어가 다른 부분이 많아 처음에는 적응하기 어려웠다.
  2. vscode와의 연동: github extension을 모두 사용할 수 없는 점이 아쉬웠다. gitlens같은 third-party 앱 뿐만 아니라 vscode 자체적인 버전 컨트롤 시스템을 쓰지 못하는 점이 특히 그러했다. 그나마 Sapling SCM이 약간 편의를 도와주었을 뿐이다.
  3. remote branch로 push: push시 sl pr submit 기준으로 기존에 작성했던 pull request 요청 메시지가 다 초기화된다. 때문에 commit message를 작성할 때에 pull request와 동일한 템플릿으로 readable하게 작성해야 한다. 다른 방식의 경우 훨씬 불편했다. sl ghstack은 github ui로 동작하지 않았고, sl push의 경우 자동으로 pull request가 생성되지 않았다.
  4. linear과 연동: 우리는 자체적으로 linear라는 이슈 관리 툴을 사용한다. 원격 브랜치로 push할 때 pr439 와 같은 브랜치 이름이 자동적으로 생성되기 때문에 linear에서 pr 상태 조회 등의 기능이 정상 연동되지 않는다. 물론 이 것은 지극히 개인적인 케이스이다.

장점

  1. 손쉬운 rebase: Sapling에는 명시적으로 브랜치 개념이 존재하지 않는다. 대신 bookmark만 존재할 뿐이다. Sapling SCM과 연동하면 main branch 위로 commit들을 쌓는 작업이 간편하다.
  2. 손쉬운 stacking: Sapling은 브랜치 개념이 존재하지 않기 때문에 commit 단위로 push하게 된다. 따라서 stack을 추적하기 편하다.
  3. 빠른 속도: GUI와 함께 쓰면 약간 느리지만 cli만 쓰는 기준으로는 이전에 쓰던 graphite보다는 훨씬 빠르다.

처음 사용했을 때에는 git과 다른 시스템에 적응하는데 시간이 걸렸다. 실수로 main branch로 push를 시도하기도 하고 pull을 당겨온 후 업데이트가 적용되지 않아 헤매기도 했다. 하지만 1주일 정도 사용해 보니 어느 정도 익숙해졌고, 은근 편리하다는 것을 깨달았다. Stacking 측면에서는 Graphite를 충분히 대체할 수 있다고 판단했다.

다만 단점 중 vscode와의 연동은 크리티컬한 것 같다. 이는 쉽게 해결될 문제는 아닌 듯 하다.

'git' 카테고리의 다른 글

git flow vs github flow  (0) 2024.01.27
graphite 사용기  (2) 2023.10.23
[TIL] Git Server  (0) 2022.05.15
Git 내부 동작 방식 알아보기  (0) 2022.05.07