Ubisam-MergeTool/doc/history/2026-09-18-11차.md
ksj09406 500afdd992 11차 A-2: 뽑은 폴더 옆에 변경분 안내 파일
사용자 결정(2026-09-18): 안내는 폴더 밖(옆)에 · 지울 파일은 목록으로만.

- Services/ExportReport.cs (새 파일): 머리글(만든 때 · 사람 · 저장소 · 뽑은 곳 · 범위 두 줄) · 뽑은 파일 목록(추가 · 수정 · 이름 바뀜은 옛 이름 병기) · 장비에서 지워야 할 파일 목록. PathFor 가 폴더 옆 이름을 정함
- GitService.ExportChangedFiles 가 무엇을 어떻게 했는지 목록까지 돌려줌 (IGitService 같이)
- GitViewModel: 뽑은 뒤 안내를 폴더 옆에 쓰고 경로를 로그에. 안내를 못 써도 추출은 성공으로 둔다
- 하네스 ReportTest +14 (31 → 45), 22벌 1,173건 통과, 빌드 경고 0 오류 0
- 화면 확인: 범위 4eb9ece→cbcad8a 안내가 git diff -M 과 같음(뽑은 3 · 지울 2), 병합 커밋은 '(고른 커밋의 부모)' 표시

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-18 15:30:27 +09:00

12 KiB

11차 진행 기록 (2026-09-18 ~)

지시서: ../작업지시/11차.md

A-1. 변경분 추출을 먼저 뽑아 보고 적는다 (2026-09-18, 완료 · 고치지 않음)

지시서대로 고치지 않고 적기만 했다. 제품 코드는 바꾸지 않았다.

무엇으로 했나

  • C1Repo 로 저장소를 새로 만든 뒤 e11-a1-setup.sh 로 추출 시험용 커밋을 더 쌓았다(전부 지어낸 파일).
커밋 무엇
4eb9ece base 내 쪽 작업 (C1Repo 의 feature/mine)
d3eb15b c1 새 파일 Extract/Temp.cs · Io/Unit12.cs 한 줄 더함
f884ed1 c2 Recipe/Unit11.cs 지움 · Motion/Unit16.cs → Motion/Renamed16.cs(내용 그대로) · 이진 Extract/logo.bin · 한글폴더/깊은/경로/아래/설명.cs
cbcad8a c3 Io/Unit12.cs 를 c1 전으로 되돌림 · Extract/Temp.cs 지움 (범위 안에서 생겼다 사라짐)
f702996 side · 58d5f7f merge base 에서 갈라진 옆가지에 Side/SideOnly.cs, 그것을 --no-ff 로 병합
  • 화면은 사람 순서로: Git 탭 → 이력에서 줄을 마우스로 고르고 [여기부터] · [해제] · [변경분 추출], 폴더 창에는 경로를 쳐 넣고 Enter.
  • 뽑은 폴더는 git diff -M --name-status 의 기대 목록과 견주고, 파일마다 git hash-object --no-filters 로 바이트(blob 해시) 를 대조했다.

아홉 경우의 결과

