지시서 6차 B-5: 머지 주석은 넣고 병합 뒤에는 무시한다

사용자가 정했다. 누가 언제 반영했는지는 소스에 남아야 하므로 머지
주석은 지금처럼 넣는다. 대신 비교하고 병합할 때는 그 줄을 무시한다.

git 은 이 규칙을 모른다. 병합은 주석 줄도 글자로 보고 충돌을 낸다.
그래서 무시는 MergeHub 가 한다.
- 2-Way, 3-Way, 폴더 비교에서 머지 주석을 차이로 세지 않는다
- 줄 끝에 붙은 주석은 조각만 떼고 견준다
- git 이 낸 충돌이 주석 차이뿐이면 묻지 않고 풀고, 두 주석을 다 남긴다
- 무시는 보는 방식일 뿐 파일에서 지우지 않는다. 설정에서 끌 수 있다

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
김승준 2026-09-14 09:38:29 +09:00
parent ca634a9730
commit 99a5d10775
3 changed files with 23 additions and 7 deletions

View File

@ -8,6 +8,7 @@
| 날짜 | 항목 | 커밋 | | 날짜 | 항목 | 커밋 |
|---|---|---| |---|---|---|
| 2026-09-14 | **지시서 6차 B-5 정함** — 머지 주석은 소스에 넣고, 비교·병합에서는 그 줄을 무시한다. git 은 모르므로 주석 차이뿐인 충돌은 MergeHub 가 푼다 | 아래 |
| 2026-09-14 | **지시서 6차** — 5차 C-1 에서 걸린 23가지를 A(망가뜨리는 것 5) · B(헷갈리는 것 8) · C(사소 1) · D(다시 끝까지)로 묶음 | 아래 | | 2026-09-14 | **지시서 6차** — 5차 C-1 에서 걸린 23가지를 A(망가뜨리는 것 5) · B(헷갈리는 것 8) · C(사소 1) · D(다시 끝까지)로 묶음 | 아래 |
| 2026-09-14 | **5차 C-1** — 만든 저장소(303개 · 충돌 22)로 병합을 MergeHub 만으로 커밋까지 해 봄. 고치지 않고 걸린 것 23가지를 적음. 가장 큰 것은 3분할 저장이 CRLF 를 LF 로 바꾸는 것 | 아래 | | 2026-09-14 | **5차 C-1** — 만든 저장소(303개 · 충돌 22)로 병합을 MergeHub 만으로 커밋까지 해 봄. 고치지 않고 걸린 것 23가지를 적음. 가장 큰 것은 3분할 저장이 CRLF 를 LF 로 바꾸는 것 | 아래 |
| 2026-09-11 | **5차 B-2** — 폴더 비교를 훑기·가리기·세기 세 걸음으로 나눔. 메타데이터를 한 번만 묻고 가리는 일은 여러 갈래로. 전체 3.4배 · 빠른 4.7배 | 아래 | | 2026-09-11 | **5차 B-2** — 폴더 비교를 훑기·가리기·세기 세 걸음으로 나눔. 메타데이터를 한 번만 묻고 가리는 일은 여러 갈래로. 전체 3.4배 · 빠른 4.7배 | 아래 |

View File

