7차 D-1 기록: 네 길(병합 · pull · rebase · cherry-pick)을 처음부터 끝까지
코드 변경 없음. 새 시험 저장소에서 MergeHub 만으로 네 길 모두 커밋(rebase 끝)까지 갔다. 줄끝 · BOM 바뀐 파일 0, A-2 · B-1 다시 안 남, MERGED 줄 번호 안 잘림. 새로 걸린 것(고치지 않음 → 8차): - N1 파일 비교 탭을 처음 여는 것이 [3분할로 열기] 면 첫 충돌 파일이 보이고, 그 화면을 [Save] 하면 고른 파일에 그 내용이 써진다(Unit47 ← Unit15) - N2 rebase · cherry-pick 마지막 저장 뒤 "남은 차이"(A-1 은 병합만) - N3 MERGED 칸 번호가 결과 파일 번호가 아님 - N4 바뀌는 것 없는 cherry-pick 에서 [커밋] 이 켜져 실패 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
f256f0f038
commit
9bc47c0166
@ -261,6 +261,76 @@ MergeSaveTest 125건 · EncTest 48 · FolderTest 62 · ReportTest 31 · SearchTe
|
||||
- revert 충돌은 같은 길(`AfterConflicts` · `CommitPendingOperation`)을 쓰지만 화면으로 끝까지는 안 봤다.
|
||||
- 자동 조작 쪽: cherry-pick 첫 확인에서 [모든 브랜치] 를 켠 직후 목록 선택이 앱에 안 닿아 Accept 가 한 개만 풀렸다. 기다림을 넣고 다시 해 24 → 1 로 확인했다.
|
||||
|
||||
## D-1. 네 길을 처음부터 다시 끝까지 (2026-09-15, 완료)
|
||||
|
||||
지시서대로 **고치지 않고 적기만 했다.** 제품 코드는 한 줄도 안 바꿨다.
|
||||
|
||||
### 무엇으로 했나
|
||||
|
||||
- 길마다 시험 저장소를 `C1Repo` 로 새로 만들었다(실제 소스는 열지 않음). 충돌 26개(머지 주석만 다른 2개 포함) — 네 길 모두 같다.
|
||||
- pull 은 저장소를 `git clone --bare` 로 떠 원격으로 달고, 그 원격의 `feature/mine` 을 상대 쪽 커밋으로 옮겨 추적하게 했다(7차 C-1 과 같은 준비).
|
||||
- 네 길 모두 **같은 순서로 풀었다**(6차 D-1 과 같은 고르기):
|
||||
1. 충돌 탭에서 같은 줄 충돌 15개(Unit10~24)를 골라 Accept Theirs 한 번
|
||||
2. `Ui/Views/NewPanel.cs`(양쪽 새 파일)에 Accept Both → 묻는 창 [아니오]
|
||||
3. [3분할로 열기] → 저장하면 저절로 열리는 다음 파일마다 [다음 충돌] + Take Theirs / Take Mine 번갈아 → [Save].
|
||||
지운 파일 띠는 `ToBeDeleted` [파일 지우기] · `ToBeDeletedByMe` [파일 남기기]. 첫 파일에서 충돌이 남은 채 Save & Commit 을 한 번 누름
|
||||
4. 끝내기 단추(병합 커밋 · 계속 · 커밋)
|
||||
- 설정 `CSharpBraceStyle` 은 길마다 백업 → 끔 → 시험 → 원래 바이트로 되돌림(네 번 모두 해시 같음). 창 기억 파일은 "기억 없음" 으로 되돌림.
|
||||
- 확인 값은 git 과 커밋 blob 바이트로 읽었다. 결과 커밋의 파일마다 BOM · CRLF · LF · UTF-8 을 첫 부모와 견주고, 충돌 표식을 찾고,
|
||||
**`UnitN.cs` 안의 class 이름이 `UnitN` 인지**도 봤다(아래 N1 을 찾은 뒤 더한 검사).
|
||||
|
||||
### 네 길의 결과
|
||||
|
||||
| 확인 | ① 병합 | ② pull | ③ rebase | ④ cherry-pick |
|
||||
|---|---|---|---|---|
|
||||
| 시작 | [Merge → 현재 브랜치로] | 원격 [펴기] → [Pull] | [선택 브랜치 위로 rebase] | 이력 [모든 브랜치] → `상대 쪽 작업` [Cherry-pick] |
|
||||
| 알림 | 충돌 24건 (머지 주석만 다른 2건은 자동으로 풀림) … | 같음 | 같음 + "다 풀면 [계속] 으로 rebase 를 이어 갑니다" | 같음 + "다 풀면 [커밋] 으로 cherry-pick 을 끝냅니다" |
|
||||
| 머리 표시 · 진행 줄 | 병합 진행 중 · 남은 충돌 24개 · 푼 것 2개 (2/26) | 같음 | rebase 1/1 · 남은 충돌 24개 | cherry-pick 진행 중 · 남은 충돌 24개 |
|
||||
| 파일 단위 Accept Theirs 15개 | 24 → 9, 1.0초 | 같음 | 같음 | 같음 |
|
||||
| Accept Both | 먼저 묻는다 · [아니오] → git 그대로 `AA` | 같음 | 같음 | 같음 |
|
||||
| 충돌 남은 채 Save & Commit | 눌림 · git 그대로 · 커밋 없음 | 같음 | 꺼져 있음 | 꺼져 있음 |
|
||||
| 네 칸 REMOTE 제목 | `REMOTE · feature/theirs` | 같음 | `REMOTE · 다시 올리는 내 커밋 bf67020 내 쪽 작업` | `REMOTE · 가져오는 커밋 7fac93b 상대 쪽 작업` |
|
||||
| 네 칸 머리 글 | 병합 충돌 · REMOTE = feature/theirs | 같음 | rebase 충돌 · LOCAL = 올릴 자리 feature/theirs · REMOTE = 다시 올리는 내 커밋 bf67020 | cherry-pick 충돌 · REMOTE = 가져오는 커밋 7fac93b |
|
||||
| 3분할로 푼 파일(앱이 연 순서) | NewPanel · Unit47 · 한글설명 · LineEnding · Unit0(6) · 띠 둘 · View250 · Unit1(6) | 같음 | 같음 | 같음 |
|
||||
| 줄 고른 로그 | 18줄 · `Theirs(feature/theirs)` · `Mine(feature/mine)` | 같음 | 18줄 · `Theirs(커밋 bf67020)` · `Mine(feature/theirs)` | 18줄 · `Theirs(커밋 7fac93b)` · `Mine(feature/mine)` |
|
||||
| 마지막 Save 뒤 파일 비교 탭 | **충돌 정리 끝 · 병합 커밋을 할 수 있습니다 · 내 쪽 대비 받은 변경 3줄** · `… · 병합 전 내 쪽` | 같음 | **`2680b84 · Weld/Unit1.cs` · 남은 차이 3줄** (N2) | **`ecb7e47 · Weld/Unit1.cs` · 남은 차이 3줄** (N2) |
|
||||
| 다 푼 뒤 충돌 탭 | 충돌 정리 끝 · 푼 것 26개 - 병합 커밋을 할 수 있습니다 · [병합 커밋] 켜짐 | 같음 · 메시지 칸 `Merge remote-tracking branch 'origin/feature/mine' into feature/mine` | 충돌 정리 끝 - [계속] 으로 rebase 를 이어 갑니다 · [계속] 켜짐 | 충돌 정리 끝 - [커밋] 으로 cherry-pick 을 끝냅니다 · [커밋] 켜짐 |
|
||||
| 끝낸 커밋 | `fce391f` 부모 둘 · `Merge branch 'feature/theirs' into feature/mine` · 본문 없음 | `c70884c` 부모 둘 · `Merge remote-tracking branch 'origin/feature/mine' into feature/mine` | `rebase 완료 (1/1 단계)` · `e0302c2 내 쪽 작업` ← `2680b84 상대 쪽 작업` ← 바탕 | `17bbf0b` 부모 하나 · `상대 쪽 작업`(원래 메시지) |
|
||||
| 줄끝 · BOM · 인코딩이 첫 부모와 다른 파일 | **0 / 33** | **0 / 33** | **0 / 31** | **0 / 33** |
|
||||
| 충돌 표식 · class 이름이 다른 Unit 파일 | 0 · 0 | 0 · 0 | 0 · 0 | 0 · 0 |
|
||||
| 끝난 뒤 | 워킹트리 Clean · 진행 표시 · [작업 취소] 사라짐 · `.git` 에 MERGE_HEAD · MERGEHUB_CONFLICTS 없음 | 같음 | 같음 · rebase-merge 없음 | 같음 · CHERRY_PICK_HEAD 없음 |
|
||||
|
||||
### 판정 기준
|
||||
|
||||
| 기준 | 결과 |
|
||||
|---|---|
|
||||
| 네 길 모두 MergeHub 만으로 커밋(또는 rebase 끝)까지 | **됐다.** 터미널 git 은 저장소 · 원격 준비와 결과 확인에만 썼다 |
|
||||
| 줄끝 · BOM 이 바뀐 파일 0개 | **0.** 네 길 모두 |
|
||||
| A-1 이 다시 나지 않는다 | **병합 · pull 은 안 났다. rebase · cherry-pick 에서는 같은 증상이 난다**(N2) — A-1 은 "병합 중" 일 때만 말을 바꾸도록 고쳤다 |
|
||||
| A-2 가 다시 나지 않는다 | **안 났다.** 네 길 로그 72줄에 "3-Way 안 씀" 0, 네 칸 머리에 3-Way 콤보 없음 |
|
||||
| B-1 이 다시 나지 않는다 | **안 났다.** 병합 커밋 · pull 병합 커밋 뒤 `.git/MERGEHUB_CONFLICTS` 없음 |
|
||||
| #12 MERGED 칸 줄 번호 (`Motion/Unit0.cs` · `Weld/Unit1.cs` 끝 줄) | **잘리지 않는다.** 네 칸 화면에서 이동 칸에 끝 줄 번호를 넣고 찍음 — 3346 ~ 3363, 3770 ~ 3787 네 자리가 다 보인다. 다만 번호가 결과 파일 번호와 다르다(N3) |
|
||||
|
||||
### 새로 걸린 것 (고치지 않음 → 8차)
|
||||
|
||||
| # | 무엇 | 근거 |
|
||||
|---|---|---|
|
||||
| **N1** | **고른 충돌 파일 대신 다른 파일이 보이고, 그 화면을 [Save] 하면 고른 파일에 써진다.** 파일 비교 탭을 한 번도 열지 않은 채 충돌 탭에서 파일을 고르고 [3분할로 열기] 를 누르면 화면은 첫 충돌 파일(`Common/Util/Unit15.cs`)을 보인다. 거기서 Take Theirs → [Save] 하자 **`Common/Util/Unit47.cs` 가 Unit15 의 내용(123줄 · `class Unit15` · 고른 줄 · 머지 주석)으로 스테이징**됐고, Unit15 는 그대로 `UU`. 로그는 "충돌 해결(직접 편집 …): Common/Util/Unit47.cs". 화면은 30초 동안 Unit15 · "남은 충돌 1개" 그대로 | 병합 · pull 둘 다 같은 순서로 다시 났다(스크린샷 · 스테이징된 blob). 파일 비교 탭을 먼저 한 번 열어 두면 안 난다 — 네 길 확인은 그렇게 했다. 짚이는 곳: 탭이 처음 만들어질 때의 목록 세우기(첫 파일 로드)와 `OpenConflictAsync`(고른 파일)가 겹친다. `LoadFileAsync` 는 늦게 끝난 로드를 `IsGitMode` 로만 버리고 **읽는 사이 고른 파일이 바뀌었는지는 보지 않는다**(`HomeViewModel.cs:1291`). 코드를 읽어 짚은 것이라 원인은 확정하지 않았다. **남의 파일을 조용히 덮어쓰므로 8차에서 가장 먼저** |
|
||||
| N2 | rebase · cherry-pick 에서 마지막 [Save] 뒤 파일 비교 탭이 두 칸으로 떨어져 **"남은 차이 3줄"** 을 보인다. 충돌 탭은 "충돌 정리 끝 - [계속] (또는 [커밋]) …" 이라 두 화면이 다른 말을 한다 — A-1 과 같은 증상 | `Weld/Unit1.cs` 저장 직후. A-1 의 `ResolvedMergeSummary` · "병합 전 내 쪽" 은 `IsMergeInProgress`(병합 표시) 일 때만 쓰인다 |
|
||||
| N3 | MERGED 칸 줄 번호가 **결과 파일 번호가 아니라 원래 내 쪽 번호로 보인다.** `Motion/Unit0.cs` 는 고른 줄 · 주석으로 3줄이 늘어 상태바는 "3366행 · 총 3366줄" 인데 MERGED 칸 끝 번호는 3363 이고 줄마다 LOCAL 칸과 같은 번호 | 네 칸 스크린샷. MERGED 칸 번호는 `LocalNumberText`(정렬 때 정한 번호)라 편집 뒤 다시 매기지 않는 것으로 보인다. 설계일 수도 있어 8차에서 정한다 |
|
||||
| N4 | 바뀌는 것 없는 cherry-pick(HEAD 커밋을 다시)에서 **[커밋] 이 켜지고, 누르면 로그에만 "[cherry-pick 커밋] 실패: No changes; nothing to commit."** 이 남는다. 진행 표시 · 진행 줄 "충돌 정리 끝 - [커밋] 으로 cherry-pick 을 끝냅니다" 가 그대로라 같은 단추를 또 누르게 된다. [작업 취소] 로는 빠져나온다 | C-2 에서 적어 둔 것을 다시 봤다. 알림 문장은 자동 조작이 못 읽었다 |
|
||||
|
||||
### 확인하며 알게 된 것 (제품 결함 아님)
|
||||
|
||||
- **사용자 이름 창.** 켤 때마다 뜨는 이름 창(플랫폼 E-3)이 떠 있어도 UI 자동화는 뒤의 본 창 단추를 누를 수 있다. 첫 병합 확인은 창을 닫지 않은 채 돌아 **사람이 갈 수 없는 길**이었다. 창을 [저장] 으로 닫고 병합을 다시 했다(위 표 ①). 사람의 마우스 · 키보드는 막히므로 E-3 결함은 아니다.
|
||||
- **Pull 단추**는 접힌 원격 영역 안에 있다(설정 `GitRemoteExpanded` 꺼짐). 첫 pull 확인은 단추를 못 찾아 멈췄다 — 사람처럼 [▸ 원격 저장소 · 계정 펴기] 를 누르게 했다.
|
||||
- 한 번 멈춘 pull 확인에서 N1 을 처음 봤다. 그때 [Save] 가 Unit47 을 Unit15 내용으로 덮었고, 끝낼 수 없어 그 저장소는 버렸다.
|
||||
- 줄끝 검사는 N1 같은 **내용 뒤바뀜을 못 잡는다**(Unit15 · Unit47 둘 다 BOM · CRLF). 이번부터 class 이름 검사를 더했다.
|
||||
- `Recipe/ToBeDeletedByMe.cs` 를 남기면 git 상태가 `R`(이름 바뀜)로 읽힌다 — 같은 크기의 `ToBeDeleted.cs` 를 지운 것과 짝지어 보는 git 의 이름 추적이다. 커밋 결과는 각각 지움 · 남김으로 맞다.
|
||||
- 결과 확인 스크립트가 부모 하나인 커밋(rebase · cherry-pick)에서 merge-base 오류를 냈지만 줄끝 판정은 첫 부모와 제대로 했다.
|
||||
|
||||
코드는 바꾸지 않았으므로 검사는 그대로 · 빌드 경고 0 · 오류 0.
|
||||
|
||||
## E-4. 창 크기를 마음대로 조절할 수 있게 (2026-09-15, 추가 요청, 완료 · 플랫폼)
|
||||
|
||||
사용자: "현재는 화면크기 최대화만 지원인데 이거 크기를 마음대로 조절할수있게 할수있겠어?" — 하는 중에 두 가지를 더 정했다.
|
||||
|
||||
@ -8,6 +8,7 @@
|
||||
|
||||
| 날짜 | 항목 | 커밋 |
|
||||
|---|---|---|
|
||||
| 2026-09-15 | **7차 D-1** — 병합 · pull · rebase · cherry-pick 을 새 저장소에서 MergeHub 만으로 끝까지(코드 변경 없음). 네 길 모두 커밋까지 · 줄끝 · BOM 바뀐 파일 0 · A-2 · B-1 다시 안 남 · MERGED 줄 번호 안 잘림. 새로 걸린 것: **N1 파일 비교 탭을 처음 여는 것이 [3분할로 열기] 면 다른 파일이 보이고 그대로 [Save] 하면 고른 파일에 그 내용이 써짐** · N2 rebase · cherry-pick 마지막 저장 뒤 "남은 차이"(A-1 이 병합만) · N3 MERGED 번호가 결과 번호가 아님 · N4 빈 cherry-pick [커밋] 이 켜져 실패 → 8차 | 아래 |
|
||||
| 2026-09-15 | **7차 E-4** — 셸 창이 최대화 전용이었다. 가장자리를 끌어 크기 조절(최소 1280×720 DIP) · 브랜딩 바 두 번 누르기 최대화 ↔ 복원 · 보통 크기로 끌면 크기 그대로 · 화면 이동이 DIP 크기를 지킴 · 마지막 크기 · 모니터 · 최대화 기억. 최대화는 작업 표시줄까지 덮는다(사용자 결정 — 틀을 붙인 뒤 작업 표시줄이 하단 탭 바를 가려 최대화 동안 틀을 뗌). 크기를 바꿀 때 창이 검게 깜빡이던 것(99.7% → 3%). 플랫폼 수정 · 배포, MergeHub 코드 변경 없음 | 아래 |
|
||||
| 2026-09-15 | **7차 C-2** — rebase · cherry-pick 충돌을 화면이 모두 "병합" 으로 불렀다(REMOTE · THEIRS, cherry-pick 에 "병합 진행 중", 다 풀면 끝낼 단추가 없음, 로그에 `RebaseContinue()` · `Commit()`, 다른 브랜치 커밋을 cherry-pick 할 수 없음). 작업 상태(`GitOperationState`)로 칸 제목 · 머리 글 · 진행 표시 · 끝내기 단추(병합 커밋 · 계속 · 커밋)를 정하고, cherry-pick · revert 는 원래 메시지 · 작성자로 커밋. 머지 주석 자동 풀기도 함께. 이력 탭 [모든 브랜치]. 두 길 모두 MergeHub 만으로 끝까지, 줄끝 바뀐 파일 0 | 아래 |
|
||||
| 2026-09-14 | **7차 지시서에 E-4 추가** — 사용자 요청 "창 크기를 마음대로 조절". 지금은 셸이 최대화 전용(테두리 없음 · 크기 고정 · 끌면 다시 최대화). 걸리는 곳(크기 조절 테두리 · 배율 다른 모니터 · 크기 기억 · MergeHub 고정 폭과 네 칸 정렬 · 모든 소비 프로그램)과 판정 기준을 적음. 코드 변경 없음 | 아래 |
|
||||
|
||||
@ -170,7 +170,7 @@
|
||||
|
||||
| 상태 | 항목 |
|
||||
|---|---|
|
||||
| 대기 | D-1 세 길을 처음부터 다시 끝까지 (+ 6차에서 안 본 MERGED 줄 번호) |
|
||||
| **완료** | D-1 네 길(병합 · pull · rebase · cherry-pick)을 처음부터 다시 끝까지 — 모두 MergeHub 만으로 커밋(rebase 끝)까지, 줄끝 · BOM 바뀐 파일 0. A-2 · B-1 다시 안 남, A-1 은 rebase · cherry-pick 에서 다시 남. MERGED 줄 번호 안 잘림. 새로 걸린 넷(N1 **고른 파일 대신 다른 파일 내용이 저장됨** · N2 · N3 · N4)은 8차 재료(고치지 않음) |
|
||||
|
||||
### E. 추가 요청
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user