From aed24b9bfa93fe9df6eeec6ffacb903328d9fc9c Mon Sep 17 00:00:00 2001 From: ksj09406 Date: Mon, 14 Sep 2026 14:09:50 +0900 Subject: [PATCH] =?UTF-8?q?C#=20=EC=8A=A4=ED=83=80=EC=9D=BC=20Default=20?= =?UTF-8?q?=EB=A5=BC=20Allman=20=EC=9C=BC=EB=A1=9C=20=EC=9D=B4=EB=A6=84=20?= =?UTF-8?q?=EB=B0=94=EA=BF=88=20=C2=B7=20=EC=9B=B9=20=EB=AC=B8=EC=84=9C(?= =?UTF-8?q?=EB=A7=A4=EB=89=B4=EC=96=BC=C2=B7=EB=B0=9C=ED=91=9C=C2=B7?= =?UTF-8?q?=EA=B8=B0=ED=9A=8D=EC=95=88=C2=B7=EC=8B=9C=EC=97=B0)=20?= =?UTF-8?q?=EC=9B=90=EB=B3=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 --- demo/README.md | 4 +- demo/make-demo.ps1 | 2 +- demo/style/{Default.cs => Allman.cs} | 0 demo/tools/DemoMaker/Program.cs | 6 +- doc/history/2026-09-14-6차.md | 12 +- doc/history/changelog.md | 2 +- doc/web/index.html | 1424 ++++++++++++++++++++++ doc/진행상황.md | 2 +- src/MergeHub/MergeHubSettings.cs | 4 +- src/MergeHub/Services/CSharpStyle.cs | 8 +- src/MergeHub/ViewModels/HomeViewModel.cs | 2 +- src/MergeHub/Views/HomeView.xaml | 2 +- 12 files changed, 1446 insertions(+), 22 deletions(-) rename demo/style/{Default.cs => Allman.cs} (100%) create mode 100644 doc/web/index.html diff --git a/demo/README.md b/demo/README.md index b308553..73a0e6a 100644 --- a/demo/README.md +++ b/demo/README.md @@ -17,7 +17,7 @@ powershell -ExecutionPolicy Bypass -File demo\make-demo.ps1 | 폴더 | 시연 | 볼 것 | |---|---|---| | `plain\left` · `plain\right` | 폴더 비교 | 같음 `Same.cs` · 다름 `CodeDiff.cs` · 주석만 다름 `CommentOnly.cs` · 머지 주석만 다름 `MergeNoteOnly.cs` · C# 스타일만 다름 `StyleOnly.cs` · 한쪽만 `LeftOnly.cs` / `RightOnly.cs` · XAML `Views\Recipe.xaml` · CP949 한글 `한글설명.cs` · 이진 `Logo.png` | -| `style\Default.cs` · `style\Aurora.cs` | C# 스타일 맞춤 | 스타일 끔 **남은 차이 39줄** → AURORA 또는 Default **1줄**(`RetryCount` 3 → 5, 진짜 변경) | +| `style\Allman.cs` · `style\Aurora.cs` | C# 스타일 맞춤 | 스타일 끔 **남은 차이 39줄** → AURORA 또는 Allman **1줄**(`RetryCount` 3 → 5, 진짜 변경) | | `mergetool\` | `git mergetool` 네 칸 | BASE · LOCAL · REMOTE 세 벌, 결과 `Weld.cs` 는 git 모양 충돌 표시. 충돌 1 · 상대만 고친 줄 1 | | `big\` | 큰 파일 | 7,479줄. 끝까지 줄 번호 · "마지막 차이" 로 멀리 건너뛰기 | | `D:\MergeHubDemo\repo` | 병합 | 아래 | @@ -39,7 +39,7 @@ mergetool 네 칸으로 열기: | `Line/Conveyor.cs` | 같은 줄을 양쪽이 다르게 고침 | 충돌 → 네 칸에서 줄 단위로 | | `Line/Laser.cs` | 코드 줄 위에 서로 다른 머지 주석 줄 | **자동으로 풀림**, 두 주석이 다 남음 | | `Line/Camera.cs` | 코드 줄 끝에 서로 다른 머지 주석 | **자동으로 풀림**, 한 줄 끝에 두 주석 | -| `Line/Style.cs` | 내 쪽 AURORA + 값 4, 상대 Default + 값 6 | 충돌. C# AURORA 를 고르면 남은 차이 39줄 → 1줄 | +| `Line/Style.cs` | 내 쪽 AURORA + 값 4, 상대 Allman + 값 6 | 충돌. C# AURORA 를 고르면 남은 차이 39줄 → 1줄 | | `Line/NewPanel.cs` | 양쪽이 같은 이름으로 새 파일 | 충돌(BASE 없음) | | `Line/ToBeDeleted.cs` | 내가 고침 · 상대가 지움 | [파일 남기기] / [파일 지우기] | | `Line/한글설명.cs` | CP949 한글 파일에서 같은 줄 | 충돌, 저장해도 CP949 유지 | diff --git a/demo/make-demo.ps1 b/demo/make-demo.ps1 index 99524b8..df383a1 100644 --- a/demo/make-demo.ps1 +++ b/demo/make-demo.ps1 @@ -5,7 +5,7 @@ # # 만드는 것 # demo\plain\left · right 폴더 비교 -# demo\style\Default.cs · Aurora.cs C# 스타일 맞춤 +# demo\style\Allman.cs · Aurora.cs C# 스타일 맞춤 # demo\mergetool\... git mergetool 네 칸 # demo\big\... 7,479줄 큰 파일 # -RepoRoot (기본 D:\MergeHubDemo\repo) 병합 시연 저장소 - 매번 지우고 새로 만든다 diff --git a/demo/style/Default.cs b/demo/style/Allman.cs similarity index 100% rename from demo/style/Default.cs rename to demo/style/Allman.cs diff --git a/demo/tools/DemoMaker/Program.cs b/demo/tools/DemoMaker/Program.cs index ebd7eb5..14a1a87 100644 --- a/demo/tools/DemoMaker/Program.cs +++ b/demo/tools/DemoMaker/Program.cs @@ -8,7 +8,7 @@ using MergeHub.Services; // // demo 폴더 아래 (저장소에 커밋해 둔다) // plain\left, plain\right 폴더 비교 -// style\Default.cs, style\Aurora.cs C# 스타일 맞춤 +// style\Allman.cs, style\Aurora.cs C# 스타일 맞춤 // mergetool\Weld_BASE.cs · Weld_LOCAL.cs · Weld_REMOTE.cs · Weld.cs git mergetool 네 칸 // big\Big7479_left.cs · Big7479_right.cs 큰 파일 // 저장소 경로 (기본 D:\MergeHubDemo\repo, 커밋하지 않는다 - 매번 새로 만든다) @@ -86,14 +86,14 @@ void ResetFolder(string dir) ResetFolder(dir); var sample = StyleSample(); - WriteText(Path.Combine(dir, "Default.cs"), sample); + WriteText(Path.Combine(dir, "Allman.cs"), sample); // AURORA 스타일로 바꾸고 진짜 변경을 한 줄 넣는다 - 스타일을 맞추면 이 한 줄만 남는다. var aurora = CSharpStyle.Format(sample, CSharpBraceStyle.Aurora) .Replace("public int RetryCount { get; set; } = 3;", "public int RetryCount { get; set; } = 5;"); WriteText(Path.Combine(dir, "Aurora.cs"), aurora); - Console.WriteLine($" style\\Default.cs ({sample.Split('\n').Length - 1}줄) · style\\Aurora.cs ({aurora.Split('\n').Length - 1}줄, 진짜 변경 1줄)"); + Console.WriteLine($" style\\Allman.cs ({sample.Split('\n').Length - 1}줄) · style\\Aurora.cs ({aurora.Split('\n').Length - 1}줄, 진짜 변경 1줄)"); } // ================= 3. git mergetool 네 칸 ================= diff --git a/doc/history/2026-09-14-6차.md b/doc/history/2026-09-14-6차.md index 611eac1..d329e29 100644 --- a/doc/history/2026-09-14-6차.md +++ b/doc/history/2026-09-14-6차.md @@ -694,7 +694,7 @@ MERGED 는 git 이 충돌 표시를 넣어 둔 파일이라, 두 칸으로는 ## E-1. C# 코드 스타일 맞춤 (2026-09-14, 추가 요청, 완료) -사용자 요청: Visual Studio [텍스트 편집기 > C# > 코드 스타일 > 서식 > 줄 바꿈] 옵션 그림과 같은 스타일(AURORA)이 아니면 diff 가 많이 뜬다. C# 이면 그 스타일로 자동으로 맞춰 달라. AURORA 와 Default 를 고를 수 있게. +사용자 요청: Visual Studio [텍스트 편집기 > C# > 코드 스타일 > 서식 > 줄 바꿈] 옵션 그림과 같은 스타일(AURORA)이 아니면 diff 가 많이 뜬다. C# 이면 그 스타일로 자동으로 맞춰 달라. AURORA 와 Allman 를 고를 수 있게. ### 그림에서 읽은 AURORA @@ -705,14 +705,14 @@ MERGED 는 git 이 충돌 표시를 넣어 둔 파일이라, 두 칸으로는 | "else" · "catch" · "finally" 새 줄 | 끔(`} else {`) | | 개체 초기화 멤버 · 익명 형식 멤버 · 쿼리 절 새 줄 | ✓ (손대지 않는다) | -Default 는 Visual Studio 기본 - 모두 새 줄. +Allman 은 모두 새 줄(Visual Studio 기본값과 같다). 처음에는 Default 라고 불렀으나 사용자 요청으로 바꿨다 - 팀에서 Default 는 C++ 스타일을 가리킨다. ### 만든 것 | 파일 | 무엇 | |---|---| | `Services/CSharpStyle.cs` (새) | 중괄호 · else/catch/finally 의 **줄 위치만** 옮긴다. 주석 · 문자열 · 보간 문자열 · 전처리 줄은 가려서 본다. 중괄호 앞 머리를 거꾸로 읽어 갈래(형식 · 메서드 · 속성 · 접근자 · 익명 메서드 · 제어 · 익명 형식 · 초기화 · 람다)를 정하고 옵션표대로 올리거나 내린다. 앞 줄 끝에 주석이 있으면 올리지 않는다. 판단할 수 없는 블록은 그대로. 바꿀 것이 없으면 받은 글 그대로 | -| `ViewModels/HomeViewModel.cs` | 비교 규칙 칸에 [C# 스타일 끔 / C# AURORA / C# Default]. 고르면 원본부터 다시 읽어 BASE · LOCAL · REMOTE 를 맞춘다(Git 두 칸 · 네 칸 · 파일 두 개 · mergetool). 편집 칸 글이 바뀌면 저장할 것이 있는 상태, 저장하면 그 스타일로 파일에 쓴다. **스타일만 바뀐 편집은 파일을 바꿀 때 묻지 않는다**(묻게 두면 파일마다 창이 뜬다). 상태바 요약에 스타일 | +| `ViewModels/HomeViewModel.cs` | 비교 규칙 칸에 [C# 스타일 끔 / C# AURORA / C# Allman]. 고르면 원본부터 다시 읽어 BASE · LOCAL · REMOTE 를 맞춘다(Git 두 칸 · 네 칸 · 파일 두 개 · mergetool). 편집 칸 글이 바뀌면 저장할 것이 있는 상태, 저장하면 그 스타일로 파일에 쓴다. **스타일만 바뀐 편집은 파일을 바꿀 때 묻지 않는다**(묻게 두면 파일마다 창이 뜬다). 상태바 요약에 스타일 | | `Services/FolderComparer.cs` · `FolderViewModel.cs` | 스타일만 다른 C# 파일은 **같음**. 줄끝이 다르면 가리지 않는다 | | `MergeHubSettings.cs` | [비교 옵션] "C# 코드 스타일 맞춤", 기본 끔 | @@ -720,16 +720,16 @@ Default 는 Visual Studio 기본 - 모두 새 줄. ### 확인한 것 -만든 시연 재료(`demo\style\Default.cs` 132줄, `Aurora.cs` 는 같은 코드를 AURORA 로 맞추고 값 한 줄 `RetryCount` 3 → 5). +만든 시연 재료(`demo\style\Allman.cs` 132줄, `Aurora.cs` 는 같은 코드를 AURORA 로 맞추고 값 한 줄 `RetryCount` 3 → 5). | 확인 | 남은 차이 | 저장 | |---|---|---| | 스타일 끔 | **39줄** | 꺼짐 | | C# AURORA | **1줄** (RetryCount) | 꺼짐 - 편집 칸이 이미 AURORA | -| C# Default | 1줄 | **켜짐** - 편집 칸이 Default 로 바뀜 | +| C# Allman | 1줄 | **켜짐** - 편집 칸이 Allman 로 바뀜 | | 다시 끔 | 39줄 | 꺼짐, **확인 창 안 뜸** | -시연 저장소(`D:\MergeHubDemo\repo`)를 MergeHub 로 병합 → `Line/Style.cs`(내 쪽 AURORA + 값 4, 상대 Default + 값 6) 네 칸: 끔 **남은 충돌 1 · 차이 39줄** → AURORA **충돌 1 · 차이 1줄**. +시연 저장소(`D:\MergeHubDemo\repo`)를 MergeHub 로 병합 → `Line/Style.cs`(내 쪽 AURORA + 값 4, 상대 Allman + 값 6) 네 칸: 끔 **남은 충돌 1 · 차이 39줄** → AURORA **충돌 1 · 차이 1줄**. 설정 화면에 저장된 값은 `"CSharpBraceStyle": 1`. 확인 뒤 설정 파일은 원래 바이트로 되돌렸다. diff --git a/doc/history/changelog.md b/doc/history/changelog.md index 175c284..888e457 100644 --- a/doc/history/changelog.md +++ b/doc/history/changelog.md @@ -8,7 +8,7 @@ | 날짜 | 항목 | 커밋 | |---|---|---| -| 2026-09-14 | **E-1 C# 코드 스타일 맞춤** — AURORA(형식 · 메서드만 새 줄, `} else {`) / Default(모두 새 줄)로 중괄호 줄바꿈을 맞춘 뒤 비교. 두 칸 · 네 칸 · mergetool · 폴더 비교, 설정. 스타일만 바뀐 편집은 파일을 바꿀 때 묻지 않음. StyleTest 78건 | 아래 | +| 2026-09-14 | **E-1 C# 코드 스타일 맞춤** — AURORA(형식 · 메서드만 새 줄, `} else {`) / Allman(모두 새 줄)로 중괄호 줄바꿈을 맞춘 뒤 비교. 두 칸 · 네 칸 · mergetool · 폴더 비교, 설정. 스타일만 바뀐 편집은 파일을 바꿀 때 묻지 않음. StyleTest 78건 | 아래 | | 2026-09-14 | **E-2 시연 재료** — `demo\make-demo.ps1` · `tools\DemoMaker`. 지어낸 코드로 폴더 비교 · 스타일 · mergetool · 큰 파일 · 병합 저장소(`D:\MergeHubDemo\repo`) | 아래 | | 2026-09-14 | **6차 B-6** — 충돌 탭에서 여러 파일을 골라(Ctrl · Shift) Accept 를 한 번에. 작업 하나로 풀고 저장소 다시 읽기는 끝에 한 번. 같은 줄 충돌 15개 22.0초 → 1.2초 | 아래 | | 2026-09-14 | **6차 B-5** — 머지 주석을 비교에서 무시(주석 줄은 거르고 줄 끝 주석은 떼고 견줌). 주석만 다른 git 충돌은 양쪽 주석을 남겨 자동으로 풂. 정렬이 주석 줄과 코드 줄을 짝지으면 떼어 놓음. 폴더 비교도. 설정 [머지 주석] 에서 끔 | 아래 | diff --git a/doc/web/index.html b/doc/web/index.html new file mode 100644 index 0000000..a3424c3 --- /dev/null +++ b/doc/web/index.html @@ -0,0 +1,1424 @@ +MergeHub 문서 + + + + + +
+ +
+ +
+ + +
+
+
+
UbiSam 사내 Git 머지 · 비교 도구
+

