그동안(10+년;;) git이 엄청 잘만든 물건 같지는 않다고 생각하며 대충 쓰고있었는데, 요즘 branch 개념 자체가 근본적인 실수란 생각이 들기 시작했다. branch 대신에 변경의 시작과 끝, 양 끝점을 가지는 interval을 쓰는게 맞는거 같다(카테고리 이론의 작은 교훈: primitive는 양 끝점을 가지는게 좋다).

git을 쓰면 히스토리 길어진다고 squash merge 등을 하는데, (나도 하지만) 사실 기껏 만들어놓은 히스토리를 뭉개버리는 말도 안되는 동작이다. 만약 interval을 쓴다면 히스토리는 그대로 남기고 UI 단에서 fold/unfold 등을 해줄수 있을 것이다.

Darcs 등이 interval에 기초하는데, 지금은 일이 너무 바빠서 시도할 여유가 없다. 한번 숨고를 시간이 주어지면 멀쩡한 VCS를 탐색하는 시간을 가질것이다.

1

If you have a fediverse account, you can reply to this note from your own instance. Search https://hackers.pub/ap/notes/0195bda7-f18d-72eb-8933-81e819715410 on your instance and reply to it.

@bglbgl gwyng 저는 Darcs를 하스켈에 대한 빠심(?) 하나로 최근 써보고 있습니다. 마침 기여하고 싶은 패키지[1]의 저장소도 hub.darcs.net이기도 했고요.

Darcs 쓰면서 편한 점은 이미 추적(?)을 결정한 파일은 변경 사항을 커밋할 때 다시 add 하지 않아도 되고 바로 커밋[2]할 수 있다는 것입니다.

또 하나 편한 점은 파일에 여러 변경 사항이 혼재되어 있을 때 커밋을 나눠서 할 수 있다는 것입니다. 이건 제가 글재주가 부족해서 말로 설명하기 어려운데, 여러 변경 사항에 대해서 커밋을 시도할 경우 대화형으로 커밋 여부를 물어보는데 이때 원하는 변경 사항만 골라서 커밋을 하면 됩니다.

GHC[3]의 저장소가 현재는 GitLab이지만 과거에는 Darcs였었죠. 성능 이슈 때문에 이전했다고 하는데 지금은 문제가 해결됐는지 궁금하네요.


  1. https://hackage.haskell.org/package/webfinger-client ↩︎

  2. Darcs에서는 커밋에 해당하는 명령어가 레코드(record)이다. ↩︎

  3. 하스켈 컴파일러 ↩︎