diff --git a/doc/history/2026-09-14-6차.md b/doc/history/2026-09-14-6차.md index 98274cf..9148c84 100644 --- a/doc/history/2026-09-14-6차.md +++ b/doc/history/2026-09-14-6차.md @@ -833,3 +833,47 @@ Allman 은 모두 새 줄(Visual Studio 기본값과 같다). 처음에는 Defau - **A-2 · B-2** — 목록을 다시 세울 때 빈 목록으로 갈아엎지 않고, 실린 파일을 기준으로 다룬다. 코드 변경 없음. 흐름 ② 는 D-1(처음부터 다시 끝까지)에서 한 번 더 본다. + +## C-1. 로그와 목록 다듬기 (2026-09-14, 완료) + +### 고치기 전에 다시 났다 (새로 만든 저장소를 MergeHub 로 병합) + +| 확인 | 결과 | +|---|---| +| 병합 로그 | "충돌 26건 - 해결이 필요합니다." **두 번**. 두 번째는 머지 주석 자동 해결 줄들 **뒤에** 다시 나와 순서도 헷갈림 | +| 충돌 탭 목록 표시 | 24줄 중 표시가 붙은 것은 `Recipe/ToBeDeleted.cs · 상대쪽 삭제` 하나. `Ui/Views/NewPanel.cs`(양쪽 새 파일) · `Recipe/ToBeDeletedByMe.cs`(내가 삭제)는 표시 없음 | +| 푼 개수 | 어디에도 없음 | +| CP949 로그 이름 | `충돌 해결(직접 편집, CP949 · CRLF): Common/Util/한글설명.cs` — **이미 CP949**. A-1 에서 로그 문장을 `TextFile.Describe` 로 바꾸며 없어졌다. 이 항목은 확인만 | + +### 무엇이 원인이었나 + +- `GitService` 가 결과 문장을 로그에 적고(`Report` → `Progress`), 병합 · revert · cherry-pick · rebase · pull 명령이 **같은 문장을 한 번 더** 적었다. +- 목록 템플릿에는 "이진" 과 "상대쪽 삭제" 두 표시만 있었다. +- 병합에서 처음 몇 개가 충돌했는지 남기는 곳이 없었다. + +### 고친 것 + +| 파일 | 무엇 | +|---|---| +| `ViewModels/GitViewModel.cs` | 병합 · revert · cherry-pick · rebase 시작 · rebase 계속 · pull 에서 결과 문장을 다시 적지 않는다 | +| `Services/GitService.cs` | 추적 브랜치가 없어 pull 을 못 할 때도 로그에 적는다(이 길만 서비스가 안 적었다). 병합에서 충돌이 나면 처음 충돌 목록을 `.git/MERGEHUB_CONFLICTS`(첫 줄 MERGE_HEAD)에 적고, `GetMergeConflictTotal` 로 읽는다. MERGE_HEAD 가 다르면 다른 병합의 것이라 쓰지 않는다 | +| `Models/GitModels.cs` | `ConflictInfo.KindLabel` — 양쪽 수정 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일(이진이면 " · 이진"), `IsDeletion` | +| `Views/GitView.xaml` | 목록 줄마다 종류(한쪽 삭제는 경고 색, 이진은 위험 색). 목록 위에 진행 한 줄 | +| `Services/GitWorkspace.cs` | `ConflictProgressText` — "남은 충돌 N개 · 푼 것 M개 (M/전체)", 다 풀면 "충돌 정리 끝 · 푼 것 M개 - 병합 커밋을 할 수 있습니다". 처음 수를 모르면(MergeHub 밖에서 시작한 병합) 남은 수만 | + +처음에는 푼 개수를 git 인덱스의 해결 기록(REUC)으로 셌다. 확인해 보니 libgit2 가 **저절로 병합된 파일 7개**도 거기 남겨 병합 직후 "푼 것 9개 (9/33)" 로 틀리게 나왔다. 그래서 병합할 때 처음 목록을 적어 두는 쪽으로 바꿨다. + +### 확인한 것 + +| 확인 | 결과 | +|---|---| +| 병합 로그 | "해결이 필요합니다" **한 번**. 그 뒤로 자동 해결 두 줄과 "자동으로 풀었습니다. 남은 충돌 24건." | +| 기록 파일 | 경로 26개 | +| 목록 종류 | 양쪽 수정 21 · 상대 삭제 1(`Recipe/ToBeDeleted.cs`) · 내가 삭제 1(`Recipe/ToBeDeletedByMe.cs`) · 양쪽 새 파일 1(`Ui/Views/NewPanel.cs`) | +| 병합 직후 진행 줄 | **남은 충돌 24개 · 푼 것 2개 (2/26)** — 머지 주석만 다른 2개가 스스로 풀림 | +| 같은 줄 충돌 15개 Accept Mine | 남은 충돌 9개 · 푼 것 17개 (17/26) | +| 앱을 다시 켠 뒤 | 남은 충돌 9개 · 푼 것 17개 (17/26) — 이어짐 | +| 남은 9개 Accept Mine | 충돌 정리 끝 · 푼 것 26개 - 병합 커밋을 할 수 있습니다 | +| 병합 전 | 진행 줄 없음 | + +FolderTest 62 · ReportTest 31 · GitOpTest 36 건 통과(`GitModels.cs` 를 함께 컴파일). 빌드 경고 0 · 오류 0. diff --git a/doc/history/changelog.md b/doc/history/changelog.md index ac97c02..e02bd6a 100644 --- a/doc/history/changelog.md +++ b/doc/history/changelog.md @@ -8,6 +8,7 @@ | 날짜 | 항목 | 커밋 | |---|---|---| +| 2026-09-14 | **6차 C-1** — 병합 · revert · cherry-pick · rebase · pull 결과가 로그에 두 번 찍히던 것을 한 번으로. 충돌 탭 목록에 종류(양쪽 수정 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일)와 "남은 충돌 N개 · 푼 것 M개 (M/전체)". 처음 충돌 목록을 .git 에 적어 두어 앱을 다시 켜도 이어짐 | 아래 | | 2026-09-14 | **6차 B-8 닫음** — 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남던 증상이 다시 나지 않음. Git 으로 풀고 커밋 · 탭에서 마지막 충돌을 풀고 커밋 두 흐름 모두 목록 304 · 두 칸 · 선택 커밋 = 병합 커밋. B-1 · A-3 에서 없어진 것으로 봄 | 아래 | | 2026-09-14 | **6차 B-7** — 병합 중 상태바 인코딩 · 줄바꿈을 충돌 표시가 든 워킹트리가 아니라 내 쪽(ours) 파일로("UTF-8 · 혼합" → "UTF-8 (BOM) · CRLF"). 네 칸 요약을 "남은 충돌 N개 · 받을 변경 M줄" 로, 범례 수를 먼저 세어 한 박자 늦던 것도 고침 | 아래 | | 2026-09-14 | **E-1 C# 코드 스타일 맞춤** — AURORA(형식 · 메서드만 새 줄, `} else {`) / Allman(모두 새 줄)로 중괄호 줄바꿈을 맞춘 뒤 비교. 두 칸 · 네 칸 · mergetool · 폴더 비교, 설정. 스타일만 바뀐 편집은 파일을 바꿀 때 묻지 않음. StyleTest 78건 | 아래 | diff --git a/doc/web/index.html b/doc/web/index.html index 6b9230c..79975bf 100644 --- a/doc/web/index.html +++ b/doc/web/index.html @@ -257,7 +257,7 @@ figcaption{font-size:.82rem;color:var(--ink-3);margin-top:6px}
6차 지시서의 남은 두 항목과 일부러 미뤄 둔 것. 6차 규칙대로 C → D 순서로 간다.
+6차 지시서의 마지막 항목(D-1)과 일부러 미뤄 둔 것.
15개 항목 중 A 다섯 · B 여덟이 끝났다(B-8 은 다시 나지 않아 코드 변경 없이 닫음 ·B-6: 같은 줄 충돌 15개 22.0초 → 1.2초 · B-7: 병합 중 상태바가 내 쪽 파일 기준, 남은 충돌 수). 남은 것은 아래 순서다.
+15개 항목 중 A 다섯 · B 여덟 · C-1 이 끝났다(C-1: 로그 한 번 · 충돌 종류 · 푼 개수 ·B-8 은 다시 나지 않아 코드 변경 없이 닫음 ·B-6: 같은 줄 충돌 15개 22.0초 → 1.2초 · B-7: 병합 중 상태바가 내 쪽 파일 기준, 남은 충돌 수). 남은 것은 아래 순서다.
| 항목 | 상태 | 무엇이 문제인가 | 끝났다고 볼 기준 |
|---|---|---|---|
| B-7 상태바가 병합 중에 믿을 수 없는 값을 보인다 | 완료 | 인코딩 · 줄바꿈을 충돌 표시가 들어간 워킹트리 파일에서 읽어, 양쪽 CRLF 인 파일도 “UTF-8 · 혼합”. “남은 차이 6줄” 이 충돌을 다 정해도 그대로. | 병합 중 상태바 인코딩 · 줄바꿈이 ours 기준. 상태바에 남은 충돌 수가 나오고 풀면 준다. |
| B-8 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남는다 | 완료 | 목록이 비고, 병합과 상관없는 파일이 BASE 칸에만 뜨고 언어는 “평문”. | 병합 커밋이 끝나면 병합 전과 같은 보통 상태(선택 커밋 = 방금 만든 병합 커밋). |
| C-1 로그와 목록 다듬기 | 대기 | “충돌 22건” 로그가 두 번. 충돌 종류 표시가 들쭉날쭉(상대쪽 삭제만). 풀린 개수 없음. 로그가 CP949 를 “ks_c_5601-1987” 로 적음. | 로그 한 번. 종류(양쪽 수정 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일)와 풀린 개수. 인코딩 이름이 상태바와 같음. |
| C-1 로그와 목록 다듬기 | 완료 | “충돌 22건” 로그가 두 번. 충돌 종류 표시가 들쭉날쭉(상대쪽 삭제만). 풀린 개수 없음. 로그가 CP949 를 “ks_c_5601-1987” 로 적음. | 로그 한 번. 종류(양쪽 수정 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일)와 풀린 개수. 인코딩 이름이 상태바와 같음. |
| D-1 병합을 처음부터 다시 끝까지 | 대기 | A ~ C 를 고친 뒤 시험 저장소(C1Repo)를 새로 만들어 같은 병합을 다시 한다. 5차 C-1 과 같은 표로 23가지 중 무엇이 사라졌는지 적는다. | MergeHub 만으로 병합 커밋까지. 커밋된 파일 중 줄끝이 바탕과 달라진 파일 0개. A 다섯 가지가 다시 나지 않는다. 새로 걸린 것은 고치지 말고 적어 7차로. |
demo\make-demo.ps1 — 폴더 비교 · 스타일 · mergetool · 큰 파일 · 병합 저장소