MergeHub 문서

+

UbisamBase 셸 위에서 도는 플러그인(.NET Framework 4.8 · WPF)이다. 폴더 비교에서 다른 파일을 찾고, 파일 비교에서 줄을 골라 반영하고, Git 탭에서 병합과 커밋까지 끝낸다. 이 페이지는 매뉴얼 · 발표 · 진행 기록 · 기획안 · 시연 대본 · WinMerge 비교를 한곳에 모았다.

+

숫자는 모두 doc/진행상황.md · doc/history/*.md · doc/작업지시/6차.md 에서 옮겼다. 시험은 실제 소스가 아니라 직접 만든 저장소로 했다(2026-09-11 결정).

+
+
+
MERGED · WeldController.cs남은 충돌 1
+
12 public void Start(int count)
+
13 {
+
14 // [김승준] 2026-09-10
+
15 PowerWatt = 2000;
+
16 Speed = 250; ← 충돌: 내 쪽 200
+
17 Run(count);
+
18 Log("old");
+
19 }
+
+
+ +
+
22벌 · 948건검사 하네스 전부 통과
+
11 / 156차 항목 완료 (B-7 · B-8 · C-1 · D-1 남음)
+
68MergeHub 로컬 커밋 (푸시 0)
+
26 → 24만든 저장소 병합 충돌 (주석만 다른 2건 자동 해결)
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/doc/진행상황.md b/doc/진행상황.md index 667eb14..ab3381b 100644 --- a/doc/진행상황.md +++ b/doc/진행상황.md @@ -117,7 +117,7 @@ | 상태 | 항목 | |---|---| -| **완료** | E-1 C# 코드 스타일 맞춤 (AURORA · Default) — 비교 전에 중괄호 줄바꿈을 맞춤. 두 칸 · 네 칸 · 폴더 비교, 설정. 스타일만 다른 파일 남은 차이 39줄 → 1줄 | +| **완료** | E-1 C# 코드 스타일 맞춤 (AURORA · Allman) — 비교 전에 중괄호 줄바꿈을 맞춤. 두 칸 · 네 칸 · 폴더 비교, 설정. 스타일만 다른 파일 남은 차이 39줄 → 1줄 | | **완료** | E-2 발표 시연 재료 `demo\` — `make-demo.ps1` 한 번으로 폴더 비교 · 스타일 · mergetool · 큰 파일 · 병합 저장소 | | **완료** | E-3 웹 문서 — 사용자 매뉴얼 · 발표 자료 · 남은 일 · 개발 현황 · 기획안 최신화 · 시연 대본 · WinMerge 비교 | diff --git a/src/MergeHub/MergeHubSettings.cs b/src/MergeHub/MergeHubSettings.cs index e1af0c9..5b7f81d 100644 --- a/src/MergeHub/MergeHubSettings.cs +++ b/src/MergeHub/MergeHubSettings.cs @@ -69,11 +69,11 @@ namespace MergeHub /// /// C# 파일을 비교하기 전에 중괄호 줄바꿈을 맞출 스타일(6차 추가). - /// AURORA = 형식 · 메서드 중괄호만 새 줄, 나머지와 else/catch/finally 는 같은 줄. Default = Visual Studio 기본(모두 새 줄). + /// AURORA = 형식 · 메서드 중괄호만 새 줄, 나머지와 else/catch/finally 는 같은 줄. Allman = 모두 새 줄(Visual Studio 기본값). /// 켜면 편집 칸의 결과도 그 스타일로 저장된다. /// [Category("비교 옵션")] - [DisplayName("C# 코드 스타일 맞춤 (None=끔 · Aurora · Default)")] + [DisplayName("C# 코드 스타일 맞춤 (None=끔 · Aurora · Allman)")] public MergeHub.Services.CSharpBraceStyle CSharpBraceStyle { get; set; } = MergeHub.Services.CSharpBraceStyle.None; [Category("비교 옵션")] diff --git a/src/MergeHub/Services/CSharpStyle.cs b/src/MergeHub/Services/CSharpStyle.cs index f8d7fab..41641ab 100644 --- a/src/MergeHub/Services/CSharpStyle.cs +++ b/src/MergeHub/Services/CSharpStyle.cs @@ -19,8 +19,8 @@ namespace MergeHub.Services /// Aurora = 1, - /// Visual Studio 기본. 여는 중괄호는 모두 새 줄, else · catch · finally 도 새 줄. - Default = 2, + /// Allman. 여는 중괄호는 모두 새 줄, else · catch · finally 도 새 줄(Visual Studio 기본값과 같다). + Allman = 2, } /// @@ -62,7 +62,7 @@ namespace MergeHub.Services public static string Label(CSharpBraceStyle style) => style switch { CSharpBraceStyle.Aurora => "AURORA", - CSharpBraceStyle.Default => "Default", + CSharpBraceStyle.Allman => "Allman", _ => "끔", }; @@ -97,7 +97,7 @@ namespace MergeHub.Services /// 그 갈래의 여는 중괄호를 새 줄에 둘지. public static bool OpenBraceOnNewLine(BraceKind kind, CSharpBraceStyle style) => - style == CSharpBraceStyle.Default || kind is BraceKind.Type or BraceKind.Method; + style == CSharpBraceStyle.Allman || kind is BraceKind.Type or BraceKind.Method; // ================= else · catch · finally ================= diff --git a/src/MergeHub/ViewModels/HomeViewModel.cs b/src/MergeHub/ViewModels/HomeViewModel.cs index f3b96c9..09abf59 100644 --- a/src/MergeHub/ViewModels/HomeViewModel.cs +++ b/src/MergeHub/ViewModels/HomeViewModel.cs @@ -2786,7 +2786,7 @@ namespace MergeHub.ViewModels // ================= C# 코드 스타일 맞춤 (6차 추가) ================= /// 콤보에 보이는 이름. 순서가 값과 같다. - public IReadOnlyList CSharpStyleNames { get; } = new[] { "C# 스타일 끔", "C# AURORA", "C# Default" }; + public IReadOnlyList CSharpStyleNames { get; } = new[] { "C# 스타일 끔", "C# AURORA", "C# Allman" }; /// /// 고른 스타일. 바꾸면 지금 파일을 원본부터 다시 읽어 그 스타일로 맞춘다. diff --git a/src/MergeHub/Views/HomeView.xaml b/src/MergeHub/Views/HomeView.xaml index 63e001a..5530f06 100644 --- a/src/MergeHub/Views/HomeView.xaml +++ b/src/MergeHub/Views/HomeView.xaml @@ -1669,7 +1669,7 @@ + ToolTip="C# 파일의 여는 중괄호 · else/catch/finally 줄바꿈을 이 스타일로 맞춘 뒤 비교합니다. AURORA: 형식 · 메서드 중괄호만 새 줄, 나머지는 같은 줄, } else { Allman: 모두 새 줄 (Visual Studio 기본값) 편집 칸 글이 바뀌면 저장할 때 그 스타일로 저장됩니다."/>