Diff ์ถ๋ ฅ ์ฝ๋ ๋ฐฉ๋ฒ: ํจ์น ํ์ผ๊ณผ ๋ณ๊ฒฝ ์ฌํญ ์ดํดํ๊ธฐ
Diff ์ถ๋ ฅ ์ฝ๋ ๋ฐฉ๋ฒ: ํจ์น ํ์ผ๊ณผ ๋ณ๊ฒฝ ์ฌํญ ์ดํดํ๊ธฐ
Diff ์ถ๋ ฅ์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ๊ณต์ฉ์ด์ ๋๋ค. ๋ชจ๋ ๊ฐ๋ฐ์๋ ์ฝ๋ ๋ฆฌ๋ทฐ ์ค์, ๋ณํฉ ์ถฉ๋์ ํด๊ฒฐํ ๋, ๋๋ ์คํ์์ค ๊ธฐ์ฌ์ ํจ์น๋ฅผ ์ ์ฉํ ๋ ์ ๊ธฐ์ ์ผ๋ก diff ์ถ๋ ฅ์ ์ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ๊ฐ๋ฐ์๊ฐ diff ์ถ๋ ฅ์ ํจ์จ์ ์ผ๋ก ์ฝ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ์ง ์์ต๋๋ค.
์ด ๊ฐ์ด๋์์๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ์์ diff ์ถ๋ ฅ์ ์ฝ๋ ๋ฐฉ๋ฒ, ํจ์น ํ์ผ์ ์๋ ๋ฐฉ์, ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ ์ฌํญ์ ์์ ์๊ฒ ํด์ํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํฉ๋๋ค.
Diff ์ถ๋ ฅ์ด๋ ๋ฌด์์ธ๊ฐ์?
Diff ์ถ๋ ฅ์ ๋ ํ์ผ ๋๋ ํ์ผ ์งํฉ ๊ฐ์ ์ฐจ์ด์ ์ ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ํํํ ๊ฒ์
๋๋ค. 1970๋
๋์ Bell Labs์ Douglas McIlroy๊ฐ ๋ง๋ diff ์ ํธ๋ฆฌํฐ๋ Git, Mercurial ๋ฐ ๋๋ถ๋ถ์ ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์ ๊ธฐ์ด๋ก ๋จ์ ์์ต๋๋ค.
git diff ๋๋ ๋ค๋ฅธ diff ๋ช
๋ น์ ์คํํ๋ฉด ์ถ๋ ฅ์ ๋ฌด์์ด ๋ณ๊ฒฝ๋์๋์ง, ์ด๋์ ๋ณ๊ฒฝ๋์๋์ง, ์ด๋ป๊ฒ ๋ณ๊ฒฝ๋์๋์ง๋ฅผ ์ฌ๋๊ณผ ๊ธฐ๊ณ ๋ชจ๋๊ฐ ์ฝ์ ์ ์๋ ํ์์ผ๋ก ์ ํํ๊ฒ ๋ณด์ฌ์ค๋๋ค.
Unified Diff ํ์ ์ดํดํ๊ธฐ
Unified diff ํ์์ ์ค๋๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ์ถ๋ ฅ ํ์์ ๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ hunk๋ก ๊ทธ๋ฃนํํ๋ฉฐ, ๊ฐ hunk ์์๋ ํ์ผ ๋ด์์ ๋ณ๊ฒฝ ์์น๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋๋ ์ปจํ ์คํธ ์ค์ด ์์ต๋๋ค.
Hunk ํค๋์ ๊ตฌ์กฐ
๋ชจ๋ hunk๋ ๋ค์๊ณผ ๊ฐ์ ํค๋๋ก ์์ํฉ๋๋ค:
@@ -start,count +start,count @@
์ด๋ฅผ ์์ธํ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
| ๋ถ๋ถ | ์๋ฏธ |
|------|---------|
| @@ | hunk์ ์์์ ํ์ํ๋ ๊ตฌ๋ถ ๊ธฐํธ |
| -3,7 | ์๋ณธ ํ์ผ์์ ์ด hunk๋ 3๋ฒ์งธ ์ค์์ ์์ํ์ฌ 7์ค์ ๊ฑธ์ณ ์์ต๋๋ค |
| +3,8 | ์ ํ์ผ์์ ์ด hunk๋ 3๋ฒ์งธ ์ค์์ ์์ํ์ฌ 8์ค์ ๊ฑธ์ณ ์์ต๋๋ค |
| @@ | ๋ซ๋ ๊ตฌ๋ถ ๊ธฐํธ |
ํค๋ ๋ฐ๋ก ๋ค์ ์ปจํ ์คํธ ์ค(์ผ๋ฐ์ ์ผ๋ก ํจ์ ์ด๋ฆ์ด๋ ๊ทผ์ฒ ์ฃผ์)์ ๋ณ๊ฒฝ ์ฌํญ์ด ํ์ผ์ ์ด๋ ๋ถ๋ถ์ ์ํ๋์ง ์๋ณํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Hunk ๋ด์ ์ค
hunk ๋ด์ ๊ฐ ์ค์ ๋จ์ผ ๋ฌธ์๋ก ์์๋ฉ๋๋ค:
context line (๋ณ๊ฒฝ๋์ง ์์)
-added line (์ ํ์ผ์ ์กด์ฌ, ์ด์ ํ์ผ์๋ ์์)
+added line (์ ํ์ผ์ ์กด์ฌ, ์ด์ ํ์ผ์๋ ์์)
- ์ปจํ ์คํธ ์ค์ ๊ณต๋ฐฑ์ผ๋ก ์์ํฉ๋๋ค. ์ด ์ค์ ๋ ๋ฒ์ ์์ ๋์ผํ๋ฉฐ ์ฐธ์กฐ์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ญ์ ๋ ์ค์ ๋นผ๊ธฐ ๊ธฐํธ(
-)๋ก ์์ํฉ๋๋ค. ์ด ์ค์ ์ด์ ํ์ผ์๋ ์์ง๋ง ์ญ์ ๋์์ต๋๋ค. - ์ถ๊ฐ๋ ์ค์ ๋ํ๊ธฐ ๊ธฐํธ(
+)๋ก ์์ํฉ๋๋ค. ์ด ์ค์ ๋ณ๊ฒฝ๋ ํ์ผ์ ์๋ก ์ถ๊ฐ๋์์ต๋๋ค.
์ค์ ์์
๋ค์์ ํจ์๊ฐ ์์ ๋๋ ๋ชจ์ต์ ๋ณด์ฌ์ฃผ๋ diff์ ๋๋ค:
@@ -5,7 +5,9 @@
def greet(name):
- print("Hello, " + name)
- print("Welcome!")
+ message = f"Hello, {name}!"
+ print(message)
+ print("We are glad to see you.")
+
if name == "admin":
print("You have admin privileges.")
์ด diff๋ฅผ ์ฝ๋ ๋ฐฉ๋ฒ:
- ์ด์ ๋ฒ์ ์ "Hello, "์ ์ด๋ฆ์ ๋ํ ํ "Welcome!"์ ์ถ๋ ฅํ์ต๋๋ค.
- ์ ๋ฒ์ ์ ํฌ๋งท๋ ๋ฉ์์ง ๋ฌธ์์ด์ ๋ง๋ค๊ณ , ์ถ๋ ฅํ ํ, ์ถ๊ฐ ์ธ์ฌ๋ง ์ค์ ์ถ๊ฐํ๋ฉฐ, admin ํ์ธ์ ๋ณ๊ฒฝ๋์ง ์์์ต๋๋ค.
- ๋ ์ค์ด ์ญ์ ๋์๊ณ (
-์ค), ์ธ ์ค์ด ์ถ๊ฐ๋์์ผ๋ฉฐ(+์ค), ๋น+์ค์ ๊ฐ๋ ์ฑ์ ์ํด ๋น ์ค์ ์ ์งํฉ๋๋ค.
ํจ์น ํ์ผ: ์ ์ฉํ ์ ์๋ Diff
ํจ์น ํ์ผ์ ๋จ์ํ ํ์ผ๋ก ์ ์ฅ๋ diff์
๋๋ค. ์ผ๋ฐ์ ์ผ๋ก .patch ๋๋ .diff ํ์ฅ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. ํจ์น ํ์ผ์ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ณต์ ํ์ง ์๊ณ ๋ ๋ณ๊ฒฝ ์ฌํญ์ ๊ณต์ ํ ์ ์๋ ์ด์ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.
ํจ์น ๋ง๋ค๊ธฐ
Git์ ์ฌ์ฉํ์ฌ ์ต์ ์ปค๋ฐ์์ ํจ์น๋ฅผ ๋ง๋ญ๋๋ค:
git format-patch HEAD~1
๋๋ ์ปค๋ฐ๋์ง ์์ ๋ณ๊ฒฝ ์ฌํญ์์ ํจ์น๋ฅผ ๋ง๋ญ๋๋ค:
git diff > my-changes.patch
ํจ์น ์ ์ฉํ๊ธฐ
๋์ ์ ์ฅ์์ ํจ์น๋ฅผ ์ ์ฉํฉ๋๋ค:
git apply my-changes.patch
๋๋ ํด๋์ patch ๋ช
๋ น์ ์ฌ์ฉํฉ๋๋ค:
patch -p1 < my-changes.patch
-p1 ํ๋๊ทธ๋ ํ์ผ ๊ฒฝ๋ก์์ ์ฒซ ๋ฒ์งธ ๋๋ ํฐ๋ฆฌ ๊ตฌ์ฑ ์์๋ฅผ ์ ๊ฑฐํ์ฌ, ํจ์น ์์ฑ์์ ์ ์ฉ์ ๊ฐ์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ ์ฐจ์ด๋ฅผ ๋ณด์ ํฉ๋๋ค.
์ผ๋ฐ์ ์ธ Diff ์ถ๋ ฅ ํ์
Unified diff ์ธ์๋ ๋ค์๊ณผ ๊ฐ์ ํ์์ ์ ํ ์ ์์ต๋๋ค:
Normal Diff
์๋ diff ๋ช
๋ น์ ๊ธฐ๋ณธ ์ถ๋ ฅ์
๋๋ค. ๋ณ๊ฒฝ ์ฌํญ์ a(์ถ๊ฐ), c(๋ณ๊ฒฝ), d(์ญ์ )์ ๊ฐ์ ๋ช
๋ น์ ์ฌ์ฉํ์ฌ ์ถ๊ฐ, ๋ณ๊ฒฝ ๋๋ ์ญ์ ์ง์นจ์ผ๋ก ํ์๋ฉ๋๋ค.
3c3
< Hello world
---
> Hello beautiful world
Context Diff
๋ชจ๋ ๋ณ๊ฒฝ ์ฌํญ ์ฃผ์์ ์ธ ์ค์ ์ปจํ ์คํธ๋ฅผ ์ ๊ณตํ๋ ์ด์ ํ์์ ๋๋ค. ๋๋ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๊ฒฝ๋ ์ค์ ๋ํ๋ ๋๋ค.
Side-by-Side Diff
๋จ์ผ ํ์ผ ํ์์ด ์๋๋ผ ๋ ์ด์ ๋๋ํ ํ์ํฉ๋๋ค. ์ด๋ ๊ทธ๋ํฝ diff ๋๊ตฌ์ ์จ๋ผ์ธ diff checker์์ ์ผ๋ฐ์ ์ ๋๋ค.
์ฝ๋ ๋ฆฌ๋ทฐ์์ Diff ์ถ๋ ฅ ์ฝ๊ธฐ
Pull request๋ฅผ ๊ฒํ ํ ๋ ๋ค์ ์์์ ์ง์คํ์ธ์:
- Hunk ํค๋: ์ด๋ค ํ์ผ๊ณผ ํจ์๊ฐ ์ํฅ์ ๋ฐ๋์ง ์๋ ค์ค๋๋ค.
- ์ถ๊ฐ๋ ์ค๊ณผ ์ญ์ ๋ ์ค์ ๋น์จ: ์ค์ํ ํ์ผ์์ ๋ง์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ผ๋ฉด ๋ ์ฃผ์ ๊น๊ฒ ์ดํด๋ด์ผ ํฉ๋๋ค.
- ์ปจํ ์คํธ ์ค: ์ฃผ๋ณ ๋ก์ง์ ๋ณด์ฌ์ฃผ์ด ๋ณ๊ฒฝ ์ฌํญ์ด ์ฌ๋ฐ๋ฅธ์ง ํ๊ฐํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๊ณต๋ฐฑ๋ง ๋ณ๊ฒฝ๋ ์ฌํญ: ๋ง์ diff ๋๊ตฌ๋ ์ด๋ฅผ ๋ค๋ฅด๊ฒ ๊ฐ์กฐ ํ์ํฉ๋๋ค. ์ด๋ ๋ฆฌ๋ทฐ๋ฅผ ๋ณต์กํ๊ฒ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
Diff ํด์์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
- diff๋ฅผ ์์์ ์๋๋ก, ํ์ผ๋ณ๋ก ์ฝ์ผ์ธ์. ์ด๋ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ง๋ค์ด์ง ์์์ ์ผ์นํฉ๋๋ค.
- ์์ ๋ ์ฝ๋ ๊ทผ์ฒ์ ๋ณ๊ฒฝ๋์ง ์์ ์ปจํ ์คํธ ์ค์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ธ์. ์ด์ ์ฝ๋์ ์ ์ฝ๋ ๊ฐ์ ๊ตฌ์กฐ์ ๊ด๊ณ๋ฅผ ๋๋ฌ๋ ๋๋ค.
- diff ๋ณด๊ธฐ์์ ๊ตฌ๋ฌธ ๊ฐ์กฐ ํ์๋ฅผ ์ง์ํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ธ์. ์์์ด ํจํด์ ๋ ์ฝ๊ฒ ๋ฐ๊ฒฌํ ์ ์๊ฒ ํด์ค๋๋ค.
- ํฐ diff๋ฅผ ๊ฒํ ํ ๋๋ ํ ์คํธ ํ์ผ๋ถํฐ ์์ํ์ฌ ์์ฑ์๊ฐ ์ด๋ค ๋์์ ๋ณ๊ฒฝํ๋ ค๊ณ ํ๋์ง ์ดํดํ์ธ์.
Diff ์ถ๋ ฅ์ ์ดํดํ๋ ๊ฒ์ ํ์ ๊ฐ๋ฐ์ ๊ธฐ๋ณธ ๊ธฐ์ ์ ๋๋ค. diff ์ฝ๊ธฐ์ ์ต์ํด์ง๋ฉด ์ฝ๋ ๋ฆฌ๋ทฐ, ๋ณํฉ ์ถฉ๋, ํจ์น ํ์ผ์ ํจ์ฌ ๋ ์์ ์๊ฒ ๋ค๋ฃฐ ์ ์์ต๋๋ค.