7P by xguru 2022-01-21 | favorite | 댓글 3개

- 패치 이론을 기반으로 하면서도 속도가 빠르고 확장 가능
- Commutation
ㅤ→ 각각의 변경들이 버전id를 바꾸지 않으면서 순서 상관없이 적용 가능
ㅤ→ git rebase 나 hg transplant 보다 훨씬 간단한 워크플로우
ㅤ→ branch 와 비슷한 channels 기능이 있지만 다른 시스템에서 처럼 중요한 것은 아님. 예를 들어 feature 브랜치는 Pijul 에선 그냥 변경임
ㅤ→ 히스토리를 깔끔하게 유지하는게 기본 설정
- Merge correctness
ㅤ→ Pijul은 Merge 시에 몇가지를 보장
ㅤ→ 가장 중요한 것은 라인의 순서가 항상 유지 된다는 것. 가끔 라인이 뒤섞이는 3way 머지와 다름
ㅤ→ 순서를 알 수 없는 경우(동시 편집하는 경우처럼) Conflict가 되며, "Automatic" 또는 "No Conflict" 가 되는 시스템과의 차이점
- First-class conflicts
ㅤ→ Pijul에서 Conflict는 "머지 실패"가 아니라 표준 사례로 모델링 됨
ㅤ→ 특히, 두 변경간에 발생하는 Conflict는 하나의 변경 으로 해결 됨
- Partial Clones
ㅤ→ Commutation을 이용하면 저장소의 작은 하위 집합만 복제 가능. 실제로 그 하위 집합에 대한 변경들만 적용하는 것도 가능
ㅤ→ Partial Clone에 대한 작업은 대규모 저장소에 쉽게 보낼수 있는 Changes를 생성함

Git 솔직히 현업에서 표준이라 쓰긴하지만 굉장히 불편했음 ㅡㅡ Rust기반 피줄로 조금씩 갈아타야할때임

svn과 git 의 (분산저장소라는걸 빼고) 가장 큰 차이가 svn은 diff 를 관리하는데 반해 git은 스냅샷을 관리한다는 점인데 패치 이론이라고 하니 왠지 diff를 관리하는 쪽일 것 같다는 생각이 드네요.

패치 이론(Theory of Patches)는 분산 버전 관리시스템인 Darcs 에서 보시면 됩니다.
- https://en.wikibooks.org/wiki/Understanding_Darcs/Patch_theory

Darcs 와 Git 을 비교할때 이렇게 설명합니다.
A set of changes that you record in Git is called a “commit”, while in Darcs it is called a “patch”.

- http://darcs.net/DifferencesFromGit