# 경우 알림 뽑힌 것 git 과 견주면
1 커밋 하나(시작점 없음, c1) "2개 파일 추출" Extract/Temp.cs · Io/Unit12.cs 같음 · 바이트 같음
2 범위 [여기부터] base → c3 "3개 파일 추출 (삭제되어 건너뜀 1개)" Extract/logo.bin · Motion/Renamed16.cs · 한글폴더/…/설명.cs 같음 — 범위 안에서 생겼다 사라진 Temp.cs, 바뀌었다 되돌아온 Unit12.cs 는 들어가지 않는다(맞다)
3 지운 파일이 있는 범위 위와 같은 알림 — 건너뛴 개수만 알린다. Recipe/Unit11.cs 라는 것은 화면 · 로그 · 폴더 어디에도 없다
4 이름 바뀐 파일 — Motion/Renamed16.cs (새 이름) 새 경로로 바이트 그대로. 옛 경로(Motion/Unit16.cs)를 알 길이 없다 — 장비에 덮어 넣으면 옛 파일이 남는다
5 병합 커밋 하나(merge) "1개 파일 추출" Side/SideOnly.cs 첫 부모(c3)와만 견준다. 둘째 부모(옆가지)와 견주면 4개인데, 지금 무엇과 견주는지는 화면에 없다
6 거꾸로 범위 [여기부터] c3 → base "2개 파일 추출 (삭제되어 건너뜀 2개)" Motion/Unit16.cs · Recipe/Unit11.cs git 의 diff c3 base 와 같음(되돌리는 방향으로 동작). 경고나 방향 표시는 없다
7 이진 · 한글 · 깊은 경로 2 와 같음 logo.bin 278B · 설명.cs 50B 바이트 · 경로 그대로
8 이미 파일이 있는 폴더 "3개 파일 추출 (삭제되어 건너뜀 1개)" 폴더 안 6개 묻지 않고 덮어쓴다. 앞서 뽑아 둔 Extract/Temp.cs · Io/Unit12.cs(c1 것)와 사람이 넣어 둔 사용자메모.txt 가 그대로 남아 섞인다
9-a 대상 파일이 읽기 전용 "변경분 추출 실패: … 액세스가 거부되었습니다" 2개(logo.bin + 읽기 전용 그대로) 반쯤 뽑힌 채 멈춘다 — 앞 순서 logo.bin 은 써졌고 뒤 순서 한글…설명.cs 는 빠졌다. 몇 개까지 됐는지는 알림에 없다
9-b 대상 파일이 다른 프로그램에 열려 있음 "… 다른 프로세스에서 사용 중이므로 …" 2개 9-a 와 같은 모양
  • 알림과 같은 글이 Git 탭 로그에도 남는다 — 성공은 변경분 추출: N개 파일 → 경로 (삭제되어 건너뜀 M개), 실패는 [변경분 추출] 실패: ….
  • 범위 표시는 제대로 바뀐다: 시작점이 없으면 부모 → 고른 커밋, [여기부터] 를 누르면 4eb9ece → 고른 커밋.
  • 폴더 창은 늘 저장소가 있는 폴더에서 열린다.
  • 저장소 워킹트리는 아홉 경우 내내 Clean 이었다(추출은 읽기만 한다).

이걸로 확정된 것 (A-2 ~ A-4 로 넘긴다)

번호 확정된 문제 어디로
① 지운 파일 · 이름 바뀐 옛 경로가 결과에 남지 않는다(경우 3 · 4) A-2
② 무엇과 무엇 사이를 뽑았는지 폴더에 남지 않는다(경우 5 · 6 — 병합 커밋은 첫 부모, 거꾸로 범위도 말없이 됨) A-2
③ 비어 있지 않은 폴더에 묻지 않고 덮어쓰고 옛 파일이 섞인다(경우 8) A-3
④ 쓰다 막히면 반쯤 뽑힌 채 멈추고, 어디까지 됐는지 알 수 없다(경우 9-a · 9-b) A-3 에 덧 — 먼저 쓸 수 있는지 보고 시작할지, 실패해도 나머지를 계속할지 정한다

맞게 도는 것(고칠 것 없음): 파일 고르기(1 · 2 · 5 · 6 모두 git 과 같은 목록) · 바이트 보존(이진 · 한글 · 깊은 경로 포함) · 범위 표시 · 로그.

남긴 것 (시험 도구 쪽, 제품 아님)