@ -136,14 +136,29 @@ C-1 에서 "심각" 으로 적은 다섯 가지다. **A-1 · A-2 는 뿌리가
- **판정 기준**: `Motion/Unit0.cs`(3,367줄)를 열었을 때 네 칸 모두 끝 줄 번호까지 온전히 보인다. - **판정 기준**: `Motion/Unit0.cs`(3,367줄)를 열었을 때 네 칸 모두 끝 줄 번호까지 온전히 보인다.
7,479줄(실제 소스 최대 크기)짜리 만든 파일로도 확인한다. 7,479줄(실제 소스 최대 크기)짜리 만든 파일로도 확인한다.
### B-5. 병합 결과에 머지 주석이 들어간다 — 정할 것 ### B-5. 머지 주석은 소스에 넣고, 병합 뒤에는 그 줄을 무시한다
- Take Theirs 한 자리마다 "// [김승준] 2026-09-14" 가 소스에 들어갔다(설정 `병합 주석 넣기` 가 켜져 있음). **정한 것 (2026-09-14, 사용자)** — 머지 주석은 지금처럼 **소스에 넣는다.** 누가 언제 반영했는지는 소스에 남아야 한다.
병합 결과에 **사람이 고르지 않은 줄**이 생기고, 다음 병합 때 그 줄끼리 또 충돌한다. 대신 **비교하고 병합할 때는 그 줄을 무시한다.**
- 이 기능은 4차 A-2 에서 "이력 관리" 를 위해 넣었다. **병합 충돌을 풀 때도 넣을지는 사용자가 정한다.**
작업 전에 물어보고 정한 대로 한다. 기본 제안은 "충돌 해결에서는 넣지 않는다 — 누가 풀었는지는 병합 커밋 작성자가 말해 준다".
- **판정 기준**: 정한 대로 동작하고, 그 까닭이 설정 설명에 적혀 있다.
- 지금의 문제: Take Theirs 한 자리마다 "// [김승준] 2026-09-14" 가 들어갔다. 다음 병합 때 양쪽이 서로 다른 주석을
같은 자리에 달고 있으면 **그 주석 줄끼리 충돌**하고, 비교 화면에는 주석 줄이 차이로 잡힌다.
- **git 은 이 규칙을 모른다.** 병합(libgit2)은 주석 줄도 글자로 보고 충돌을 낸다. 그러므로 무시는 MergeHub 가 한다.
1. **비교 화면(2-Way · 3-Way · 폴더 비교)** 에서 머지 주석을 차이로 세지 않는다.
알아보는 함수는 이미 있다(`MergeNote.LooksLikeNote`). 지금은 2-Way 의 줄 필터만 규칙을 받고 3-Way 정렬(`ThreeWayAligner`)은 규칙을 안 받는다.
2. **줄 끝에 붙은 주석**(`코드 // [이름] 날짜`)도 있다(`MergeNote.Append`). 이 경우는 줄을 통째로 버리지 말고
**주석 조각만 떼고** 견준다. 코드가 같고 주석만 다르면 같은 줄이다.
3. **git 이 낸 충돌이 머지 주석 차이뿐이면** 사람에게 묻지 않고 MergeHub 가 푼다. 양쪽 주석을 모두 남기는 쪽으로 푼다
(이력은 지우지 않는다). 충돌 수에도 세지 않는다.
4. 무시는 **보는 방식**이다. 파일에서 주석을 지우지 않는다. 설정에서 끌 수 있고, 끄면 지금처럼 차이로 보인다.
- 사람이 우연히 같은 모양(`// [글자] 0000-00-00`)으로 쓴 주석도 무시된다. 이 한계는 설정 설명에 적는다.
- **판정 기준**
- 만든 저장소에서 양쪽 브랜치가 같은 코드 줄 위에 **서로 다른 머지 주석만** 달고 병합하면,
git 은 충돌을 내지만 MergeHub 는 그 파일을 "충돌 0" 으로 보고 한 번에 풀린다. 두 주석이 다 남는다.
- 코드도 다르고 주석도 다르면 **코드 충돌만** 묻는다.
- 줄 끝 주석만 다른 줄은 비교 화면에서 같은 줄로 나온다.
- 설정을 끄면 지금처럼 차이·충돌로 보인다.
- 생성기(`C1Repo`)에 이 경우들을 넣어 D-1 에서도 확인한다.
### B-6. 충돌 탭에서 하나씩 누를 때마다 오래 기다린다 ### B-6. 충돌 탭에서 하나씩 누를 때마다 오래 기다린다
- Accept 한 번마다 **저장소 전체를 다시 읽는다.** 한 개 약 1.7초. 22개면 기다리는 것만 40초쯤이다. - Accept 한 번마다 **저장소 전체를 다시 읽는다.** 한 개 약 1.7초. 22개면 기다리는 것만 40초쯤이다.

View File

@ -106,7 +106,7 @@
| 대기 | B-2 확인 창이 엉뚱한 파일 이름을 댄다 | | 대기 | B-2 확인 창이 엉뚱한 파일 이름을 댄다 |
| 대기 | B-3 커밋 메시지가 엉뚱하게 남는다 | | 대기 | B-3 커밋 메시지가 엉뚱하게 남는다 |
| 대기 | B-4 MERGED 칸 줄 번호가 네 자리에서 잘린다 | | 대기 | B-4 MERGED 칸 줄 번호가 네 자리에서 잘린다 |
| 대기 | B-5 병합 결과에 머지 주석이 들어간다 — 정할 것 | | 대기 | B-5 머지 주석은 소스에 넣고, 병합 뒤에는 그 줄을 무시한다 |
| 대기 | B-6 충돌 탭에서 하나씩 누를 때마다 오래 기다린다 | | 대기 | B-6 충돌 탭에서 하나씩 누를 때마다 오래 기다린다 |
| 대기 | B-7 상태바가 병합 중에 믿을 수 없는 값을 보인다 | | 대기 | B-7 상태바가 병합 중에 믿을 수 없는 값을 보인다 |
| 대기 | B-8 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남는다 | | 대기 | B-8 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남는다 |