7차 지시서 · E-1: 병합 중 [해결로 저장] 단추를 [Save] 로
LOCAL 칸을 이 파일에만 쓰고 스테이징하는 단추라 Save & Commit 과 짝이 되게 이름만 바꿈. 알림 · 막힘 안내 · 웹 문서도 Save. 하는 일은 그대로(충돌 24 → 23, 커밋 없음 확인). 7차 지시서: 6차 D-1 에서 걸린 세 가지(마지막 저장 뒤 남은 차이 · 로그 3-Way 안 씀 · 기록 파일 남음)와 pull · rebase · cherry-pick 충돌. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
389cd3a650
commit
26d9d042bf
32
doc/history/2026-09-14-7차.md
Normal file
32
doc/history/2026-09-14-7차.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# 7차 — 병합 화면이 사실대로 말하게 · 병합 말고 다른 충돌 길 (2026-09-14 ~)
|
||||||
|
|
||||||
|
지시서: [../작업지시/7차.md](../작업지시/7차.md). 6차 D-1 에서 새로 걸린 세 가지와 6차에서 뺀 pull · rebase · cherry-pick 충돌.
|
||||||
|
|
||||||
|
## E-1. [해결로 저장] 이름을 [Save] 로 (2026-09-14, 추가 요청, 완료)
|
||||||
|
|
||||||
|
사용자: "해결로 저장은 LOCAL SAVE 버튼이잖아? 그냥 Save 로 이름 바꿔주고".
|
||||||
|
병합 중에만 보이는 그 단추는 LOCAL 칸 내용을 이 파일에만 쓰고 스테이징한다. 바로 아래 Save & Commit 과 짝이 되게 이름만 바꿨다. 하는 일은 그대로다.
|
||||||
|
|
||||||
|
### 바꾼 것
|
||||||
|
|
||||||
|
| 파일 | 무엇 |
|
||||||
|
|---|---|
|
||||||
|
| `Views/HomeView.xaml` | 단추 글자 `해결로 저장` → `Save` (툴팁 "이 파일만 풀어서 저장하고 스테이징합니다. 커밋은 하지 않습니다 (Ctrl+S)" 그대로) |
|
||||||
|
| `ViewModels/HomeViewModel.cs` | 작업 이름(`RunAsync`) · 알림 `Save · 파일 · 남은 충돌 N건` / `… 남은 충돌 없음 - 이제 커밋할 수 있습니다` |
|
||||||
|
| `Services/MergeSavePlan.cs` | Save & Commit 이 막힐 때 안내 "[Save] 로 이 파일만 저장해 두고 …" |
|
||||||
|
| `doc/web/index.html` | 매뉴얼 · 단축키 · 한계 · 시연 대본 · 비교표의 이름 |
|
||||||
|
|
||||||
|
지난 기록(history · 6차 지시서)은 그때 이름 그대로 두었다. 코드 주석의 옛 이름도 그 시점 설명이라 두었다.
|
||||||
|
|
||||||
|
### 확인한 것 (새로 만든 저장소, MergeHub 로 병합한 뒤)
|
||||||
|
|
||||||
|
| 확인 | 결과 |
|
||||||
|
|---|---|
|
||||||
|
| 병합 중 네 칸의 단추 | **Save** · 옆에 Save & Commit. "해결로 저장" 단추 없음 · 화면 전체 글자에도 없음 |
|
||||||
|
| `Io/Unit12.cs` 충돌 1개 Take Theirs → [Save] | 알림 **"Save · Unit12.cs · 남은 충돌 23건"**. git 충돌 24 → 23, 파일 `M ` 스테이징, HEAD 그대로(커밋 없음) |
|
||||||
|
| 저장 뒤 | 남은 충돌 첫 파일(`Common/Util/Unit15.cs`)이 네 칸으로 열림 |
|
||||||
|
|
||||||
|
하네스는 이 두 파일(`HomeViewModel.cs` · `MergeSavePlan.cs`)을 컴파일하지 않고 글자를 보는 검사도 없어 그대로(22벌 948건). 빌드 경고 0 · 오류 0.
|
||||||
|
설정 파일은 백업 → `CSharpBraceStyle` 끔 → 시험 → 바이트 그대로 되돌림(해시 같음).
|
||||||
|
|
||||||
|
(자동 조작 쪽: 앱을 새로 켠 뒤에는 충돌 목록에 고른 것이 없어 [3분할로 열기] 가 아무것도 안 열었다. 목록에서 파일을 고르고 다시 했다.)
|
||||||
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
| 날짜 | 항목 | 커밋 |
|
| 날짜 | 항목 | 커밋 |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
|
| 2026-09-14 | **7차 지시서 · E-1** — 6차 D-1 에서 걸린 세 가지와 pull · rebase · cherry-pick 충돌로 7차 지시서를 씀. 병합 중 [해결로 저장] 단추를 [Save] 로(LOCAL 저장 단추라 Save & Commit 과 짝). 하는 일 그대로, 알림 · 막힘 안내 · 웹 문서 이름도 | 아래 |
|
||||||
| 2026-09-14 | **6차 D-1** — 새로 만든 저장소를 MergeHub 만으로 처음부터 병합 커밋까지(충돌 26 · 자동 2 · 파일 단위 15 · 3분할 7 · 지우기/남기기 2). 줄끝 · BOM 이 바뀐 파일 0/33, 표식 0. 5차 C-1 의 23가지 중 사라짐 18. 새로 걸린 3가지는 7차로. 코드 변경 없음 | 아래 |
|
| 2026-09-14 | **6차 D-1** — 새로 만든 저장소를 MergeHub 만으로 처음부터 병합 커밋까지(충돌 26 · 자동 2 · 파일 단위 15 · 3분할 7 · 지우기/남기기 2). 줄끝 · BOM 이 바뀐 파일 0/33, 표식 0. 5차 C-1 의 23가지 중 사라짐 18. 새로 걸린 3가지는 7차로. 코드 변경 없음 | 아래 |
|
||||||
| 2026-09-14 | **6차 C-1** — 병합 · revert · cherry-pick · rebase · pull 결과가 로그에 두 번 찍히던 것을 한 번으로. 충돌 탭 목록에 종류(양쪽 수정 · 상대 삭제 · 내가 삭제 · 양쪽 새 파일)와 "남은 충돌 N개 · 푼 것 M개 (M/전체)". 처음 충돌 목록을 .git 에 적어 두어 앱을 다시 켜도 이어짐 | 아래 |
|
| 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-8 닫음** — 병합 커밋 뒤 파일 비교 탭이 어정쩡하게 남던 증상이 다시 나지 않음. Git 으로 풀고 커밋 · 탭에서 마지막 충돌을 풀고 커밋 두 흐름 모두 목록 304 · 두 칸 · 선택 커밋 = 병합 커밋. B-1 · A-3 에서 없어진 것으로 봄 | 아래 |
|
||||||
|
|||||||
@ -470,12 +470,12 @@ UbisamBase.Shell.exe <span class="k">--merge --base</span> B.cs <span class="k">
|
|||||||
<li>알림이 충돌 수를 말한다. 머지 주석만 다른 충돌은 이때 저절로 풀린다 — 예: “충돌 24건 (머지 주석만 다른 2건은 자동으로 풀림)”.</li>
|
<li>알림이 충돌 수를 말한다. 머지 주석만 다른 충돌은 이때 저절로 풀린다 — 예: “충돌 24건 (머지 주석만 다른 2건은 자동으로 풀림)”.</li>
|
||||||
<li><b>충돌</b> 탭 목록에서 파일을 두 번 누르거나 <kbd>Enter</kbd>, 또는 <span class="btn-label">3분할로 열기</span>. 파일 비교 탭에 네 칸으로 열린다.</li>
|
<li><b>충돌</b> 탭 목록에서 파일을 두 번 누르거나 <kbd>Enter</kbd>, 또는 <span class="btn-label">3분할로 열기</span>. 파일 비교 탭에 네 칸으로 열린다.</li>
|
||||||
<li><span class="btn-label">자동 병합</span> 으로 저쪽만 고친 줄을 받고, <span class="btn-label">다음 충돌</span> 으로 딛으며 <span class="btn-label">Take Mine</span> / <span class="btn-label">Take Theirs</span> 를 고르거나 MERGED 를 직접 고친다.</li>
|
<li><span class="btn-label">자동 병합</span> 으로 저쪽만 고친 줄을 받고, <span class="btn-label">다음 충돌</span> 으로 딛으며 <span class="btn-label">Take Mine</span> / <span class="btn-label">Take Theirs</span> 를 고르거나 MERGED 를 직접 고친다.</li>
|
||||||
<li><span class="btn-label">해결로 저장</span> (<kbd>Ctrl</kbd>+<kbd>S</kbd>) — 이 파일만 쓰고 스테이징한다. 커밋은 안 한다. 줄끝 · 인코딩은 내 쪽(ours) 파일을 따른다.</li>
|
<li><span class="btn-label">Save</span> (<kbd>Ctrl</kbd>+<kbd>S</kbd>) — 이 파일만 쓰고 스테이징한다. 커밋은 안 한다. 줄끝 · 인코딩은 내 쪽(ours) 파일을 따른다.</li>
|
||||||
<li>한쪽이 지운 파일은 네 칸 대신 두 칸과 띠가 나온다. <span class="btn-label">파일 남기기</span> 또는 <span class="btn-label">파일 지우기</span>.</li>
|
<li>한쪽이 지운 파일은 네 칸 대신 두 칸과 띠가 나온다. <span class="btn-label">파일 남기기</span> 또는 <span class="btn-label">파일 지우기</span>.</li>
|
||||||
<li>줄마다 볼 필요가 없는 파일은 충돌 탭에서 <span class="btn-label">Accept Mine</span> / <span class="btn-label">Accept Theirs</span>. 여러 파일을 <kbd>Ctrl</kbd>/<kbd>Shift</kbd> 클릭(<kbd>Ctrl</kbd>+<kbd>A</kbd> 전부)으로 골라 한 번에 적용한다 — 단추 옆에 “N개 고름” 이 뜨고, 저장소 다시 읽기는 끝에 한 번이다. <span class="btn-label">Accept Both</span> 는 두 파일을 통째로 이어 붙이므로 누르면 먼저 묻는다.</li>
|
<li>줄마다 볼 필요가 없는 파일은 충돌 탭에서 <span class="btn-label">Accept Mine</span> / <span class="btn-label">Accept Theirs</span>. 여러 파일을 <kbd>Ctrl</kbd>/<kbd>Shift</kbd> 클릭(<kbd>Ctrl</kbd>+<kbd>A</kbd> 전부)으로 골라 한 번에 적용한다 — 단추 옆에 “N개 고름” 이 뜨고, 저장소 다시 읽기는 끝에 한 번이다. <span class="btn-label">Accept Both</span> 는 두 파일을 통째로 이어 붙이므로 누르면 먼저 묻는다.</li>
|
||||||
<li>남은 충돌이 0 이 되면 <span class="btn-label">병합 커밋</span>. 메시지 기본값은 <code>Merge branch '상대' into 내 브랜치</code> 이고 git 의 <code>#</code> 줄은 빠진다.</li>
|
<li>남은 충돌이 0 이 되면 <span class="btn-label">병합 커밋</span>. 메시지 기본값은 <code>Merge branch '상대' into 내 브랜치</code> 이고 git 의 <code>#</code> 줄은 빠진다.</li>
|
||||||
</ol>
|
</ol>
|
||||||
<div class="callout warn"><p>남은 충돌이 있는데 <span class="btn-label">Save & Commit</span> 을 누르면 아무것도 쓰지 않고 막는다. 병합 중에는 파일 단위로 <span class="btn-label">해결로 저장</span> 을 쓴다.</p></div>
|
<div class="callout warn"><p>남은 충돌이 있는데 <span class="btn-label">Save & Commit</span> 을 누르면 아무것도 쓰지 않고 막는다. 병합 중에는 파일 단위로 <span class="btn-label">Save</span> 를 쓴다.</p></div>
|
||||||
|
|
||||||
<h2 id="m-note">머지 주석</h2>
|
<h2 id="m-note">머지 주석</h2>
|
||||||
<p>줄을 반영하면 그 줄 바로 위에 <code>// [이름] 날짜</code> 한 줄이 들어간다(들여쓰기는 코드를 따른다). 같은 줄을 다시 반영하면 새 주석이 코드 바로 위에 붙고 앞 주석은 위로 밀린다. 누가 언제 반영했는지 소스에 남기 위해서다.</p>
|
<p>줄을 반영하면 그 줄 바로 위에 <code>// [이름] 날짜</code> 한 줄이 들어간다(들여쓰기는 코드를 따른다). 같은 줄을 다시 반영하면 새 주석이 코드 바로 위에 붙고 앞 주석은 위로 밀린다. 누가 언제 반영했는지 소스에 남기 위해서다.</p>
|
||||||
@ -504,7 +504,7 @@ UbisamBase.Shell.exe <span class="k">--merge --base</span> B.cs <span class="k">
|
|||||||
<tr><td></td><td><kbd>Ctrl</kbd>+<kbd>PageUp</kbd> / <kbd>PageDown</kbd></td><td>폴더 비교 목록의 앞 / 다음 파일</td></tr>
|
<tr><td></td><td><kbd>Ctrl</kbd>+<kbd>PageUp</kbd> / <kbd>PageDown</kbd></td><td>폴더 비교 목록의 앞 / 다음 파일</td></tr>
|
||||||
<tr><td>파일 · 보기</td><td><kbd>Ctrl</kbd>+<kbd>D</kbd></td><td>폴더 비교 탭으로 (새 창이 아니라 탭)</td></tr>
|
<tr><td>파일 · 보기</td><td><kbd>Ctrl</kbd>+<kbd>D</kbd></td><td>폴더 비교 탭으로 (새 창이 아니라 탭)</td></tr>
|
||||||
<tr><td></td><td><kbd>F5</kbd> · <kbd>Ctrl</kbd>+<kbd>R</kbd></td><td>다시 비교</td></tr>
|
<tr><td></td><td><kbd>F5</kbd> · <kbd>Ctrl</kbd>+<kbd>R</kbd></td><td>다시 비교</td></tr>
|
||||||
<tr><td></td><td><kbd>Ctrl</kbd>+<kbd>S</kbd></td><td>저장 (병합 중에는 해결로 저장)</td></tr>
|
<tr><td></td><td><kbd>Ctrl</kbd>+<kbd>S</kbd></td><td>저장 (병합 중에는 Save)</td></tr>
|
||||||
<tr><td>찾기</td><td><kbd>Ctrl</kbd>+<kbd>F</kbd> · <kbd>Ctrl</kbd>+<kbd>H</kbd></td><td>찾기 · 바꾸기</td></tr>
|
<tr><td>찾기</td><td><kbd>Ctrl</kbd>+<kbd>F</kbd> · <kbd>Ctrl</kbd>+<kbd>H</kbd></td><td>찾기 · 바꾸기</td></tr>
|
||||||
<tr><td></td><td><kbd>F3</kbd> / <kbd>Shift</kbd>+<kbd>F3</kbd> · <kbd>Esc</kbd></td><td>다음 / 이전 찾기 · 찾기 칸 닫기</td></tr>
|
<tr><td></td><td><kbd>F3</kbd> / <kbd>Shift</kbd>+<kbd>F3</kbd> · <kbd>Esc</kbd></td><td>다음 / 이전 찾기 · 찾기 칸 닫기</td></tr>
|
||||||
<tr><td>도움말</td><td><kbd>F1</kbd></td><td>단축키 목록</td></tr>
|
<tr><td>도움말</td><td><kbd>F1</kbd></td><td>단축키 목록</td></tr>
|
||||||
@ -531,7 +531,7 @@ UbisamBase.Shell.exe <span class="k">--merge --base</span> B.cs <span class="k">
|
|||||||
<li>머지 주석 자동 풀기는 Git 탭 <span class="btn-label">Merge</span> 에만 걸려 있다. pull · rebase · cherry-pick 이 낸 충돌에는 아직 안 된다.</li>
|
<li>머지 주석 자동 풀기는 Git 탭 <span class="btn-label">Merge</span> 에만 걸려 있다. pull · rebase · cherry-pick 이 낸 충돌에는 아직 안 된다.</li>
|
||||||
<li>rebase · cherry-pick 충돌도 같은 네 칸을 쓰지만, 6차는 병합만 끝까지 확인했다.</li>
|
<li>rebase · cherry-pick 충돌도 같은 네 칸을 쓰지만, 6차는 병합만 끝까지 확인했다.</li>
|
||||||
<li>3분할에서 줄을 고르면 로그에 “(3-Way 안 씀) 반영” 으로 적힌다 — 글자만 틀렸고 결과는 맞다(7차).</li>
|
<li>3분할에서 줄을 고르면 로그에 “(3-Way 안 씀) 반영” 으로 적힌다 — 글자만 틀렸고 결과는 맞다(7차).</li>
|
||||||
<li>마지막 충돌을 [해결로 저장] 하면 병합 커밋 전까지 두 칸 · “남은 차이 N줄” 로 보인다 — 푼 결과가 내 쪽과 다른 줄 수다. 충돌 탭의 “충돌 정리 끝” 을 믿으면 된다(7차).</li>
|
<li>마지막 충돌을 [Save] 하면 병합 커밋 전까지 두 칸 · “남은 차이 N줄” 로 보인다 — 푼 결과가 내 쪽과 다른 줄 수다. 충돌 탭의 “충돌 정리 끝” 을 믿으면 된다(7차).</li>
|
||||||
<li>빠른 비교(크기 · 수정일)는 내용이 바뀌었는데 크기와 시각이 같은 파일을 놓친다.</li>
|
<li>빠른 비교(크기 · 수정일)는 내용이 바뀌었는데 크기와 시각이 같은 파일을 놓친다.</li>
|
||||||
<li>코드 검사는 빌드가 된다는 보증이 아니다.</li>
|
<li>코드 검사는 빌드가 된다는 보증이 아니다.</li>
|
||||||
<li>로그인 · 권한은 아직 없다. 창 여러 개로 비교하는 기능은 넣지 않기로 했다.</li>
|
<li>로그인 · 권한은 아직 없다. 창 여러 개로 비교하는 기능은 넣지 않기로 했다.</li>
|
||||||
@ -713,7 +713,7 @@ UbisamBase.Shell.exe <span class="k">--merge --base</span> B.cs <span class="k">
|
|||||||
<div class="body">
|
<div class="body">
|
||||||
<table>
|
<table>
|
||||||
<tr><th>A-1</th><td>3분할 저장이 CRLF → LF. 이제 내 쪽 파일의 줄끝 · 인코딩을 따른다</td><td class="num">+3,367/−3,363 → <b>+8/−4</b></td></tr>
|
<tr><th>A-1</th><td>3분할 저장이 CRLF → LF. 이제 내 쪽 파일의 줄끝 · 인코딩을 따른다</td><td class="num">+3,367/−3,363 → <b>+8/−4</b></td></tr>
|
||||||
<tr><th>A-2</th><td>병합 중 <b>[해결로 저장]</b> 을 따로. 충돌이 남으면 커밋은 쓰기 전에 막음</td><td class="num">22 → 21, 성공</td></tr>
|
<tr><th>A-2</th><td>병합 중 <b>[Save]</b> 을 따로. 충돌이 남으면 커밋은 쓰기 전에 막음</td><td class="num">22 → 21, 성공</td></tr>
|
||||||
<tr><th>A-3</th><td>충돌 파일을 열면 콤보 안 건드려도 네 칸</td><td class="num">REMOTE 에 브랜치명</td></tr>
|
<tr><th>A-3</th><td>충돌 파일을 열면 콤보 안 건드려도 네 칸</td><td class="num">REMOTE 에 브랜치명</td></tr>
|
||||||
<tr><th>A-4</th><td>한쪽이 지운 충돌 → [파일 남기기] · [파일 지우기]</td><td class="num">UD · DU</td></tr>
|
<tr><th>A-4</th><td>한쪽이 지운 충돌 → [파일 남기기] · [파일 지우기]</td><td class="num">UD · DU</td></tr>
|
||||||
<tr><th>A-5</th><td>Accept Both 는 글로 이어 붙이고 먼저 묻는다</td><td class="num">BOM 1번</td></tr>
|
<tr><th>A-5</th><td>Accept Both 는 글로 이어 붙이고 먼저 묻는다</td><td class="num">BOM 1번</td></tr>
|
||||||
@ -894,7 +894,7 @@ Log(<span class="s">"step 5"</span>);</pre>
|
|||||||
<h3>D-1 결과 — 새로 만든 저장소, MergeHub 만으로</h3>
|
<h3>D-1 결과 — 새로 만든 저장소, MergeHub 만으로</h3>
|
||||||
<div class="tbl"><table>
|
<div class="tbl"><table>
|
||||||
<tr><th>확인</th><th>결과</th></tr>
|
<tr><th>확인</th><th>결과</th></tr>
|
||||||
<tr><td>충돌</td><td>git 26 · 머지 주석만 다른 2 자동 · 파일 단위 Accept 15(한 번에 1.3초) · 3분할 [해결로 저장] 7 · [파일 지우기] 1 · [파일 남기기] 1</td></tr>
|
<tr><td>충돌</td><td>git 26 · 머지 주석만 다른 2 자동 · 파일 단위 Accept 15(한 번에 1.3초) · 3분할 [Save] 7 · [파일 지우기] 1 · [파일 남기기] 1</td></tr>
|
||||||
<tr><td>병합 커밋</td><td>부모 둘 · “Merge branch 'feature/theirs' into feature/mine” · 워킹트리 Clean</td></tr>
|
<tr><td>병합 커밋</td><td>부모 둘 · “Merge branch 'feature/theirs' into feature/mine” · 워킹트리 Clean</td></tr>
|
||||||
<tr><td>줄끝 · BOM · 인코딩이 내 쪽과 달라진 파일</td><td><b>0 / 33</b> (LF 만 있는 줄 0 · 가운데 BOM 0 · 충돌 표식 0)</td></tr>
|
<tr><td>줄끝 · BOM · 인코딩이 내 쪽과 달라진 파일</td><td><b>0 / 33</b> (LF 만 있는 줄 0 · 가운데 BOM 0 · 충돌 표식 0)</td></tr>
|
||||||
<tr><td>5차 C-1 의 23가지</td><td>사라짐 18 · 정해서 남음 1(머지 주석, B-5) · 이번 흐름에서 안 남 · 안 씀 3 · 따로 안 봄 1</td></tr>
|
<tr><td>5차 C-1 의 23가지</td><td>사라짐 18 · 정해서 남음 1(머지 주석, B-5) · 이번 흐름에서 안 남 · 안 씀 3 · 따로 안 봄 1</td></tr>
|
||||||
@ -904,7 +904,7 @@ Log(<span class="s">"step 5"</span>);</pre>
|
|||||||
<div class="tbl wide"><table>
|
<div class="tbl wide"><table>
|
||||||
<tr><th>#</th><th>무엇</th><th>근거</th></tr>
|
<tr><th>#</th><th>무엇</th><th>근거</th></tr>
|
||||||
<tr><td>N1</td><td>3분할에서 줄을 고르면 로그가 “N행 (3-Way 안 씀) 반영”</td><td>로그 11줄 모두. 머리의 3-Way 콤보 글자를 쓰는 것으로 보임</td></tr>
|
<tr><td>N1</td><td>3분할에서 줄을 고르면 로그가 “N행 (3-Way 안 씀) 반영”</td><td>로그 11줄 모두. 머리의 3-Way 콤보 글자를 쓰는 것으로 보임</td></tr>
|
||||||
<tr><td>N2</td><td>마지막 [해결로 저장] 뒤, 병합 중인데 두 칸(HEAD ↔ 워킹트리) “남은 차이 3줄” 로 떨어져 덜 푼 것처럼 보인다</td><td><code>Weld/Unit1.cs</code> 저장 직후 화면</td></tr>
|
<tr><td>N2</td><td>마지막 [Save] 뒤, 병합 중인데 두 칸(HEAD ↔ 워킹트리) “남은 차이 3줄” 로 떨어져 덜 푼 것처럼 보인다</td><td><code>Weld/Unit1.cs</code> 저장 직후 화면</td></tr>
|
||||||
<tr><td>N3</td><td>병합 커밋 뒤에도 <code>.git/MERGEHUB_CONFLICTS</code> 가 남는다</td><td>MERGE_HEAD 와 대조하므로 해는 없음</td></tr>
|
<tr><td>N3</td><td>병합 커밋 뒤에도 <code>.git/MERGEHUB_CONFLICTS</code> 가 남는다</td><td>MERGE_HEAD 와 대조하므로 해는 없음</td></tr>
|
||||||
</table></div>
|
</table></div>
|
||||||
|
|
||||||
@ -975,7 +975,7 @@ Log(<span class="s">"step 5"</span>);</pre>
|
|||||||
<div class="tbl wide"><table>
|
<div class="tbl wide"><table>
|
||||||
<tr><th>항목</th><th>고친 것</th><th>확인한 값</th></tr>
|
<tr><th>항목</th><th>고친 것</th><th>확인한 값</th></tr>
|
||||||
<tr><td>A-1</td><td>충돌 해결 저장이 내 쪽(ours) 파일의 줄끝 · 인코딩을 따른다. 검사 모음이 옛 실행 파일로 돌던 것도 찾아 세 벌을 고침</td><td>3,367줄 파일 diff +3,367/−3,363 → +8/−4</td></tr>
|
<tr><td>A-1</td><td>충돌 해결 저장이 내 쪽(ours) 파일의 줄끝 · 인코딩을 따른다. 검사 모음이 옛 실행 파일로 돌던 것도 찾아 세 벌을 고침</td><td>3,367줄 파일 diff +3,367/−3,363 → +8/−4</td></tr>
|
||||||
<tr><td>A-2</td><td>병합 중 <b>[해결로 저장]</b>(쓰고 스테이징만). Save & Commit 은 남은 충돌이 있으면 쓰기 전에 막음</td><td>충돌 22 → 21 · 화면 “성공” · 확인 창 안 뜸</td></tr>
|
<tr><td>A-2</td><td>병합 중 <b>[Save]</b>(쓰고 스테이징만). Save & Commit 은 남은 충돌이 있으면 쓰기 전에 막음</td><td>충돌 22 → 21 · 화면 “성공” · 확인 창 안 뜸</td></tr>
|
||||||
<tr><td>A-3</td><td>병합 중 충돌 파일을 열면 네 칸. REMOTE 제목에 상대 브랜치(MERGE_HEAD → 병합 메시지 → 짧은 해시)</td><td>콤보를 안 건드려도 LOCAL · BASE · REMOTE · MERGED</td></tr>
|
<tr><td>A-3</td><td>병합 중 충돌 파일을 열면 네 칸. REMOTE 제목에 상대 브랜치(MERGE_HEAD → 병합 메시지 → 짧은 해시)</td><td>콤보를 안 건드려도 LOCAL · BASE · REMOTE · MERGED</td></tr>
|
||||||
<tr><td>A-4</td><td>한쪽이 지운 충돌(UD · DU)은 남은 파일을 두 칸으로, [파일 남기기] · [파일 지우기]</td><td>거꾸로 세던 “Theirs only 89” 사라짐</td></tr>
|
<tr><td>A-4</td><td>한쪽이 지운 충돌(UD · DU)은 남은 파일을 두 칸으로, [파일 남기기] · [파일 지우기]</td><td>거꾸로 세던 “Theirs only 89” 사라짐</td></tr>
|
||||||
<tr><td>A-5</td><td>파일 단위 Accept Both 를 글로 풀어 이어 붙이고 내 쪽 형식으로 씀. 누르기 전에 물음</td><td>BOM 맨 앞 한 번 · 줄끝 한 가지</td></tr>
|
<tr><td>A-5</td><td>파일 단위 Accept Both 를 글로 풀어 이어 붙이고 내 쪽 형식으로 씀. 누르기 전에 물음</td><td>BOM 맨 앞 한 번 · 줄끝 한 가지</td></tr>
|
||||||
@ -1010,7 +1010,7 @@ Log(<span class="s">"step 5"</span>);</pre>
|
|||||||
<tr><td>파일 비교</td><td>히스토그램 정렬 · 단어 단위 · 자리 옮김 · 줄/덩어리/전체 반영 · Undo/Redo · 색 구분 범례 이동 · 미니맵 · 북마크 · 찾기/바꾸기 · 줄 접기 · 편집 잠금 · 코드 검사 · 저장 형식 · 비교 규칙 · 최근 목록 · 끌어다 놓기</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>파일 비교</td><td>히스토그램 정렬 · 단어 단위 · 자리 옮김 · 줄/덩어리/전체 반영 · Undo/Redo · 색 구분 범례 이동 · 미니맵 · 북마크 · 찾기/바꾸기 · 줄 접기 · 편집 잠금 · 코드 검사 · 저장 형식 · 비교 규칙 · 최근 목록 · 끌어다 놓기</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>언어</td><td>13가지 색칠(C# · C/C++ · Java · JS/TS · Python · SQL · 셸 · XML/XAML/HTML · JSON · YAML · INI · Markdown · 평문) · CP949 판별 · 이진/그림</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>언어</td><td>13가지 색칠(C# · C/C++ · Java · JS/TS · Python · SQL · 셸 · XML/XAML/HTML · JSON · YAML · INI · Markdown · 평문) · CP949 판별 · 이진/그림</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>네 칸 병합</td><td>LOCAL · BASE · REMOTE · MERGED · Take Mine/Theirs · 자동 병합 · 충돌만 이동 · 완료 판정 · 한쪽 삭제 띠 · git mergetool</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>네 칸 병합</td><td>LOCAL · BASE · REMOTE · MERGED · Take Mine/Theirs · 자동 병합 · 충돌만 이동 · 완료 판정 · 한쪽 삭제 띠 · git mergetool</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>Git</td><td>열기 · 클론 · 원격 · Fetch/Pull/Push · 체크아웃 · Merge · rebase · 충돌 목록 · 파일 단위 Accept · 해결로 저장 · 병합 커밋 · 스테이징 · 커밋 · amend · stash · 이력 그래프 · Revert · Cherry-pick · Reset · 커밋 간 비교 · 변경분 추출 · Blame · 태그 · 서브모듈 · 작업 취소</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>Git</td><td>열기 · 클론 · 원격 · Fetch/Pull/Push · 체크아웃 · Merge · rebase · 충돌 목록 · 파일 단위 Accept · Save · 병합 커밋 · 스테이징 · 커밋 · amend · stash · 이력 그래프 · Revert · Cherry-pick · Reset · 커밋 간 비교 · 변경분 추출 · Blame · 태그 · 서브모듈 · 작업 취소</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>Git</td><td>충돌 여러 개 한 번에 Accept (B-6)</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>Git</td><td>충돌 여러 개 한 번에 Accept (B-6)</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>머지 주석</td><td>반영한 줄 위에 쌓기 · 작업자 이름 · 비교에서 무시 · 주석만 다른 충돌 자동 해결</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>머지 주석</td><td>반영한 줄 위에 쌓기 · 작업자 이름 · 비교에서 무시 · 주석만 다른 충돌 자동 해결</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>C# 스타일</td><td>AURORA / Allman 맞춤 비교 · 저장 · 폴더 비교 · 설정</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>C# 스타일</td><td>AURORA / Allman 맞춤 비교 · 저장 · 폴더 비교 · 설정</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
@ -1057,7 +1057,7 @@ Log(<span class="s">"step 5"</span>);</pre>
|
|||||||
<tr><td>3 비교 시점</td><td>커밋 트리에서 기준 커밋 클릭</td><td>커밋 이력에서 고르기 + 3-Way 콤보로 브랜치를 REMOTE 로</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>3 비교 시점</td><td>커밋 트리에서 기준 커밋 클릭</td><td>커밋 이력에서 고르기 + 3-Way 콤보로 브랜치를 REMOTE 로</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>4 변경점 확인</td><td>좌우 비교와 미니맵</td><td>미니맵 + 색 구분 범례를 눌러 이동 + 차이 이동 단축키</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>4 변경점 확인</td><td>좌우 비교와 미니맵</td><td>미니맵 + 색 구분 범례를 눌러 이동 + 차이 이동 단축키</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>5 부분 수용</td><td>여백 [>] · Undo/Redo</td><td>같음 + 덩어리 반영 · Take Mine/Theirs · 자동 병합</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>5 부분 수용</td><td>여백 [>] · Undo/Redo</td><td>같음 + 덩어리 반영 · Take Mine/Theirs · 자동 병합</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
<tr><td>6 저장 & 커밋</td><td>구문 검사 통과 후 Save & Commit</td><td>가벼운 코드 검사 + Save & Commit. 병합 중에는 [해결로 저장] → [병합 커밋]</td><td><span class="chip c-done">바뀜</span></td></tr>
|
<tr><td>6 저장 & 커밋</td><td>구문 검사 통과 후 Save & Commit</td><td>가벼운 코드 검사 + Save & Commit. 병합 중에는 [Save] → [병합 커밋]</td><td><span class="chip c-done">바뀜</span></td></tr>
|
||||||
<tr><td>병행 사용</td><td>git mergetool 등록</td><td>[mergetool 등록] 버튼 · 네 칸으로 열림(6차)</td><td><span class="chip c-done">완료</span></td></tr>
|
<tr><td>병행 사용</td><td>git mergetool 등록</td><td>[mergetool 등록] 버튼 · 네 칸으로 열림(6차)</td><td><span class="chip c-done">완료</span></td></tr>
|
||||||
</table></div>
|
</table></div>
|
||||||
|
|
||||||
@ -1119,7 +1119,7 @@ Log(<span class="s">"step 5"</span>);</pre>
|
|||||||
<li>폴더 비교 · 폴더 전체 검색 · 결과 내보내기</li>
|
<li>폴더 비교 · 폴더 전체 검색 · 결과 내보내기</li>
|
||||||
<li>언어 13가지 색칠(XAML 여러 줄 태그 포함) · CP949 판별 · 이진/그림 비교</li>
|
<li>언어 13가지 색칠(XAML 여러 줄 태그 포함) · CP949 판별 · 이진/그림 비교</li>
|
||||||
<li>머지 주석 넣기와 비교 · 병합에서 무시, 주석만 다른 충돌 자동 해결</li>
|
<li>머지 주석 넣기와 비교 · 병합에서 무시, 주석만 다른 충돌 자동 해결</li>
|
||||||
<li>병합 중 [해결로 저장] · 한쪽 삭제 충돌 [파일 남기기]/[파일 지우기] · 병합 커밋 메시지</li>
|
<li>병합 중 [Save] · 한쪽 삭제 충돌 [파일 남기기]/[파일 지우기] · 병합 커밋 메시지</li>
|
||||||
<li>WinMerge 단축키와 설명 창 · 최근 비교 목록 · 끌어다 놓기 · 북마크 · 찾기/바꾸기</li>
|
<li>WinMerge 단축키와 설명 창 · 최근 비교 목록 · 끌어다 놓기 · 북마크 · 찾기/바꾸기</li>
|
||||||
<li>저장 안 한 편집 보호(4차 A-1 · 5차 A-2)</li>
|
<li>저장 안 한 편집 보호(4차 A-1 · 5차 A-2)</li>
|
||||||
<li><span class="chip c-done">완료</span> C# 코드 스타일 맞춤 (AURORA / Allman) · 충돌 여러 개 한 번에 · 발표 시연 재료</li>
|
<li><span class="chip c-done">완료</span> C# 코드 스타일 맞춤 (AURORA / Allman) · 충돌 여러 개 한 번에 · 발표 시연 재료</li>
|
||||||
@ -1257,7 +1257,7 @@ D:\MergeHubDemo\repo\ <span class="d">make-demo.ps1 이 만드는 Git
|
|||||||
<ol>
|
<ol>
|
||||||
<li>위 줄 데모 버튼으로 Git 저장소 화면(<code>D:\MergeHubDemo\repo</code>). <b>Git</b> 탭 → 브랜치 · 병합에서 <code>feature/mine</code> 체크아웃, <code>feature/theirs</code> 를 골라 <span class="btn-label">Merge → 현재 브랜치로</span>.</li>
|
<li>위 줄 데모 버튼으로 Git 저장소 화면(<code>D:\MergeHubDemo\repo</code>). <b>Git</b> 탭 → 브랜치 · 병합에서 <code>feature/mine</code> 체크아웃, <code>feature/theirs</code> 를 골라 <span class="btn-label">Merge → 현재 브랜치로</span>.</li>
|
||||||
<li>알림을 읽는다: “충돌 N건 (머지 주석만 다른 M건은 자동으로 풀림)”. 전날 적어 둔 숫자와 같은지.</li>
|
<li>알림을 읽는다: “충돌 N건 (머지 주석만 다른 M건은 자동으로 풀림)”. 전날 적어 둔 숫자와 같은지.</li>
|
||||||
<li><b>충돌</b> 탭. 같은 줄 충돌 파일을 두 번 누른다 → 파일 비교 탭 네 칸, REMOTE 제목에 <code>feature/theirs</code>. 한두 줄 Take 하고 <span class="btn-label">해결로 저장</span> → 충돌 수가 하나 준다.</li>
|
<li><b>충돌</b> 탭. 같은 줄 충돌 파일을 두 번 누른다 → 파일 비교 탭 네 칸, REMOTE 제목에 <code>feature/theirs</code>. 한두 줄 Take 하고 <span class="btn-label">Save</span> → 충돌 수가 하나 준다.</li>
|
||||||
<li>CP949 한글 파일을 열어 네 칸 모두 한글이 바른 것, XAML 충돌 파일이 색칠된 것을 짚는다.</li>
|
<li>CP949 한글 파일을 열어 네 칸 모두 한글이 바른 것, XAML 충돌 파일이 색칠된 것을 짚는다.</li>
|
||||||
<li>한쪽이 지운 파일을 연다 → “상대가 이 파일을 지웠습니다” 띠 → <span class="btn-label">파일 지우기</span>.</li>
|
<li>한쪽이 지운 파일을 연다 → “상대가 이 파일을 지웠습니다” 띠 → <span class="btn-label">파일 지우기</span>.</li>
|
||||||
<li>충돌 탭으로 돌아가 남은 파일을 <kbd>Ctrl</kbd>/<kbd>Shift</kbd> 클릭으로 여러 개 골라 <span class="btn-label">Accept Theirs</span> 한 번. 단추 옆 “N개 고름” 을 짚고, 한 번에 풀리는 것을 보여 준다(만든 저장소에서 같은 줄 충돌 15개가 1.2초, 고치기 전에는 하나씩 22.0초).</li>
|
<li>충돌 탭으로 돌아가 남은 파일을 <kbd>Ctrl</kbd>/<kbd>Shift</kbd> 클릭으로 여러 개 골라 <span class="btn-label">Accept Theirs</span> 한 번. 단추 옆 “N개 고름” 을 짚고, 한 번에 풀리는 것을 보여 준다(만든 저장소에서 같은 줄 충돌 15개가 1.2초, 고치기 전에는 하나씩 22.0초).</li>
|
||||||
@ -1315,7 +1315,7 @@ D:\MergeHubDemo\repo\ <span class="d">make-demo.ps1 이 만드는 Git
|
|||||||
<tr><td>병합 충돌 목록</td><td>없음 — git 이 파일마다 하나씩 부른다</td><td>충돌 탭 목록 → 두 번 누르면 네 칸, 파일 단위 Accept, 여러 개를 골라 한 번에</td></tr>
|
<tr><td>병합 충돌 목록</td><td>없음 — git 이 파일마다 하나씩 부른다</td><td>충돌 탭 목록 → 두 번 누르면 네 칸, 파일 단위 Accept, 여러 개를 골라 한 번에</td></tr>
|
||||||
<tr><td>한쪽이 지운 충돌 (UD · DU)</td><td>명령줄에서 <code>git rm</code> / <code>git add</code></td><td>[파일 남기기] · [파일 지우기]</td></tr>
|
<tr><td>한쪽이 지운 충돌 (UD · DU)</td><td>명령줄에서 <code>git rm</code> / <code>git add</code></td><td>[파일 남기기] · [파일 지우기]</td></tr>
|
||||||
<tr><td>주석만 다른 충돌</td><td>사람이 푼다</td><td>양쪽 주석을 남겨 자동으로 푼다</td></tr>
|
<tr><td>주석만 다른 충돌</td><td>사람이 푼다</td><td>양쪽 주석을 남겨 자동으로 푼다</td></tr>
|
||||||
<tr><td>병합 중 저장</td><td>파일 저장 뒤 git 이 스테이징</td><td>[해결로 저장] = 쓰기 + 스테이징, 남은 충돌이 있으면 커밋을 막음, 병합 커밋 메시지 정리</td></tr>
|
<tr><td>병합 중 저장</td><td>파일 저장 뒤 git 이 스테이징</td><td>[Save] = 쓰기 + 스테이징, 남은 충돌이 있으면 커밋을 막음, 병합 커밋 메시지 정리</td></tr>
|
||||||
<tr><td colspan="3"><b>파일 형식</b></td></tr>
|
<tr><td colspan="3"><b>파일 형식</b></td></tr>
|
||||||
<tr><td>인코딩 · 줄바꿈</td><td>판별 · 코드 페이지 골라 저장</td><td>원본 유지가 기본. 병합 저장은 <b>내 쪽(ours) 파일</b>의 줄끝 · 인코딩을 따른다(충돌 표시가 든 워킹트리 파일을 보면 틀리므로). CP949 판별</td></tr>
|
<tr><td>인코딩 · 줄바꿈</td><td>판별 · 코드 페이지 골라 저장</td><td>원본 유지가 기본. 병합 저장은 <b>내 쪽(ours) 파일</b>의 줄끝 · 인코딩을 따른다(충돌 표시가 든 워킹트리 파일을 보면 틀리므로). CP949 판별</td></tr>
|
||||||
<tr><td colspan="3"><b>쓰는 환경</b></td></tr>
|
<tr><td colspan="3"><b>쓰는 환경</b></td></tr>
|
||||||
@ -1329,7 +1329,7 @@ D:\MergeHubDemo\repo\ <span class="d">make-demo.ps1 이 만드는 Git
|
|||||||
|
|
||||||
<h2>MergeHub 가 필요한 이유</h2>
|
<h2>MergeHub 가 필요한 이유</h2>
|
||||||
<ol class="steps">
|
<ol class="steps">
|
||||||
<li><b>병합이 한 화면에서 끝난다.</b> WinMerge 는 git 이 파일마다 하나씩 불러 주는 비교 창이다. 충돌이 22개면 명령줄과 WinMerge 를 22번 오간다. MergeHub 는 병합 → 충돌 목록 → 네 칸 → 해결로 저장 → 병합 커밋까지 탭 안에서 간다.</li>
|
<li><b>병합이 한 화면에서 끝난다.</b> WinMerge 는 git 이 파일마다 하나씩 불러 주는 비교 창이다. 충돌이 22개면 명령줄과 WinMerge 를 22번 오간다. MergeHub 는 병합 → 충돌 목록 → 네 칸 → Save → 병합 커밋까지 탭 안에서 간다.</li>
|
||||||
<li><b>반영 기록을 소스에 남기고, 그 기록 때문에 생기는 충돌은 스스로 푼다.</b> 우리 팀은 누가 언제 반영했는지를 <code>// [이름] 날짜</code> 로 남긴다. WinMerge 에는 이 규칙이 없어 손으로 적어야 하고, 다음 병합 때 주석끼리 충돌한다. 만든 저장소에서 git 충돌 26개 중 2개가 이런 충돌이었다.</li>
|
<li><b>반영 기록을 소스에 남기고, 그 기록 때문에 생기는 충돌은 스스로 푼다.</b> 우리 팀은 누가 언제 반영했는지를 <code>// [이름] 날짜</code> 로 남긴다. WinMerge 에는 이 규칙이 없어 손으로 적어야 하고, 다음 병합 때 주석끼리 충돌한다. 만든 저장소에서 git 충돌 26개 중 2개가 이런 충돌이었다.</li>
|
||||||
<li><b>리뷰할 diff 를 지킨다.</b> 병합 결과를 내 쪽 파일의 줄끝 · 인코딩으로 쓴다. 3분할 저장이 LF 로 바꿔 쓰던 문제를 고친 뒤 3,367줄 파일의 diff 가 +8/−4 로 줄었다. CP949 한글 파일도 같은 규칙이다.</li>
|
<li><b>리뷰할 diff 를 지킨다.</b> 병합 결과를 내 쪽 파일의 줄끝 · 인코딩으로 쓴다. 3분할 저장이 LF 로 바꿔 쓰던 문제를 고친 뒤 3,367줄 파일의 diff 가 +8/−4 로 줄었다. CP949 한글 파일도 같은 규칙이다.</li>
|
||||||
<li><b>스타일만 다른 diff 를 걷어 낸다.</b> 사람마다 다른 C# 중괄호 자리를 AURORA / Allman 로 맞춘 뒤 견준다. 시연 파일에서 남은 차이가 39줄에서 진짜 변경 1줄로 준다.</li>
|
<li><b>스타일만 다른 diff 를 걷어 낸다.</b> 사람마다 다른 C# 중괄호 자리를 AURORA / Allman 로 맞춘 뒤 견준다. 시연 파일에서 남은 차이가 39줄에서 진짜 변경 1줄로 준다.</li>
|
||||||
|
|||||||
144
doc/작업지시/7차.md
Normal file
144
doc/작업지시/7차.md
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
# 작업 지시 — MergeHub 7차 (병합 화면이 사실대로 말하게 · 병합 말고 다른 충돌 길)
|
||||||
|
|
||||||
|
대상: `D:\Sorce\MergeTool\MergeHub` (플러그인) · `D:\Sorce\MergeTool\UbisamPlatform` (셸)
|
||||||
|
전제: 1~6차 지시서는 모두 끝났다([../진행상황.md](../진행상황.md)).
|
||||||
|
|
||||||
|
**이번 지시서가 나온 곳** — 6차 D-1 에서 시험 저장소를 새로 만들어 MergeHub 만으로 처음부터 병합 커밋까지 다시 했다.
|
||||||
|
줄끝 · BOM 이 바뀐 파일은 0/33 이었고 5차의 23가지 중 18가지가 사라졌다. 대신 **새로 걸린 것이 세 가지**였고,
|
||||||
|
6차에서 일부러 뺀 **병합이 아닌 충돌 길**(pull · rebase · cherry-pick)이 남아 있다.
|
||||||
|
근거와 수치는 [../history/2026-09-14-6차.md](../history/2026-09-14-6차.md) 의 D-1 에 있다.
|
||||||
|
|
||||||
|
| 6차 D-1 에서 잰 것 | 값 |
|
||||||
|
|---|---|
|
||||||
|
| 충돌 | git 26 · 머지 주석 자동 2 · 파일 단위 Accept 15(1.3초) · 3분할 저장 7 · 지우기/남기기 2 |
|
||||||
|
| 줄끝 · BOM · 인코딩이 내 쪽과 달라진 파일 | **0 / 33** · 충돌 표식 0줄 |
|
||||||
|
| 병합 커밋 | 부모 둘 · `Merge branch 'feature/theirs' into feature/mine` |
|
||||||
|
| 5차 C-1 의 23가지 | 사라짐 18 · 정해서 남음 1(머지 주석) · 이번 흐름에서 안 남 3 · 따로 안 봄 1(#12 줄 번호) |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 공통 규칙
|
||||||
|
|
||||||
|
- **A → B → C → D 순서로 진행한다.** A 는 사람이 화면을 보고 잘못 판단하게 만드는 것이라 먼저다.
|
||||||
|
- **항목 하나를 끝낼 때마다** 빌드하고 실제로 실행해 화면을 확인한 뒤 보고한다.
|
||||||
|
- **항목 하나가 끝나면 기록을 세 군데에 남기고 로컬 커밋한다**(4차 D-2 규칙).
|
||||||
|
1. **상세**는 `doc/history/YYYY-MM-DD-7차.md` — 원인 · 판단 · 확인한 결과
|
||||||
|
2. [../진행상황.md](../진행상황.md) 은 **대기 → 완료로 상태만**
|
||||||
|
3. [../history/changelog.md](../history/changelog.md) 에 한 줄 — 날짜 · 무엇을 왜 · 커밋
|
||||||
|
- **푸쉬하지 않는다.**
|
||||||
|
- **실제 소스를 열지 않는다**(2026-09-11 결정). 시험 재료는 우리가 만들어 쓴다.
|
||||||
|
- **확인은 `C1Repo` 로 만든 저장소로 한다.** 씨앗이 고정돼 몇 번을 만들어도 같다.
|
||||||
|
고치기 전에 문제가 **다시 나는 것부터 보이고**, 고친 뒤 안 나는 것을 보인다.
|
||||||
|
- 기존 검사 하네스 22벌(948건)은 계속 통과해야 한다. 로직을 건드리면 **테스트를 먼저 늘린다.**
|
||||||
|
- 빌드 경고 0 · 오류 0 을 유지한다. 앱이 실행 중이면 `UbisamBase.Shell` 을 먼저 종료한다.
|
||||||
|
- 사용자 설정 파일(`D:\UbisamConfig\Settings\MergeHubSettings.json`)은 시험 전에 백업하고, 끝나면 **바이트 그대로** 되돌린다.
|
||||||
|
- 플랫폼을 고치면 다른 소비 프로그램에 미치는 영향을 함께 적고
|
||||||
|
`UbisamPlatform/doc/history/changelog.md` 에 남긴다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## A. 병합 화면이 사실과 다르게 말하는 것
|
||||||
|
|
||||||
|
### A-1. 마지막 충돌을 저장하면 "남은 차이" 가 뜬다 (D-1 N2)
|
||||||
|
|
||||||
|
- 마지막 충돌 파일을 [Save] 하면, **아직 병합 커밋 전인데** 파일 비교 탭이 두 칸(HEAD 내 쪽 ↔ 워킹트리)으로 떨어져
|
||||||
|
"남은 차이 3줄 · BASE와 다름 3" 을 보인다(`Weld/Unit1.cs`). 방금 고른 줄이 "차이" 로 세어져 **덜 푼 것처럼** 읽힌다.
|
||||||
|
충돌 탭은 같은 때 "충돌 정리 끝 · 푼 것 26개" 라고 한다. 두 화면이 다른 말을 한다.
|
||||||
|
- 짚이는 곳: `HomeViewModel.ReloadAfterResolveAsync` 가 남은 충돌이 없으면 `LoadCommitAsync` 로 보통 화면(HEAD 대비)을 연다.
|
||||||
|
병합 중이라는 사정을 모른다.
|
||||||
|
- 방향: 병합 중이고 충돌이 0 이면 파일 비교 탭도 "**충돌 정리 끝 · 병합 커밋을 할 수 있습니다**" 를 말한다.
|
||||||
|
푼 파일을 보여 줄 거라면 무엇과 견준 차이인지(내 쪽 대비 받은 변경) 제목과 요약에 적는다.
|
||||||
|
- **판정 기준**: D-1 과 같은 순서로 마지막 충돌을 저장했을 때 파일 비교 탭의 요약 · 상태바가 "남은 차이" 가 아니라
|
||||||
|
병합 커밋을 할 수 있다는 말을 한다. 충돌 탭과 말이 같다. 병합 커밋 뒤에는 지금처럼 보통 화면(B-8)으로 돌아간다.
|
||||||
|
|
||||||
|
### A-2. 3분할에서 줄을 골라도 로그는 "3-Way 안 씀" 이라고 한다 (D-1 N1)
|
||||||
|
|
||||||
|
- 네 칸에서 Take Theirs 를 누르면 로그가 **"101행 (3-Way 안 씀) 반영"** 이라고 적는다. D-1 로그 11줄이 모두 그랬다.
|
||||||
|
결과 파일은 맞다 — 글자만 틀렸다.
|
||||||
|
- 짚이는 곳: `HomeViewModel.cs` 의 `"{line.RemoteNumber}행 {RemoteBranch} 반영"` 이 3-Way 콤보 값을 쓴다.
|
||||||
|
병합 중 충돌 파일은 콤보를 건드리지 않고 네 칸을 띄우므로(6차 A-3) 콤보는 `(3-Way 안 씀)` 그대로다.
|
||||||
|
- 머리의 3-Way 콤보도 같은 때 `(3-Way 안 씀)` 을 보이는지 **고치기 전에 화면으로 확인**하고, 그렇다면 같이 고친다.
|
||||||
|
- **판정 기준**: 병합 중 네 칸에서 줄을 고르면 로그가 상대 쪽 이름(예: `feature/theirs`)이나 "Theirs" 로 적는다.
|
||||||
|
Take Mine 도 무엇을 골랐는지 적힌다. 네 칸이 떠 있는 동안 화면 어디에도 "3-Way 안 씀" 이 없다.
|
||||||
|
충돌이 아닌 파일의 2-Way · 브랜치 3-Way 로그는 지금 그대로다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## B. 치우기
|
||||||
|
|
||||||
|
### B-1. 병합 커밋 뒤에도 `.git/MERGEHUB_CONFLICTS` 가 남는다 (D-1 N3)
|
||||||
|
|
||||||
|
- 병합에서 충돌이 나면 처음 충돌 목록을 `.git/MERGEHUB_CONFLICTS` 에 적는다(6차 C-1, "푼 것 M개 (M/전체)" 용).
|
||||||
|
**지우는 곳이 없다.** 병합 커밋 · 작업 취소 뒤에도 남는다.
|
||||||
|
- 첫 줄의 MERGE_HEAD 와 대조하므로 다음 병합에 해는 없다. 그래도 남의 `.git` 에 우리 파일을 흘리지 않는다.
|
||||||
|
- 짚이는 곳: `GitService.RememberMergeConflicts` 만 있고, 병합 커밋 · `--abort`(작업 취소) 길에 치우는 코드가 없다.
|
||||||
|
- **판정 기준**: MergeHub 로 병합 커밋을 하거나 작업 취소를 하면 파일이 없다.
|
||||||
|
MergeHub 밖(터미널)에서 병합을 끝낸 경우에는 다음에 저장소를 열 때 MERGE_HEAD 가 없으면 치운다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## C. 병합 말고 다른 충돌 길 (6차에서 뺀 것)
|
||||||
|
|
||||||
|
6차는 "병합만 끝까지 믿을 수 있게" 를 목표로 pull · rebase · cherry-pick 을 뺐다. 같은 네 칸을 쓰지만 끝까지 해 본 적이 없다.
|
||||||
|
|
||||||
|
### C-1. pull 이 낸 충돌에는 머지 주석 자동 풀기가 안 걸린다
|
||||||
|
|
||||||
|
- `GitService.Pull` 은 안에서 `Merge()` 를 부르므로 처음 충돌 목록은 적힌다.
|
||||||
|
하지만 **머지 주석만 다른 충돌을 푸는 `ResolveNoteOnlyConflicts` 는 `GitViewModel.MergeAsync` 에서만 부른다.**
|
||||||
|
pull 로 같은 저장소를 받으면 사람에게 26개를 묻게 된다(6차 B-5 가 약속한 것과 다르다).
|
||||||
|
- 병합 커밋 메시지 기본값(`Merge branch …`)도 MergeAsync 에만 있다. pull 뒤의 메시지를 확인한다.
|
||||||
|
- **판정 기준**: 만든 저장소에서 원격을 흉내 낸 bare 저장소를 두고 pull 했을 때 알림 · 로그 · 충돌 수가 [Merge] 와 같다
|
||||||
|
("충돌 24건 (머지 주석만 다른 2건은 자동으로 풀림)"). 병합 커밋 메시지가 원격 브랜치 이름을 담는다.
|
||||||
|
|
||||||
|
### C-2. rebase · cherry-pick 충돌을 네 칸으로 끝까지
|
||||||
|
|
||||||
|
- rebase 계속 · cherry-pick 충돌도 파일 비교 탭 네 칸으로 열리는지, **제목(LOCAL · REMOTE 가 무엇인지)** 이 맞는지 본 적이 없다.
|
||||||
|
rebase 에서는 "내 쪽" 과 "상대 쪽" 이 병합과 **거꾸로**다(upstream 이 ours). 화면이 그 사정을 말해야 한다.
|
||||||
|
- [Save] 뒤 흐름: 병합은 [병합 커밋] 인데 rebase 는 [계속], cherry-pick 은 커밋이다. 충돌 탭 단추와 안내가 작업에 맞는지 본다.
|
||||||
|
- 생성기(`C1Repo`)에 rebase · cherry-pick 용 갈래를 더한다(같은 씨앗, 기존 병합 경우는 그대로).
|
||||||
|
- **판정 기준**: 만든 저장소에서 rebase 와 cherry-pick 을 각각 MergeHub 만으로 끝까지 간다.
|
||||||
|
네 칸 제목이 실제 쪽을 말한다. 끝난 커밋에 **줄끝 · BOM 이 바뀐 파일 0개**, 충돌 표식 0.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## D. 확인
|
||||||
|
|
||||||
|
### D-1. 세 길을 처음부터 다시 끝까지
|
||||||
|
|
||||||
|
- A~C 를 고친 뒤 저장소를 새로 만들어 **병합 · pull · rebase · cherry-pick** 을 각각 처음부터 끝까지 한다.
|
||||||
|
- 6차 D-1 에서 **따로 안 본 #12(MERGED 칸 줄 번호)** 를 이번에는 네 칸 화면으로 찍어 확인한다(`Motion/Unit0.cs` · `Weld/Unit1.cs` 끝 줄).
|
||||||
|
- 6차 D-1 과 **같은 표로** 적는다. 새로 걸린 것은 고치지 말고 적는다 — 그 목록이 8차가 된다.
|
||||||
|
- **판정 기준**: 네 길 모두 MergeHub 만으로 커밋(또는 rebase 끝)까지 간다. 줄끝 · BOM 이 바뀐 파일 0개.
|
||||||
|
A-1 · A-2 · B-1 이 다시 나지 않는다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## E. 추가 요청
|
||||||
|
|
||||||
|
### E-1. [해결로 저장] 이름을 [Save] 로 (2026-09-14, 사용자)
|
||||||
|
|
||||||
|
- 병합 중에 보이는 그 단추는 LOCAL 칸 내용을 저장하는 단추다. 이름을 **Save** 로 바꾼다(단추 옆 Save & Commit 과 짝).
|
||||||
|
- 하는 일은 그대로다 — 이 파일만 쓰고 스테이징, 커밋은 안 함, Ctrl+S.
|
||||||
|
- 알림 · 막힘 안내 · 웹 문서의 이름도 같이 바꾼다. 지난 기록(history)은 그때 이름 그대로 둔다.
|
||||||
|
- **판정 기준**: 병합 중 단추가 "Save" 이고 "해결로 저장" 은 화면 어디에도 없다. 눌렀을 때 충돌이 하나 줄고 커밋은 안 생긴다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 이번 지시서에서 하지 않는 것
|
||||||
|
|
||||||
|
- **실제 소스로 병합해 보기** — 실제 소스는 열지 않는다(2026-09-11 결정).
|
||||||
|
- **머지 주석을 병합에서 끄기** — 6차 B-5 에서 "소스에 넣고 비교 · 병합에서는 무시" 로 정했다. D-1 에서도 그대로 동작했다.
|
||||||
|
- 빠른 비교(크기 · 수정일)가 내용만 바뀐 파일을 놓치는 것 — 폴더 비교의 알려진 한계로 둔다.
|
||||||
|
- 같은 줄 접기(4차 B-2) · 외부 편집기(4차 B-4) · 로그인·권한 · Gitea PR — 미룬 그대로 둔다.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 보고 형식
|
||||||
|
|
||||||
|
항목마다 이렇게 적는다.
|
||||||
|
|
||||||
|
- 고치기 전에 문제가 **다시 나는 것**을 어떻게 보였는지 (만든 저장소의 어느 파일로)
|
||||||
|
- 무엇이 원인이었는지 한두 줄
|
||||||
|
- 어떤 파일을 어떻게 고쳤는지
|
||||||
|
- 실제로 실행해 확인한 결과 (바이트 · 줄끝 · 충돌 수처럼 **눈이 아닌 값**으로)
|
||||||
|
- 커밋 해시
|
||||||
41
doc/진행상황.md
41
doc/진행상황.md
@ -136,11 +136,50 @@
|
|||||||
**6차 전부 끝.** D-1 에서 새로 걸린 세 가지는 7차 재료다(고치지 않음).
|
**6차 전부 끝.** D-1 에서 새로 걸린 세 가지는 7차 재료다(고치지 않음).
|
||||||
|
|
||||||
- N1 3분할에서 고른 줄 로그가 "N행 (3-Way 안 씀) 반영"
|
- N1 3분할에서 고른 줄 로그가 "N행 (3-Way 안 씀) 반영"
|
||||||
- N2 마지막 [해결로 저장] 뒤 병합 중인데 두 칸 · "남은 차이 3줄" 로 떨어짐
|
- N2 마지막 [Save](옛 이름 해결로 저장) 뒤 병합 중인데 두 칸 · "남은 차이 3줄" 로 떨어짐
|
||||||
- N3 병합 커밋 뒤 `.git/MERGEHUB_CONFLICTS` 가 남음
|
- N3 병합 커밋 뒤 `.git/MERGEHUB_CONFLICTS` 가 남음
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## 7차 — 병합 화면이 사실대로 말하게 · 병합 말고 다른 충돌 길 (2026-09-14 ~)
|
||||||
|
|
||||||
|
진행 기록: [history/2026-09-14-7차.md](history/2026-09-14-7차.md)
|
||||||
|
지시서: [작업지시/7차.md](작업지시/7차.md). 6차 D-1 에서 새로 걸린 세 가지와, 6차에서 뺀 pull · rebase · cherry-pick 충돌.
|
||||||
|
|
||||||
|
### A. 병합 화면이 사실과 다르게 말하는 것
|
||||||
|
|
||||||
|
| 상태 | 항목 |
|
||||||
|
|---|---|
|
||||||
|
| 대기 | A-1 마지막 충돌을 저장하면 "남은 차이" 가 뜬다 |
|
||||||
|
| 대기 | A-2 3분할에서 줄을 골라도 로그는 "3-Way 안 씀" 이라고 한다 |
|
||||||
|
|
||||||
|
### B. 치우기
|
||||||
|
|
||||||
|
| 상태 | 항목 |
|
||||||
|
|---|---|
|
||||||
|
| 대기 | B-1 병합 커밋 뒤에도 `.git/MERGEHUB_CONFLICTS` 가 남는다 |
|
||||||
|
|
||||||
|
### C. 병합 말고 다른 충돌 길
|
||||||
|
|
||||||
|
| 상태 | 항목 |
|
||||||
|
|---|---|
|
||||||
|
| 대기 | C-1 pull 이 낸 충돌에는 머지 주석 자동 풀기가 안 걸린다 |
|
||||||
|
| 대기 | C-2 rebase · cherry-pick 충돌을 네 칸으로 끝까지 |
|
||||||
|
|
||||||
|
### D. 확인
|
||||||
|
|
||||||
|
| 상태 | 항목 |
|
||||||
|
|---|---|
|
||||||
|
| 대기 | D-1 세 길을 처음부터 다시 끝까지 (+ 6차에서 안 본 MERGED 줄 번호) |
|
||||||
|
|
||||||
|
### E. 추가 요청
|
||||||
|
|
||||||
|
| 상태 | 항목 |
|
||||||
|
|---|---|
|
||||||
|
| **완료** | E-1 [해결로 저장] 이름을 [Save] 로 — 하는 일은 그대로, 알림 · 안내 · 웹 문서 이름도 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 3~4주차로 미룬 것
|
## 3~4주차로 미룬 것
|
||||||
|
|
||||||
디테일이라 지금 붙잡을 일이 아니다.
|
디테일이라 지금 붙잡을 일이 아니다.
|
||||||
|
|||||||
@ -35,7 +35,7 @@ namespace MergeHub.Services
|
|||||||
if (others.Count == 0) return null;
|
if (others.Count == 0) return null;
|
||||||
|
|
||||||
return $"아직 풀지 않은 충돌이 {others.Count}건 있어 커밋하지 않았습니다. "
|
return $"아직 풀지 않은 충돌이 {others.Count}건 있어 커밋하지 않았습니다. "
|
||||||
+ "파일은 바꾸지 않았습니다. [해결로 저장] 으로 이 파일만 저장해 두고, 나머지를 다 푼 뒤 커밋하세요.";
|
+ "파일은 바꾸지 않았습니다. [Save] 로 이 파일만 저장해 두고, 나머지를 다 푼 뒤 커밋하세요.";
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>남은 충돌 수. 지금 막 저장한 파일은 뺀다. 저장 뒤 알림에 쓴다.</summary>
|
/// <summary>남은 충돌 수. 지금 막 저장한 파일은 뺀다. 저장 뒤 알림에 쓴다.</summary>
|
||||||
|
|||||||
@ -867,7 +867,7 @@ namespace MergeHub.ViewModels
|
|||||||
var newLine = SaveNewLine;
|
var newLine = SaveNewLine;
|
||||||
var remaining = 0;
|
var remaining = 0;
|
||||||
|
|
||||||
var ok = await _workspace.RunAsync("해결로 저장", () =>
|
var ok = await _workspace.RunAsync("Save", () =>
|
||||||
{
|
{
|
||||||
var isConflict = _workspace.Git.GetConflicts().Any(c => c.Path == path);
|
var isConflict = _workspace.Git.GetConflicts().Any(c => c.Path == path);
|
||||||
if (isConflict)
|
if (isConflict)
|
||||||
@ -899,8 +899,8 @@ namespace MergeHub.ViewModels
|
|||||||
RaiseCanExecuteChanged();
|
RaiseCanExecuteChanged();
|
||||||
|
|
||||||
MessageUtil.ShowSuccessToast(remaining == 0
|
MessageUtil.ShowSuccessToast(remaining == 0
|
||||||
? $"해결로 저장 · {Path.GetFileName(path)} · 남은 충돌 없음 - 이제 커밋할 수 있습니다"
|
? $"Save · {Path.GetFileName(path)} · 남은 충돌 없음 - 이제 커밋할 수 있습니다"
|
||||||
: $"해결로 저장 · {Path.GetFileName(path)} · 남은 충돌 {remaining}건");
|
: $"Save · {Path.GetFileName(path)} · 남은 충돌 {remaining}건");
|
||||||
});
|
});
|
||||||
|
|
||||||
// 새로고침 직후엔 게이트가 잠깐 막혀 목록 세우기가 건너뛰어진다. 기다렸다 다시 세운다.
|
// 새로고침 직후엔 게이트가 잠깐 막혀 목록 세우기가 건너뛰어진다. 기다렸다 다시 세운다.
|
||||||
|
|||||||
@ -1443,7 +1443,7 @@
|
|||||||
Git 모드가 아니면 병합도 없으므로 바깥에서 한 번 더 가린다. -->
|
Git 모드가 아니면 병합도 없으므로 바깥에서 한 번 더 가린다. -->
|
||||||
<StackPanel DockPanel.Dock="Bottom"
|
<StackPanel DockPanel.Dock="Bottom"
|
||||||
Visibility="{Binding IsGitMode, Converter={StaticResource BoolToVis}}">
|
Visibility="{Binding IsGitMode, Converter={StaticResource BoolToVis}}">
|
||||||
<Button Content="해결로 저장" MinHeight="34" Margin="0,8,0,0"
|
<Button Content="Save" MinHeight="34" Margin="0,8,0,0"
|
||||||
Command="{Binding SaveResolvedCommand}"
|
Command="{Binding SaveResolvedCommand}"
|
||||||
Visibility="{Binding Workspace.IsMergeInProgress, Converter={StaticResource BoolToVis}}"
|
Visibility="{Binding Workspace.IsMergeInProgress, Converter={StaticResource BoolToVis}}"
|
||||||
Style="{StaticResource FilledButton}"
|
Style="{StaticResource FilledButton}"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user