화면 자동 조작에서 세 번 막혔다. 모두 스크립트 문제였고 제품과 무관하다.

  • 함수 이름 History 가 PowerShell 기본 별칭(history = Get-History)과 겹쳐, 내 함수 대신 그것이 불렸다 → GoHistory 로 바꿈.
  • 폴더 창(#32770)은 데스크톱 바로 아래가 아니라 본 창 아래에 붙는다 → 본 창의 자손에서 찾게 고침.
  • 폴더 창의 경로 칸(id 1152)과 [이 폴더 선택](id 1)은 UIA 에서 Pane 으로 보이고, 같은 id 를 가진 다른 칸이 먼저 잡혔다 → id + 클래스(Edit · Button)로 고르고, 경로를 한 글자씩 친 뒤 Enter 로 닫게 함.
  • 백그라운드로 돌리면 앱 창이 앞으로 나오지 못해 마우스가 다른 창을 누른다 → 앞에서 돌린다.

A-2. 뽑은 폴더 옆에 "무엇을 뽑았는지" 안내를 남긴다 (2026-09-18, 완료)

사용자 결정(2026-09-18): 안내는 뽑은 폴더 밖(옆) 에 두고, 장비에서 지울 파일은 목록으로만 적는다(지우는 배치 파일은 만들지 않는다).

왜

A-1 에서 값으로 확인한 것 — 지운 파일은 "삭제되어 건너뜀 1개" 라고 개수만 알리고 어느 파일인지 아무 데도 없었다. 이름이 바뀐 파일은 새 이름만 뽑혀, 그 폴더를 장비에 덮어 넣으면 옛 파일이 그대로 남는다. 무엇과 무엇 사이를 뽑았는지도 폴더만 보고는 알 수 없었다.

고친 것

자리 한 일
Services/ExportReport.cs (새 파일) 안내 글을 만든다. 머리글(만든 때 · 만든 사람 · 저장소 · 뽑은 곳 · 범위 두 줄) · 뽑은 파일 목록(추가 · 수정 · 이름 바뀜은 옛 이름을 괄호로) · 장비에서 지워야 할 파일 목록(지워진 파일 · 이름 바뀐 옛 경로). PathFor 가 폴더 옆 이름을 정한다 — …\변경분 → …\변경분_변경분안내.txt, 드라이브 뿌리처럼 옆자리가 없으면 폴더 안에
Services/GitService.cs ExportChangedFiles 가 (뽑은 수, 건너뛴 수, **무엇을 어떻게 했는지 목록**) 을 돌려준다. git 의 상태 글자(Added · Renamed · Copied …)를 안내 글의 말로 옮기고, 이름이 바뀐 파일은 옛 경로를 함께 들고 온다
Services/IGitService.cs 같은 서명으로
ViewModels/GitViewModel.cs 뽑은 뒤 안내를 폴더 옆에 쓴다(TextFile.Write). 범위 줄은 이력에 있는 커밋이면 제목과 날짜까지, 시작점을 안 잡았으면 "(고른 커밋의 부모)" 를 붙인다. 안내 파일 경로를 로그에 남기고, 알림도 "지워야 할 파일 N개는 안내에" 로 바꿈. 안내를 못 써도 추출 자체는 실패로 만들지 않는다(파일은 이미 다 뽑힌 뒤다)
하네스 ReportTest +14건(31 → 45) — 머리글 · 범위 두 줄 · 요약 수 · 이름 바뀜 표기 · 지울 목록 · 지운 파일이 뽑은 목록에 없음 · 한글 경로 · 빈 목록 · 만든 사람 없음 · 폴더 옆 이름 세 가지

확인한 것 — 화면에서 뽑아 git 과 대조

경우 안내에 적힌 것 git diff -M --name-status
범위 4eb9ece → cbcad8a 뽑은 3개(추가 Extract/logo.bin · 이름 바뀜 Motion/Renamed16.cs (옛 이름 Motion/Unit16.cs) · 추가 한글폴더/깊은/경로/아래/설명.cs) · 지울 2개(옛 이름 Motion/Unit16.cs · 지워짐 Recipe/Unit11.cs) A logo.bin · R100 Unit16.cs → Renamed16.cs · D Unit11.cs · A 설명.cs — 같음
병합 커밋(시작점 없음) 범위 cbcad8a … (고른 커밋의 부모) → 58d5f7f … · 뽑은 1개 Side/SideOnly.cs · 지울 0개 같음
  • 안내 파일은 폴더 옆에 생긴다(note2b_변경분안내.txt · note5_변경분안내.txt). 폴더 안에는 뽑은 파일만 있다.
  • 알림: "3개 파일 추출 (지워야 할 파일 1개는 안내에)" · "1개 파일 추출 · 안내 note5_변경분안내.txt". Git 탭 로그에 안내 경로도 남는다.
  • 하네스 22벌 1,173건 통과(1,159 → +14) · 빌드 경고 0 · 오류 0.

남긴 것 (시험 도구 쪽)

  • 화면 잠금이 걸린 동안에는 마우스가 데스크톱에 닿지 않는다(커서 좌표가 0,0 으로 돌아가고 화면 캡처가 실패한다). 잠긴 줄 모르고 "클릭이 안 먹는다" 로 두 번 헤맸다 — 앞으로는 커서 자리와 맨 앞 창부터 본다.
  • 목록에서 스크롤이 필요한 줄은 누를 때마다 자리를 다시 읽어야 한다. 옛 자리로 누르면 조용히 빗나가고, 그 뒤 [여기부터] 가 엉뚱한 커밋(HEAD)으로 잡혀 범위가 거꾸로 됐다.
  • PowerShell 변수는 대소문자를 안 가린다 — $S(경로)와 $s(파일 글)가 겹쳐 경로가 깨졌다(9차 A-2 와 같은 종류).

F-12. C# 코드 스타일 맞춤의 기본값을 AURORA 로 (2026-09-18, 완료)

사용자: "기본값은 원본형태를 따르고 C#인 경우에 AURORA 스타일로 하자" → 물어서 정한 것은 제품 기본값 AURORA · C# 파일만 · 저장 동작은 지금 그대로(켜져 있으면 저장도 그 스타일로 쓴다).

알아본 것

  • C/C++ · XAML 은 고칠 것이 없었다. 스타일 맞춤은 CSharpStyle.Applies 가 확장자 .cs 만 보므로(Services/CSharpStyle.cs:60) 설정이 무엇이든 다른 파일은 원본 그대로 견준다.
  • 그래서 바뀐 것은 설정 기본값 한 줄뿐이다.

고친 것

자리 고친 것
MergeHubSettings.cs:77 CSharpBraceStyle 기본값 None → Aurora. 왜 그렇게 정했는지와 "C# 파일에만 걸린다" 를 주석으로 남김
웹 문서 매뉴얼 "기본은 끔" → "기본은 AURORA(2026-09-18 결정) · 끄려면 콤보에서 [맞추지 않음]" · "C# 파일에만 걸린다" 한 줄 더함
웹 문서 설정 표 기본값 칸 끔 → AURORA, ".cs 파일에만 걸린다"
웹 문서 시연 대본 "스타일 맞춤은 끔으로 둔다" → "기본이 AURORA 이므로 시연 전에 [맞추지 않음] 으로 바꿔 둔다"
하네스 StyleTest +12건(78 → 90) — 설정 기본값이 AURORA 인지, .cpp · .h · .hpp · .c · .xaml · .py · .txt · .cs.txt 는 안 걸리는지, .cs · .CS · 한글 경로 .cs 는 걸리는지. 고치기 전에 먼저 넣어 기본값 검사만 실패하는 것을 보고 시작했다

확인한 것 — 설정 파일이 없는 첫 실행 (e11-f12.ps1)

설정 파일을 백업해 치우고, 중괄호 자리만 다른 짝 두 벌을 명령줄(--diff)로 열었다.

무엇 결과
C# 짝(left.cs Allman · right.cs AURORA) 요약 "차이 없음" · 상태바 무시: 머지 주석 · C# AURORA (e11-f12-cs.png)
C++ 짝(left.cpp · right.cpp, 같은 모양의 중괄호 차이) 요약 "남은 차이 4줄" — 원본 그대로 (e11-f12-cpp.png)
앱이 새로 만든 설정 파일 "CSharpBraceStyle": 1 (= Aurora)
설정 파일 되돌림 해시 같음
  • 하네스 22벌 1,159건 통과(1,147 → +12) · 빌드 경고 0 · 오류 0.
  • 이미 설정 파일이 있는 PC 는 그 값을 그대로 쓴다. 이번 변경은 설정이 없는 첫 실행에만 닿는다.