ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๋ฐฉ์์ ์ค๋ช ํ๋๋ฐ ๊ฐ์ฅ ์ด๋ ค์ด ์ ์ ๊ทธ ๋ฐฉ์์ด ๋งค์ฐ ๋ค์ํ๋ค๋ ์ ์ด๋ค. Git์ด ์๋ ์ ์ฐํ๊ฒ ์ค๊ณ๋๊ธฐ ๋๋ฌธ์ ์ฌ๋๋ค์ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์ ์๋ค. ๊ฒ๋ค๊ฐ ํ๋ก์ ํธ๋ง๋ค ํ๊ฒฝ์ด ๋ฌ๋ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๋ฐฉ์์ ์ฝ๊ฒ ์ค๋ช ํ๊ธฐ๋ ์ ๋ง ์ด๋ ต๋ค. ๊ธฐ์ฌํ๋ ๋ฐฉ์์ ์ํฅ์ ๋ผ์น๋ ๋ช ๊ฐ์ง ๋ณ์๊ฐ ์๋ค. ํ๋ฐํ ๊ธฐ์ฌํ๋ ๊ฐ๋ฐ์์ ์๊ฐ ์ผ๋ง์ธ์ง, ์ ํํ ์ํฌํ๋ก๊ฐ ๋ฌด์์ธ์ง, ๊ฐ ๊ฐ๋ฐ์์๊ฒ ์ ๊ทผ ๊ถํ์ ์ด๋ป๊ฒ ๋ถ์ฌํ๋์ง, ์ธ๋ถ์์๋ ๊ธฐ์ฌํ ์ ์๋์ง ๋ฑ์ด ๋ณ์๋ค.
์ฒซ ๋ฒ์งธ๋ก ์ดํด๋ณผ ๋ณ์๋ ํ๋ฐํ ํ๋ํ๋ ๊ฐ๋ฐ์์ ์์ด๋ค. ์ผ๋ง๋ ๋ง์ ๊ฐ๋ฐ์๊ฐ ์ผ๋ง๋ ์์ฃผ ์ฝ๋๋ฅผ ์์ ๋ด๋๊ฐ ํ๋ ์ ์ด ํ๋ฐํ ๊ฐ๋ฐ์์ ๊ธฐ์ค์ด๋ค. ๋๋ถ๋ถ ๋, ์ ์ ๋์ ๊ฐ๋ฐ์๊ฐ ํ๋ฃจ์ ๋ช ๋ฒ ์ปค๋ฐ์ ํ๊ณ ํ๋ฐํ์ง ์์ ํ๋ก์ ํธ๋ ๋ ๋์๋์ํ ๊ฒ์ด๋ค. ํ์ง๋ง, ์์ฃผ ํฐ ํ๋ก์ ํธ๋ ์๋ฐฑ, ์์ฒ ๋ช ์ ๊ฐ๋ฐ์๊ฐ ํ๋ฃจ์๋ ์์ญ, ์๋ฐฑ ๊ฐ์ ์ปค๋ฐ์ ๋ง๋ค์ด ๋ธ๋ค. ๊ฐ๋ฐ์๊ฐ ๋ง์ผ๋ฉด ๋ง์์๋ก ์ฝ๋๋ฅผ ๊น๋ํ๊ฒ ์ ์ฉํ๊ฑฐ๋ Merge ํ๊ธฐ ์ด๋ ค์์ง๋ค. ์ด๋ค ์ปค๋ฐ์ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ์ด๋ฏธ ๊ธฐ์ฌํ ๊ฒ์ผ๋ก ๋ถํ์ํด์ง๊ธฐ๋ ํ๊ณ ๋๋ก ์๋ก ์ถฉ๋์ด ์ผ์ด๋๋ค. ์ด๋ป๊ฒ ํด์ผ ์ฝ๋๋ฅผ ์ต์ ์ผ๋ก ์ ์งํ๋ฉด์ ์ํ๋ ๋๋ก ์์ ํ ์ ์์๊น?
๋ ๋ฒ์งธ ๋ณ์๋ ํ๋ก์ ํธ์์ ์ ํํ ์ํฌํ๋ก๋ค. ๊ฐ๋ฐ์ ๋ชจ๋๊ฐ ๋ฉ์ธ ์ ์ฅ์์ ์ฐ๊ธฐ ๊ถํ์ ๊ฐ๋ ์ค์์ง์คํ ๋ฐฉ์์ธ๊ฐ? ํ๋ก์ ํธ์ ๋ชจ๋ Patch๋ฅผ ๊ฒ์ฌํ๊ณ ํตํฉํ๋ ๊ด๋ฆฌ์๊ฐ ๋ฐ๋ก ์๋๊ฐ? ๋ชจ๋ ์์ ์ฌํญ์ ๊ฐ๋ฐ์๋ผ๋ฆฌ ๊ฒํ ํ๊ณ ์น์ธํ๋๊ฐ? ์์ ์ด ๊ทธ์ ๋๋๊ฒ ์๋๋ผ ์ด๋ค ์ฑ ์์ ๋งก๊ณ ์๋์ง? ์ค๊ฐ ๊ด๋ฆฌ์๊ฐ ์์ด์ ๊ทธ๋ค์๊ฒ ๋จผ์ ์๋ ค์ผ ํ๋๊ฐ?
์ธ ๋ฒ์งธ ๋ณ์๋ ์ ๊ทผ ๊ถํ์ด๋ค. 'ํ๋ก์ ํธ์ ์ฐ๊ธฐ ๊ถํ์ด ์์ด์ ์ง์ ์ธ ์ ์๋๊ฐ? ์๋๋ฉด ์ฝ๊ธฐ๋ง ๊ฐ๋ฅํ๊ฐ?'์ ๋ฐ๋ผ์ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๋ฐฉ์์ด ๋งค์ฐ ๋ฌ๋ผ์ง๋ค. ์ฐ๊ธฐ ๊ถํ์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ์์ ์ฌํญ์ ํ๋ก์ ํธ์ ๋ฐ์ํ ์ ์์๊น? ์์ ์ฌํญ์ ์ ์ฉํ๋ ์ ์ฑ ์ด ํ๋ก์ ํธ์ ์๋๊ฐ? ์ผ๋ง๋ ๋ง์ ์๊ฐ์ ํ๋ก์ ํธ์ ํ ์ ํ๋๊ฐ? ์ผ๋ง๋ ์์ฃผ ๊ธฐ์ฌํ๋๊ฐ?
์ด๋ฐ ์ง๋ฌธ์ ๋ฐ๋ผ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ๊ณผ ์ํฌํ๋ก๊ฐ ๋ฌ๋ผ์ง๋ค. ๊ฐ๋จํ ๊ฒ๋ถํฐ ๋ณต์กํ ๊ฒ๊น์ง ์์ ๋ฅผ ํตํด ๊ฐ ์ํฉ์ ์ดํด๋ณด๋ฉด ์ค์ ํ๋ก์ ํธ์ ํ์ํ ์ํฌํ๋ก๋ฅผ ์ ํํ๋ ๋ฐ ๋์์ด ๋ ๊ฒ์ด๋ค.
๋ค๋ฅธ ๊ฒ๋ณด๋ค ๋จผ์ ์ปค๋ฐ ๋ฉ์์ง์ ๋ํ ์ฃผ์์ฌํญ์ ์์๋ณด์.
์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์ ์์ฑํ๋ ๊ฐ์ด๋๋ผ์ธ์ ์์๋๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์์ ํจ๊ป ์ผํ๋ ๋ฐ ๋์์ด ๋ง์ด ๋๋ค.
Git ํ๋ก์ ํธ์ ๋ณด๋ฉด ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ๋๋ฐ ์ฐธ๊ณ ํ ๋งํ ์ข์ ํ์ด ๋ง๋ค. Git ํ๋ก์ ํธ์ Documentation/SubmittingPatches ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์.
๋ฌด์๋ณด๋ค๋ ๋จผ์ ๊ณต๋ฐฑ๋ฌธ์๋ฅผ ๊นจ๋ํ๊ฒ ์ ๋ฆฌํ๊ณ ์ปค๋ฐํด์ผ ํ๋ค.
Git์ ๊ณต๋ฐฑ๋ฌธ์๋ฅผ ๊ฒ์ฌํด๋ณผ ์ ์๋ ๊ฐ๋จํ ๋ช
๋ น์ ์ ๊ณตํ๋ค. ์ปค๋ฐ์ ํ๊ธฐ ์ ์ git diff --check ๋ช
๋ น์ผ๋ก ๊ณต๋ฐฑ๋ฌธ์์ ๋ํ ์ค๋ฅ๋ฅผ ํ์ธํ ์ ์๋ค.
์ปค๋ฐ์ ํ๊ธฐ ์ ์ ๊ณต๋ฐฑ๋ฌธ์์ ๋ํด ๊ฒ์ฌ๋ฅผ ํ๋ฉด ๊ณต๋ฐฑ์ผ๋ก ๋ถํ์ํ๊ฒ ์ปค๋ฐ๋๋ ๊ฒ์ ๋ง๊ณ ์ด๋ฐ ์ปค๋ฐ์ผ๋ก ์ธํด ๋ถํ์ํ๊ฒ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ค์ด ์ ๊ฒฝ ์ฐ๋ ์ผ์ ๋ฐฉ์งํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ ์ปค๋ฐ์ ๋
ผ๋ฆฌ์ ์ผ๋ก ๊ตฌ๋ถ๋๋ Changeset์ด๋ค.
์ต๋ํ ์์ ์ฌํญ์ ํ ์ฃผ์ ๋ก ์์ฝํ ์ ์์ด์ผ ํ๊ณ ์ฌ๋ฌ ๊ฐ์ง ์ด์์ ๋ํ ์์ ์ฌํญ์ ํ๋์ ์ปค๋ฐ์ ๋ด์ง ์์์ผ ํ๋ค.
์ฌ๋ฌ ๊ฐ์ง ์ด์๋ฅผ ํ๊บผ๋ฒ์ ์์ ํ๋ค๊ณ ํ๋๋ผ๋ Staging Area๋ฅผ ์ด์ฉํ์ฌ ํ ์ปค๋ฐ์ ์ด์ ํ๋๋ง ๋ด๊ธฐ๋๋ก ํ๋ค. ์์
๋ด์ฉ์ ๋ถํ ํ๊ณ , ๊ฐ ์ปค๋ฐ๋ง๋ค ์ ์ ํ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ค.
๊ฐ์ ํ์ผ์ ๋ค๋ฅธ ๋ถ๋ถ์ ์์ ํ๋ ๊ฒฝ์ฐ์๋ git add -patch ๋ช
๋ น์ ์จ์ ํ ๋ถ๋ถ์ฉ ๋๋์ด Staging Area์ ์ ์ฅํด์ผ ํ๋ค(๊ด๋ จ ๋ด์ฉ์ ch07-git-tools.asc ์์ ๋ค๋ฃฌ๋ค).
๊ฒฐ๊ณผ์ ์ผ๋ก ์ต์ข
ํ๋ก์ ํธ์ ๋ชจ์ต์ ํ ๋ฒ์ ์ปค๋ฐ์ ํ๋ ๋ค์ฏ ๋ฒ์ ๋๋์ด ์ปค๋ฐ์ ํ๋ ๋๊ฐ๋ค.
ํ์ง๋ง, ์ฌ๋ฌ ๋ฒ ๋๋์ด ์ปค๋ฐํ๋ ๊ฒ์ด ๋ค๋ฅธ ๋๋ฃ๊ฐ ์์ ํ ๋ถ๋ถ์ ํ์ธํ ๋๋ ๊ฐ ์ปค๋ฐ์ ์์ ์ผ๋ก ๋ณต์ํด์ ๊ฒํ ํ ๋ ์ดํดํ๊ธฐ ํจ์ฌ ์ฝ๋ค. ch07-git-tools.asc ์์ ์ด๋ฏธ ์ ์ฅ๋ ์ปค๋ฐ์ ๋ค์ ์์ ํ๊ฑฐ๋ ํ์ผ์ ๋จ๊ณ์ ์ผ๋ก Staging Area์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณธ๋ค. ๋ค์ํ ๋๊ตฌ๋ฅผ ์ด์ฉํด์ ๊ฐ๋จํ๊ณ ์ดํดํ๊ธฐ ์ฌ์ด ์ปค๋ฐ์ ์์๊ฐ์ผ ํ๋ค.
๋ง์ง๋ง์ผ๋ก ๋ช ์ฌํด์ผ ํ ์ ์ ์ปค๋ฐ ๋ฉ์์ง ์์ฒด๋ค. ์ข์ ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ ์ต๊ด์ Git์ ์ฌ์ฉํ๋ ๋ฐ ๋์์ด ๋ง์ด ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ปค๋ฐ ๋ฉ์์ง๋ฅผ ์์ฑํ ๋ ์ฌ์ฉํ๋ ๊ท์น์ด ์๋ค. ๋ฉ์์ง์ ์ฒซ ๋ผ์ธ์ 50์๊ฐ ๋์ง ์๋ ์์ฃผ ๊ฐ๋ตํ ๋ฉ์์ง๋ฅผ ์ ์ด ํด๋น ์ปค๋ฐ์ ์์ฝํ๋ค. ๋ค์ ํ ๋ผ์ธ์ ๋น์ฐ๊ณ ๊ทธ๋ค์ ๋ผ์ธ๋ถํฐ ์ปค๋ฐ์ ์์ธํ ์ค๋ช ํ๋ค. ์๋ฅผ ๋ค์ด Git ๊ฐ๋ฐ ํ๋ก์ ํธ์์๋ ๊ฐ๋ฐ ๋๊ธฐ์ ๊ตฌํ ์ํฉ์ ์ ์ฝ ์กฐ๊ฑด์ด๋ ์ํฉ ๋ฑ์ ์์ธํ๊ฒ ์๊ตฌํ๋ค. ์ด๋ฐ ์ ์ ๋ฐ๋ฅผ ๋งํ ์ข์ ๊ฐ์ด๋๋ผ์ธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌํ ํํ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค. ๋ช ๋ น๋ฌธ์ผ๋ก ์์ํ๋ ๊ฒ๋ ์ข์ ๋ฐฉ๋ฒ์ด๋ค. ์๋ฅผ ๋ค์ด โI added tests for (ํ ์คํธ๋ฅผ ์ถ๊ฐํจ)โ ๋ณด๋ค๋ โAdd tests for (ํ ์คํธ ์ถ๊ฐ)โ ์ ๊ฐ์ ๋ฉ์์ง๋ฅผ ์์ฑํ๋ค. ์๋ ๋ด์ฉ์ Tim Pope๊ฐ ์์ฑํ ์ปค๋ฐ ๋ฉ์์ง์ ํ ํ๋ฆฟ์ด๋ค.
์๋ฌธ 50๊ธ์ ์ดํ์ ๊ฐ๋ตํ ์์ ์์ฝ
์์ธํ ์ค๋ช
. ์๋ฌธ 72๊ธ์ ์ด์์ด ๋๋ฉด
๋ผ์ธ ๋ฐ๊ฟ์ ํ๊ณ ์ด์ด์ง๋ ๋ด์ฉ์ ์์ฑํ๋ค.
ํน์ ์ํฉ์์๋ ์ฒซ ๋ฒ์งธ ๋ผ์ธ์ด ์ด๋ฉ์ผ
๋ฉ์์ง์ ์ ๋ชฉ์ด ๋๊ณ ๋๋จธ์ง๋ ๋ฉ์ผ
๋ด์ฉ์ด ๋๋ค. ๋น ๋ผ์ธ์ ๋ณธ๋ฌธ๊ณผ ์์ฝ์
๊ตฌ๋ณํด์ฃผ๊ธฐ์ ์ค์ํ๋ค(๋ณธ๋ฌธ ์ ์ฒด๋ฅผ ์๋ตํ์ง ์๋ ํ).
์ด์ด์ง๋ ๋ด์ฉ๋ ํ ๋ผ์ธ ๋์ฐ๊ณ ์ด๋ค.
- ๋ชฉ๋ก ํ์๋ ์ฌ์ฉํ ์ ์๋ค.
- ๋ณดํต '-' ๋ '*' ํ์๋ฅผ ์ฌ์ฉํด์ ๋ชฉ๋ก์ ํํํ๊ณ
ํ์ ์์ ๊ณต๋ฐฑ ํ๋, ๊ฐ ๋ชฉ๋ก ์ฌ์ด์๋ ๋น ๋ผ์ธ
ํ๋๋ฅผ ๋ฃ๋๋ฐ, ์ด๊ฑด ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.๋ฉ์์ง๋ฅผ ์ด๋ ๊ฒ ์์ฑํ๋ฉด ํจ๊ป ์ผํ๋ ์ฌ๋์ ๋ฌผ๋ก ์ด๊ณ ์์ ์๊ฒ๋ ๋งค์ฐ ์ ์ฉํ๋ค.
Git ๊ฐ๋ฐ ํ๋ก์ ํธ์๋ ์ ์ฐ์ธ ์ปค๋ฐ ๋ฉ์์ง๊ฐ ๋ง์ผ๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ ๋ด๋ ค๋ฐ์์ git log --no-merges ๋ช
๋ น์ผ๋ก ๊ผญ ์ดํด๋ณด๊ธฐ๋ฅผ ๊ถํ๋ค.
|
Note
|
์ฑ
์ฒ๋ผ ํ์ง๋ง๊ณ , ์ํค๋ ๋๋ก ํ๊ธฐ.
์๊ฐ ๊ด๊ณ์, ์ด ์ฑ
์์ ์ค๋ช
ํ๋ ์์ ์ ์ปค๋ฐ ๋ฉ์์ง๋ ์์ ๊ฐ์ด ์์ฃผ ๋ฉ์ง๊ฒ ์ฐ์ง ์์๋ค. ํ์ง๋ง! ์ ์์ฒ๋ผ ํ์ง ๋ง๊ณ ์ํค๋ ๋๋ก ํ๋ ๊ฒ์ด ์ข๋ค. |
๋์ธ ๋ช ์ผ๋ก ์ด๋ฃจ์ด์ง ๋น๊ณต๊ฐ ํ๋ก์ ํธ๊ฐ ๊ฐ์ฅ ๊ฐ๋จํ ํ๋ก์ ํธ์ผ ๊ฒ์ด๋ค. โ๋น๊ณต๊ฐโ ๋ผ๊ณ ํจ์ ์์ค์ฝ๋๊ฐ ๊ณต๊ฐ๋์ง ์์ ๊ฒ์ ๋งํ๋ ๊ฒ์ด์ง ์ธ๋ถ์์ ์ ๊ทผํ ์ ์๋ ๊ฒ์ ๋งํ์ง ์๋๋ค. ๋ชจ๋ ๊ฐ๋ฐ์๋ ๊ณต์ ํ๋ ์ ์ฅ์์ ์ฐ๊ธฐ ๊ถํ์ด ์์ด์ผ ํ๋ค.
์ด๋ฐ ํ๊ฒฝ์์๋ ๋ณดํต Subversion ๊ฐ์ ์ค์์ง์คํ ๋ฒ์ ๊ด๋ฆฌ ์์คํ
์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
๋ฌผ๋ก Git์ด ๊ฐ์ง ์คํ๋ผ์ธ ์ปค๋ฐ ๊ธฐ๋ฅ์ด๋ ๋ธ๋์น Merge ๊ธฐ๋ฅ์ ์ด์ฉํ๊ธด ํ์ง๋ง ํฌ๊ฒ ๋ค๋ฅด์ง ์๋ค. ๊ฐ์ฅ ํฐ ์ฐจ์ด์ ์ ์๋ฒ๊ฐ ์๋ ํด๋ผ์ด์ธํธ ์ชฝ์์ Merge ํ๋ค๋ ์ ์ด๋ค.
๋ ๊ฐ๋ฐ์๊ฐ ์ ์ฅ์๋ฅผ ๊ณต์ ํ๋ ์๋๋ฆฌ์ค๋ฅผ ์ดํด๋ณด์.
๊ฐ๋ฐ์์ธ John์ ์ ์ฅ์๋ฅผ Clone ํ๊ณ ํ์ผ์ ์์ ํ๊ณ ๋์ ๋ก์ปฌ์ ์ปค๋ฐํ๋ค
(์์ ์์ Git์ด ์ถ๋ ฅํ๋ ๋ฉ์์ง ์ค ์ผ๋ถ๋ โฆโ ์ผ๋ก ์ค์ด๊ณ ์๋ตํ๋ค).
# John's Machine
$ git clone john@githost:simplegit.git
Cloning into 'simplegit'...
...
$ cd simplegit/
$ vim lib/simplegit.rb
$ git commit -am 'remove invalid default value'
[master 738ee87] remove invalid default value
1 files changed, 1 insertions(+), 1 deletions(-)๊ฐ๋ฐ์์ธ Jessica๋ ์ ์ฅ์๋ฅผ Clone ํ๊ณ ๋์ ํ์ผ์ ํ๋ ์๋ก ์ถ๊ฐํ๊ณ ์ปค๋ฐํ๋ค.
# Jessica's Machine
$ git clone jessica@githost:simplegit.git
Cloning into 'simplegit'...
...
$ cd simplegit/
$ vim TODO
$ git commit -am 'add reset task'
[master fbff5bc] add reset task
1 files changed, 1 insertions(+), 0 deletions(-)Jessica๋ ์๋ฒ์ ์ปค๋ฐ์ Push ํ๋ค.
# Jessica's Machine
$ git push origin master
...
To jessica@githost:simplegit.git
1edee6b..fbff5bc master -> masterPush ๋ช
๋ น์ ์คํํ๊ณ ๋ ๊ฒฐ๊ณผ ์ค ๊ฐ์ฅ ๋ง์ง๋ง ์ค์ ์ ์ฉํ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ฃผ๊ณ ์๋ค.
๋ง์ง๋ง ์ค์ ๊ธฐ๋ณธ์ ์ธ ํํ๋ <oldref>..<newref> fromref โ toref ์ด๋ค. oldref ๋ ์ด์ ๋ ํผ๋ฐ์ค๋ฅผ, newref ๋ ์ ๋ ํผ๋ฐ์ค๋ฅผ, fromref ๋ Push ๋ช
๋ น์์ ์ฌ์ฉํ ๋ก์ปฌ ๋ ํผ๋ฐ์ค์ ์ด๋ฆ์, toref ๋ Push๋ก ์
๋ฐ์ดํธํ ๋ฆฌ๋ชจํธ ๋ ํผ๋ฐ์ค๋ฅผ ๋ํ๋ธ๋ค.
์ด์ด์ง๋ ๋ด์ฉ์์ ์ง๊ธ๊ณผ ๋น์ทํ Push ๋ช
๋ น ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ์ฌ๋ฌ๋ฒ ๋ฑ์ฅํ๋ค. ์ด ์ถ๋ ฅ ๋ฉ์์ง์ ๋ด์ฉ์ ์ดํดํ๊ณ ์์ผ๋ฉด ๋ค์ํ ์ํ์์ ์ ํํ๊ฒ ์ด๋ค์ผ์ด ๋ฒ์ด์ง๋๊ฐ๋ฅผ ์ข ๋ ์ฝ๊ฒ ์ดํดํ ์ ์๋ค.
์์ธํ ๋ด์ฉ์ ์ข ๋ ์ดํด๋ณด๋ ค๋ฉด Git ๋ฌธ์ git-push๋ฅผ ์ฐธ๊ณ ํ๋ค.
๋ค์ ์์ ๋ด์ฉ์ผ๋ก ๋์์ค๋ฉด, John๋ ๋ด์ฉ์ ๋ณ๊ฒฝํ๊ณ ์ปค๋ฐ์ ๋ง๋ ํ ์๋ฒ๋ก ์ปค๋ฐ์ Push ํ๋ ค๊ณ ํ๋ค.
# John's Machine
$ git push origin master
To john@githost:simplegit.git
! [rejected] master -> master (non-fast forward)
error: failed to push some refs to 'john@githost:simplegit.git'Jessica์ Pushํ ๋ด์ฉ์ผ๋ก ์ธํด, John์ ์ปค๋ฐ์ ์๋ฒ์์ ๊ฑฐ์ ๋๋ค. Subversion์ ์ฌ์ฉํ๋ ์ฌ๋์ ์ด ๋ถ๋ถ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํ๋ค. ๊ฐ์ ํ์ผ์ ์์ ํ ๊ฒ๋ ์๋๋ฐ ์ Push๊ฐ ๊ฑฐ์ ๋๋ ๊ฑธ๊น? Subversion์์๋ ์๋ก ๋ค๋ฅธ ํ์ผ์ ์์ ํ๋ ์ด๋ฐ Merge ์์ ์ ์๋์ผ๋ก ์๋ฒ๊ฐ ์ฒ๋ฆฌํ๋ค. ํ์ง๋ง Git์ ๋ก์ปฌ์์ ๋จผ์ Merge ํด์ผ ํ๋ค. ๋ค์ ๋งํด John์ Push ํ๊ธฐ ์ ์ Jessica๊ฐ ์์ ํ ์ปค๋ฐ์ Fetch ํ๊ณ Merge ํด์ผ ํ๋ค๋ ๋ง์ด๋ค.
์ด๋ฅผ ์ํด ์ฐ์ John์ Jessica์ ์์ ๋ด์ฉ์ ์๋์ ๊ฐ์ด Fetch ํ๋ค(์๋ ๋ช ๋ น์ Jessica์ ์์ ๋ด์ฉ์ ๋ด๋ ค๋ฐ๊ธด ํ์ง๋ง Merge ๊น์ง ํ์ง๋ ์๋ ์์ ์ด๋ค).
$ git fetch origin
...
From john@githost:simplegit
+ 049d078...fbff5bc master -> origin/masterFetch ํ๊ณ ๋๋ฉด John์ ๋ก์ปฌ ์ ์ฅ์๋ ์๋์ ๊ฐ์ด ๋๋ค.
์ด์ John์ Fetchํ์ฌ ๊ฐ์ ธ ์จ Jessica์ ์์ ๋ด์ฉ์ Merge ํ ์ ์๋ค.
$ git merge origin/master
Merge made by the 'recursive' strategy.
TODO | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)Merge๊ฐ ์ ์ด๋ฃจ์ด์ง๋ฉด John์ ๋ธ๋์น๋ ์๋์ ๊ฐ์ ์ํ๊ฐ ๋๋ค.
John์ Merge ํ๊ณ ๋์ ์์ ์ด ์์ ํ ์ฝ๋๊ฐ ์ ๋๋ก ๋์ํ๋์ง ํ์ธํ๋ค. ๊ทธ ํ์ ๊ณต์ ํ๋ ์ ์ฅ์์ Push ํ๋ค.
$ git push origin master
...
To john@githost:simplegit.git
fbff5bc..72bbc59 master -> master์ด์ John์ ์ ์ฅ์๋ ์๋์ ๊ฐ์ด ๋์๋ค.
๋์์ Jessica๋ ํ ํฝ ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ ๋ค. issue54 ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์ธ ๋ฒ์ ๊ฑธ์ณ์ ์ปค๋ฐํ๋ค. ์์ง John์ ์ปค๋ฐ์ Fetch ํ์ง ์์ ์ํฉ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ ์ํฉ์ด ๋๋ค.
Jessica๋ John์ด ์๋ก Pushํ๋ค๋ ๊ฒ์ ์๊ฒ ๋์ด ํ๋ ์์ ์ ๋ฉ์ถ๊ณ John์ ์์ ๋ด์ฉ์ ์ดํด๋ณด๋ ค๊ณ ํ๋ค. ํ์ง๋ง ์์ง Jessica๋ John์ ๋ณ๊ฒฝ์ฌํญ์ ๊ฐ์ง๊ณ ์์ง ์์ ์ํ์ด๋ค.
# Jessica's Machine
$ git fetch origin
...
From jessica@githost:simplegit
fbff5bc..72bbc59 master -> origin/master์ ๋ช ๋ น์ผ๋ก John์ด Push ํ ์ปค๋ฐ์ ๋ชจ๋ ๋ด๋ ค๋ฐ๋๋ค. ๊ทธ๋ฌ๋ฉด Jessica์ ์ ์ฅ์๋ ์๋์ ๊ฐ์ ์ํ๊ฐ ๋๋ค.
์ด์ orgin/master ์ Merge ํ ์ฐจ๋ก๋ค.
Jessica๋ ํ ํฝ ๋ธ๋์น์์์ ์์
์ ๋ง์น๊ณ ์ด๋ค ๋ด์ฉ์ด Merge ๋๋์ง git log ๋ช
๋ น์ผ๋ก ํ์ธํ๋ค.
$ git log --no-merges issue54..origin/master
commit 738ee872852dfaa9d6634e0dea7a324040193016
Author: John Smith <jsmith@example.com>
Date: Fri May 29 16:01:27 2009 -0700
remove invalid default valueissue54..origin/master ๋ฌธ๋ฒ์ ํ์คํ ๋ฆฌ๋ฅผ ๊ฒ์ํ ๋ ๋ค์ ๋ธ๋์น(origin/master)์ ์ํ ์ปค๋ฐ ์ค ์์ ๋ธ๋์น(issue54)์ ์ํ์ง ์์ ์ปค๋ฐ์ ๊ฒ์ํ๋ ๋ฌธ๋ฒ์ด๋ค.
์์ธํ ๋ด์ฉ์ ch07-git-tools.asc์์ ๋ค๋ฃฌ๋ค.
์์ ๋ช
๋ น์ ๋ฐ๋ผ ํ์คํ ๋ฆฌ๋ฅผ ๊ฒ์ํ ๊ฒฐ๊ณผ John์ด ์์ฑํ๊ณ Jessica๊ฐ Merge ํ์ง ์์ ์ปค๋ฐ์ ํ๋ ์ฐพ์๋ค.
origin/master ๋ธ๋์น๋ฅผ Merge ํ๊ฒ ๋๋ฉด ๊ฒ์๋ ์ปค๋ฐ ํ๋๊ฐ ๋ก์ปฌ ์์
์ Merge ๋ ๊ฒ์ด๋ค.
Merge ํ ๋ด์ฉ์ ํ์ธํ Jessica๋ ์์ ์ด ์์
ํ ๋ด์ฉ๊ณผ John์ด Push ํ ์์
(origin/master)์ master ๋ธ๋์น์ Merge ํ๊ณ Push ํ๋ค.
issue54 ํ ํฝ ๋ธ๋์น์ ์์ ๋ชจ๋ ๋ด์ฉ์ ํฉ์น๋ ค๋ฉด, ์ฐ์ master ๋ธ๋์น๋ฅผ Checkout ํด์ผ ํ๋ค.
$ git checkout master
Switched to branch 'master'
Your branch is behind 'origin/master' by 2 commits, and can be fast-forwarded.origin/master, issue54 ๋ชจ๋ Upstream ๋ธ๋์น์ด๊ธฐ ๋๋ฌธ์ ๋ ์ค์ ๋ฌด์์ ๋จผ์ Merge ํ๋ ์๊ด์ด ์๋ค.
๋ฌผ๋ก ์ด๋ค ๊ฒ์ ๋จผ์ Merge ํ๋๋์ ๋ฐ๋ผ ํ์คํ ๋ฆฌ ์์๋ ๋ฌ๋ผ์ง์ง๋ง, ์ต์ข
๊ฒฐ๊ณผ๋ ๋๊ฐ๋ค.
Jessica๋ ๋จผ์ issue54 ๋ธ๋์น๋ฅผ Merge ํ๋ค.
$ git merge issue54
Updating fbff5bc..4af4298
Fast forward
README | 1 +
lib/simplegit.rb | 6 +++++-
2 files changed, 6 insertions(+), 1 deletions(-)๋ณด๋ค์ํผ Fast-forward Merge ์ด๊ธฐ ๋๋ฌธ์ ๋ช
๋ น ์คํ ๊ฒฐ๊ณผ๋ ๋ณ ๋ฌธ์ ๊ฐ ์๋ค.
origin/master ์ ์์ฌ์๋ John์ ์์
๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด ์คํํ์ฌ Jessica๋ Merge ์์
์ ์๋ฃํ ์ ์๋ค.
$ git merge origin/master
Auto-merging lib/simplegit.rb
Merge made by the 'recursive' strategy.
lib/simplegit.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)์์ ๊ฐ์ด Merge๊ฐ ์ ๋๋ฉด ๊ทธ๋ฆผ ์๋์ ๊ฐ์ ์ํ๊ฐ ๋๋ค.
origin/master ๋ธ๋์น๊ฐ Jessica์ master ๋ธ๋์น๋ก ๋์๊ฐ(reachable) ์ ์๊ธฐ ๋๋ฌธ์ Push๋ ์ฑ๊ณตํ๋ค(๋ฌผ๋ก John์ด ๊ทธ ์ฌ์ด์ Push ํ์ง ์์๋ค๋ฉด).
$ git push origin master
...
To jessica@githost:simplegit.git
72bbc59..8059c15 master -> master๋ ๊ฐ๋ฐ์์ ์ปค๋ฐ์ ์ฑ๊ณต์ ์ผ๋ก Merge ํ๊ณ ๋๋ฉด ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
๋งค์ฐ ๊ฐ๋จํ ์ํฉ์ ์์ ๋ฅผ ์ดํด๋ณด์๋ค.
ํ ํฝ ๋ธ๋์น์์ ์์ ํ๊ณ ๋ก์ปฌ์ master ๋ธ๋์น์ Merge ํ๋ค.
์์
ํ ๋ด์ฉ์ ํ๋ก์ ํธ์ ๊ณต์ ์ ์ฅ์์ Push ํ๊ณ ์ ํ ๋๋ ์ฐ์ origin/master ๋ธ๋์น๋ฅผ Fetch ํ๊ณ Merge ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ Merge ํ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์๋ฒ๋ก Push ํ๋ค.
์ด๋ฐ ์ํฌํ๋ก๊ฐ ์ผ๋ฐ์ ์ด๋ฉฐ ์๋์ ๊ฐ์ด ๋ํ๋ผ ์ ์๋ค.
์ด์ ๋น๊ณต๊ฐ ๋๊ท๋ชจ ํ์์์ ์ญํ ์ ์ดํด๋ณด์. ์ด๋ฐ ์ํฉ์๋ ๋ณดํต ํ์ ์ฌ๋ฌ ๊ฐ๋ก ๋๋๋ค. ๊ทธ๋์ ๊ฐ๊ฐ์ ์์ ํ์ด ์๋ก ์ด๋ป๊ฒ ํ๋๋ก Merge ํ๋์ง๋ฅผ ์ดํด๋ณธ๋ค.
John๊ณผ Jessica๋ โfeatureAโ ๊ธฐ๋ฅ์ ํจ๊ป ์์
ํ๊ฒ ๋๋ค. Jessica๋ Josie์ ํจ๊ป โfeatureBโ ๊ธฐ๋ฅ๋ ์์
ํ๊ณ ์๋ค.
์ด๋ฐ ์ํฉ์ด๋ผ๋ฉด ํ์ฌ๋ Integration-manager ์ํฌํ๋ก๋ฅผ ์ ํํ๋ ๊ฒ ์ข๋ค. ์์ ํ์ด ์ํํ ๊ฒฐ๊ณผ๋ฌผ์ Integration-Manager๊ฐ Merge ํ๊ณ ๊ณต์ ์ ์ฅ์์ master ๋ธ๋์น๋ฅผ ์
๋ฐ์ดํธํ๋ค.
ํ๋ง๋ค ๋ธ๋์น๋ฅผ ํ๋์ฉ ๋ง๋ค๊ณ Integration-Manager๋ ๊ทธ ๋ธ๋์น๋ฅผ Pull ํด์ Merge ํ๋ค.
๋ ํ์ ๋ชจ๋ ์ํ Jessica์ ์์
์์๋ฅผ ์ดํด๋ณด์.
์ฐ์ Jessica๋ ์ ์ฅ์๋ฅผ Clone ํ๊ณ featureA ์์
์ ๋จผ์ ํ๋ค.
featureA ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์์ ํ๊ณ ์ปค๋ฐํ๋ค.
# Jessica's Machine
$ git checkout -b featureA
Switched to a new branch 'featureA'
$ vim lib/simplegit.rb
$ git commit -am 'add limit to log function'
[featureA 3300904] add limit to log function
1 files changed, 1 insertions(+), 1 deletions(-)์ด ์์ ํ ๋ถ๋ถ์ John๊ณผ ๊ณต์ ํด์ผ ํ๋ค. ๊ณต์ ํ๋ ค๋ฉด ์ฐ์ featureA ๋ธ๋์น๋ฅผ ์๋ฒ๋ก Push ํ๋ค.
Integration-Manager๋ง master ๋ธ๋์น๋ฅผ ์
๋ฐ์ดํธํ ์ ์๊ธฐ ๋๋ฌธ์ master ๋ธ๋์น๋ก Push๋ฅผ ํ ์ ์๊ณ ๋ค๋ฅธ ๋ธ๋์น๋ก John๊ณผ ๊ณต์ ํ๋ค.
$ git push -u origin featureA
...
To jessica@githost:simplegit.git
* [new branch] featureA -> featureAJessica๋ ์์ ์ด ํ ์ผ์ featureA ๋ผ๋ ๋ธ๋์น๋ก Push ํ๋ค๋ ์ด๋ฉ์ผ์ John์๊ฒ ๋ณด๋ธ๋ค.
John์ ํผ๋๋ฐฑ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ Jessica๋ Josie์ ํจ๊ป ํ๋ featureB ์์
์ ํ๊ธฐ๋ก ํ๋ค.
์๋ฒ์ master ๋ธ๋์น๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด ๋ธ๋์น๋ฅผ ํ๋ ๋ง๋ ๋ค.
# Jessica's Machine
$ git fetch origin
$ git checkout -b featureB origin/master
Switched to a new branch 'featureB'๋ช ๊ฐ์ง ์์
์ ํ๊ณ featureB ๋ธ๋์น์ ์ปค๋ฐํ๋ค.
$ vim lib/simplegit.rb
$ git commit -am 'made the ls-tree function recursive'
[featureB e5b0fdc] made the ls-tree function recursive
1 files changed, 1 insertions(+), 1 deletions(-)
$ vim lib/simplegit.rb
$ git commit -am 'add ls-files'
[featureB 8512791] add ls-files
1 files changed, 5 insertions(+), 0 deletions(-)๊ทธ๋ผ Jessica์ ์ ์ฅ์๋ ๊ทธ๋ฆผ ์๋์ ๊ฐ๋ค.
์์
์ ๋ง์น๊ณ Push ํ๋ ค๊ณ ํ๋๋ฐ Jesie๊ฐ ์ด๋ฏธ โfeatureBโ ์์
์ ํ๊ณ ์๋ฒ์ featureBee ๋ธ๋์น๋ก Push ํ๋ค๋ ์ด๋ฉ์ผ์ ๋ณด๋ด์๋ค.
Jessica๋ Jesie์ ์์
์ ๋จผ์ Merge ํด์ผ๋ง Push ํ ์ ์๋ค.
Merge ํ๊ธฐ ์ํด์ ์ฐ์ git fetch ๋ก Fetch ํ๋ค.
$ git fetch origin
...
From jessica@githost:simplegit
* [new branch] featureBee -> origin/featureBeeJessica๊ฐ ์์ Checkout ํ featureB ๋ธ๋์น์์ ์์
์ค์ผ ๋, Fetch ํด ์จ ๋ธ๋์น๋ฅผ git merge ๋ช
๋ น์ผ๋ก Merge ํ๋ค.
$ git merge origin/featureBee
Auto-merging lib/simplegit.rb
Merge made by the 'recursive' strategy.
lib/simplegit.rb | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)์ด ์์ ์์ Jissica๋ Merge ํ โfeatureBโ ์์
์ ์๋ฒ๋ก Push ํ ๋ ์๋ฒ์ featureB ๋ธ๋์น๋ก Pushํ์ง ์๊ณ ์ ํ๋ค.
์ด๋ฏธ Josie๊ฐ ์์ฑํ featureBee ๋ก ์์
๋ด์ฉ์ Push ํ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ์คํํ๋ค.
$ git push -u origin featureB:featureBee
...
To jessica@githost:simplegit.git
fba9af8..cd685d1 featureB -> featureBee์ด๊ฒ์ refspec ์ด๋ ๊ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ธ๋ฐ
ch10-git-internals.asc ์์ ์์ธํ๊ฒ ์ค๋ช
ํ๋ค.
๋ช
๋ น์์ ์ฌ์ฉํ -u ์ต์
์ --set-upstream ์ต์
์ ์งง์ ํํ์ธ๋ฐ ๋ธ๋์น๋ฅผ ์ถ์ ํ๋๋ก ์ค์ ํด์ ์ดํ Push ๋ Pull ํ ๋ ์ข ๋ ํธํ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
John์ด ๋ช ๊ฐ์ง ์์
์ ํ๊ณ ๋์ featureA ์ Push ํ๊ณ ํ์ธํด ๋ฌ๋ผ๋ ๋ด์ฉ์ ์ด๋ฉ์ผ์ ๋ณด๋ด์๋ค.
Jessica๋ John์ ์์
๋ด์ฉ์ ํ์ธํ๊ธฐ ์ํด ๋ค์ ํ ๋ฒ git fetch ๋ก Push๋ ์์
์ Fetch ํ๋ค.
$ git fetch origin
...
From jessica@githost:simplegit
3300904..aad881d featureA -> origin/featureAJessica์ ๋ก์ปฌ featureA ๋ธ๋์น์ Fetch ํด ์จ John์ ์์
๋ด์ฉ์ด ๊ฐ์ featureA ๋ธ๋์น ์์์ ์ด๋ค ๊ฒ์ด ์
๋ฐ์ดํธ๋๋์ง git log ๋ช
๋ น์ผ๋ก ํ์ธํ๋ค.
$ git log featureA..origin/featureA
commit aad881d154acdaeb2b6b18ea0e827ed8a6d671e6
Author: John Smith <jsmith@example.com>
Date: Fri May 29 19:57:33 2009 -0700
changed log output to 30 from 25ํ์ธ์ ๋ง์น๋ฉด ๋ก์ปฌ์ featureA ๋ธ๋์น๋ก John์ ์์
๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ด Merge ํ๋ค.
$ git checkout featureA
Switched to branch 'featureA'
$ git merge origin/featureA
Updating 3300904..aad881d
Fast forward
lib/simplegit.rb | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)Jessica๋ ์ผ๋ถ ์์ ํ๊ณ , featureA ๋ธ๋์น์ ์ปค๋ฐํ๊ณ , ์์ ํ ๋ด์ฉ์ ๋ค์ ์๋ฒ๋ก Push ํ๋ค.
$ git commit -am 'small tweak'
[featureA 774b3ed] small tweak
1 files changed, 1 insertions(+), 1 deletions(-)
$ git push
...
To jessica@githost:simplegit.git
3300904..774b3ed featureA -> featureA์์ ๊ฐ์ ์์ ์ ๋ง์น๊ณ ๋๋ฉด Jessica์ ์ ์ฅ์๋ ์๋์ ๊ฐ์ ๋ชจ์ต์ด ๋๋ค.
๊ทธ๋ผ featureA ์ featureBee ๋ธ๋์น๊ฐ ํ๋ก์ ํธ์ ๋ฉ์ธ ๋ธ๋์น๋ก Merge ํ ์ค๋น๊ฐ ๋์๋ค๊ณ Integration-Manager์๊ฒ ์๋ ค์ค๋ค.
Integration-Manager๊ฐ ๋ ๋ธ๋์น๋ฅผ ๋ชจ๋ Merge ํ๊ณ ๋ ํ์ ๋ฉ์ธ ๋ธ๋์น๋ฅผ Fetch ํ๋ฉด ์๋์ ๊ฐ์ ๋ชจ์์ด ๋๋ค.
์๋ง์ ํ์ ์์ ์ ๋์์ ์งํํ๊ณ ๋์ค์ Merge ํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค๊ณ ๋ค๋ฅธ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์์ Git์ผ๋ก ๋ฐ๊พธ๋ ์กฐ์ง๋ค์ด ๋ง์์ง๊ณ ์๋ค. ํ์ ์์ ์ ๋ธ๋์น๋ก ์์ ํ์ง๋ง, ๋ฉ์ธ ๋ธ๋์น์ ์ํฅ์ ๋ผ์น์ง ์๋๋ค๋ ์ ์ด Git์ ์ฅ์ ์ด๋ค. ์๋๋ ์ด๋ฐ ์ํฌํ๋ก๋ฅผ ๋ํ๋ด๊ณ ์๋ค.
๋น๊ณต๊ฐ ํ์ ์ด์ํ๋ ๊ฒ๊ณผ ๊ณต๊ฐ ํ์ ์ด์ํ๋ ๊ฒ์ ์ฝ๊ฐ ๋ค๋ฅด๋ค. ๊ณต๊ฐ ํ์ ์ด์ํ ๋๋ ๋ชจ๋ ๊ฐ๋ฐ์๊ฐ ํ๋ก์ ํธ์ ๊ณต์ ์ ์ฅ์์ ์ง์ ์ ์ผ๋ก ์ฐ๊ธฐ ๊ถํ์ ๊ฐ์ง์ง๋ ์๋๋ค. ๊ทธ๋์ ํ๋ก์ ํธ์ ๊ด๋ฆฌ์๋ ๋ช ๊ฐ์ง ์ผ์ ๋ ํด์ค์ผ ํ๋ค. Fork๋ฅผ ์ง์ํ๋ Git ํธ์คํ ์์ Fork๋ฅผ ํตํด ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๋ ๋ฒ์ ์์ ๋ฅผ ํตํด ์ดํด๋ณธ๋ค. Git ํธ์คํ ์ฌ์ดํธ(GitHub, BitBucket, repo.or.cz ๋ฑ) ๋๋ถ๋ถ์ Fork ๊ธฐ๋ฅ์ ์ง์ํ๋ฉฐ ํ๋ก์ ํธ ๊ด๋ฆฌ์๋ ๋ณดํต Fork ํ๋ ๊ฒ์ผ๋ก ํ๋ก์ ํธ๋ฅผ ์ด์ํ๋ค. ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก ์ด๋ฉ์ผ๊ณผ Patch๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์๋ ์๋๋ฐ ๋ค์ด์ด ์ดํด๋ณธ๋ค.
์ฐ์ ์ฒ์ ํ ์ผ์ ๋ฉ์ธ ์ ์ฅ์๋ฅผ Clone ํ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ํ ํฝ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์ผ์ ๋ถ๋ถ ๊ธฐ์ฌํ๋ค. ๊ทธ ์์๋ ์๋์ ๊ฐ๋ค.
$ git clone <url>
$ cd project
$ git checkout -b featureA
... work ...
$ git commit
... work ...
$ git commit|
Note
|
|
์ผ๋จ ํ๋ก์ ํธ์ ์น์ฌ์ดํธ๋ก ๊ฐ์ โForkโ ๋ฒํผ์ ๋๋ฅด๋ฉด ์๋ ํ๋ก์ ํธ ์ ์ฅ์์์ ๊ฐ๋ผ์ ธ ๋์จ, ์ฐ๊ธฐ ๊ถํ์ด ์๋ ์ ์ฅ์๊ฐ ํ๋ ๋ง๋ค์ด์ง๋ค. ๊ทธ๋ฌ๋ฉด ๋ก์ปฌ์์ ์์ ํ ์ปค๋ฐ์ ์๋ ์ ์ฅ์์ Push ํ ์ ์๋ค.
๊ทธ ์ ์ฅ์๋ฅผ ๋ก์ปฌ ์ ์ฅ์์ ๋ฆฌ๋ชจํธ ์ ์ฅ์๋ก ๋ฑ๋กํ๋ค. ์๋ฅผ ๋ค์ด myfork ๋ก ๋ฑ๋กํ๋ค.
$ git remote add myfork <url>์ ์ด์ ๋ฑ๋กํ ๋ฆฌ๋ชจํธ ์ ์ฅ์์ Push ํ๋ค.
์์
ํ๋ ๊ฒ์ ๋ก์ปฌ ์ ์ฅ์์ master ๋ธ๋์น์ Merge ํ ํ Push ํ๋ ๊ฒ๋ณด๋ค ๋ฆฌ๋ชจํธ ๋ธ๋์น์ ๋ฐ๋ก Push๋ฅผ ํ๋ ๋ฐฉ์์ด ํจ์ฌ ๊ฐ๋จํ๋ค.
์ด๋ ๊ฒ ํ๋ ์ด์ ๋ ๊ด๋ฆฌ์๊ฐ ํ ํฝ ๋ธ๋์น๋ฅผ ํ๋ก์ ํธ์ ํฌํจ์ํค๊ณ ์ถ์ง ์์ ๋ ํ ํฝ ๋ธ๋์น๋ฅผ Merge ํ๊ธฐ ์ด์ ์ํ๋ก master ๋ธ๋์น๋ฅผ ๋๋๋ฆด ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. (cherry-pick ๋ช
๋ น์ ch05-distributed-git.asc ์์ ์์ธํ ๋ค๋ฃฌ๋ค).
๊ด๋ฆฌ์๊ฐ ํ ํฝ ๋ธ๋์น๋ฅผ Merge ํ๋ Rebase ํ๋ Cherry-Pick ํ๋ ์ง ๊ฐ์ ๊ฒฐ๊ตญ ๋ค์ ๊ด๋ฆฌ์์ ์ ์ฅ์๋ฅผ Pull ํ ๋๋ ํ ํฝ ๋ธ๋์น์ ๋ด์ฉ์ด ๋ค์ด ์์ ๊ฒ์ด๋ค.
์ด๋ค ๊ฒฝ์ฐ๋ผ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ ๋ด์ฉ์ Push ํ ์ ์๋ค.
$ git push -u myfork featureAFork ํ ์ ์ฅ์์ Push ํ๊ณ ๋๋ฉด ํ๋ก์ ํธ ๊ด๋ฆฌ์์๊ฒ ์ด ๋ด์ฉ์ ์๋ ค์ผ ํ๋ค.
์ด๊ฒ์ Pull Request ๋ผ๊ณ ํ๋ค. Git ํธ์คํ
์ฌ์ดํธ์์ ๊ด๋ฆฌ์์๊ฒ ๋ณด๋ผ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ฑฐ๋ git request-pull ๋ช
๋ น์ผ๋ก ์ด๋ฉ์ผ์ ์๋์ผ๋ก ๋ง๋ค ์ ์๋ค. GitHub์ โPull Requestโ ๋ฒํผ์ ์๋์ผ๋ก ๋ฉ์์ง๋ฅผ ๋ง๋ค์ด ์ฃผ๋๋ฐ ๊ด๋ จ ๋ด์ฉ์ ch06-github.asc ์์ ์ดํด๋ณผ ์ ์๋ค.
git request-pull ๋ช
๋ น์ ์๊ท๋จผํธ๋ฅผ ๋ ๊ฐ ์
๋ ฅ๋ฐ๋๋ค. ์ฒซ ๋ฒ์งธ ์๊ท๋จผํธ๋ ์์
ํ ํ ํฝ ๋ธ๋์น์ Base ๋ธ๋์น์ด๋ค. ๋ ๋ฒ์งธ๋ ํ ํฝ ๋ธ๋์น๊ฐ ์์นํ ์ ์ฅ์ URL์ธ๋ฐ ์์์ ๋ฑ๋กํ ๋ฆฌ๋ชจํธ ์ ์ฅ์ ์ด๋ฆ์ ์ ์ ์ ์๋ค. ์ด ๋ช
๋ น์ ํ ํฝ ๋ธ๋์น ์์ ์ฌํญ์ ์์ฝํ ๋ด์ฉ์ ๊ฒฐ๊ณผ๋ก ๋ณด์ฌ์ค๋ค.
์๋ฅผ ๋ค์ด Jessica๊ฐ John์๊ฒ Pull ์์ฒญ์ ๋ณด๋ด๋ ์ํฉ์ ์ดํด๋ณด์. Jessica๋ ํ ํฝ ๋ธ๋์น์ ๋ ๋ฒ ์ปค๋ฐ์ ํ๊ณ Fork ํ ์ ์ฅ์์ Push ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์๋์ ๊ฐ์ด ์คํํ๋ค.
$ git request-pull origin/master myfork
The following changes since commit 1edee6b1d61823a2de3b09c160d7080b8d1b3a40:
Jessica Smith (1):
added a new function
are available in the git repository at:
git://githost/simplegit.git featureA
Jessica Smith (2):
add limit to log function
change log output to 30 from 25
lib/simplegit.rb | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)๊ด๋ฆฌ์์๊ฒ ์ด ๋ด์ฉ์ ๋ณด๋ธ๋ค. ์ด ๋ด์ฉ์๋ ํ ํฝ ๋ธ๋์น๊ฐ ์ด๋ ์์ ์ ๊ฐ๋ผ์ ธ ๋์จ ๊ฒ์ธ์ง, ์ด๋ค ์ปค๋ฐ์ด ์๋์ง, Pull ํ๋ ค๋ฉด ์ด๋ค ์ ์ฅ์์ ์ ๊ทผํด์ผ ํ๋์ง์ ๋ํ ๋ด์ฉ์ด ๋ค์ด ์๋ค.
ํ๋ก์ ํธ ๊ด๋ฆฌ์๊ฐ ์๋๋ผ๊ณ ํด๋ ๋ณดํต origin/master ๋ฅผ ์ถ์ ํ๋ master ๋ธ๋์น๋ ๊ฐ์ง๊ณ ์๋ค. ๊ทธ๋๋ ํ ํฝ ๋ธ๋์น๋ฅผ ๋ง๋ค๊ณ ์ผ์ ํ๋ฉด ๊ด๋ฆฌ์๊ฐ ์์ ๋ด์ฉ์ ๊ฑฐ๋ถํ ๋ ์ฝ๊ฒ ๋ฒ๋ฆด ์ ์๋ค.
ํ ํฝ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด์ ์ฃผ์ ๋ณ๋ก ๋
๋ฆฝ์ ์ผ๋ก ์ผ์ ํ๋ ๋์์๋ ์ฃผ ์ ์ฅ์์ master ๋ธ๋์น๋ ๊ณ์ ์์ ๋๋ค. ํ์ง๋ง ์ฃผ ์ ์ฅ์์ ๋ธ๋์น์ ์ต๊ทผ ์ปค๋ฐ ์ดํ๋ก Rebase ํ๋ฉด ๊นจ๋ํ๊ฒ Merge ํ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์ฃผ์ ์ ์ผ์ ํ๋ ค๊ณ ํ ๋๋ ์์ Push ํ ํ ํฝ ๋ธ๋์น์์ ์์ํ์ง ๋ง๊ณ ์ฃผ ์ ์ฅ์์ master ๋ธ๋์น๋ก๋ถํฐ ๋ง๋ค์ด์ผ ํ๋ค.
$ git checkout -b featureB origin/master
... work ...
$ git commit
$ git push myfork featureB
$ git request-pull origin/master myfork
... email generated request pull to maintainer ...
$ git fetch origin๊ฐ ํ ํฝ์ ์ผ์ข ์ ์คํ์ค์ด๋ผ๊ณ ํ ์ ์๋ค. ๊ฐ ํ ํฝ์ ์๋ก ๋ฐฉํดํ์ง ์๊ณ ๋ ๋ฆฝ์ ์ผ๋ก ์์ ํ๊ณ Rebase ํ ์ ์๋ค.
ํ๋ก์ ํธ ๊ด๋ฆฌ์๊ฐ ์ฌ๋๋ค์ ์์ ์ฌํญ์ Merge ํ๊ณ ๋์ Jessica์ ๋ธ๋์น๋ฅผ Merge ํ๋ ค๊ณ ํ ๋ ์ถฉ๋์ด ๋ ์๋ ์๋ค.
๊ทธ๋ฌ๋ฉด Jessica๊ฐ ์์ ์ ๋ธ๋์น๋ฅผ origin/master ์ Rebase ํด์ ์ถฉ๋์ ํด๊ฒฐํ๊ณ ๋ค์ Pull Request์ ๋ณด๋ธ๋ค.
$ git checkout featureA
$ git rebase origin/master
$ git push -f myfork featureA์ ๋ช ๋ น๋ค์ ์คํํ๊ณ ๋๋ฉด ํ์คํ ๋ฆฌ๋ ์๋์ ๊ฐ์์ง๋ค.
๋ธ๋์น๋ฅผ Rebase ํด ๋ฒ๋ ธ๊ธฐ ๋๋ฌธ์ Push ํ ๋ -f ์ต์
์ ์ฃผ๊ณ ๊ฐ์ ๋ก ๊ธฐ์กด ์๋ฒ์ ์๋ featureA ๋ธ๋์น์ ๋ด์ฉ์ ๋ฎ์ด ์จ์ผ ํ๋ค.
์๋๋ฉด ์๋ก์ด ๋ธ๋์น๋ฅผ(์๋ฅผ ๋ค์ด featureAv2) ์๋ฒ์ Push ํด๋ ๋๋ค.
๋ ๋ค๋ฅธ ์๋๋ฆฌ์ค๋ฅผ ํ๋ ๋ ์ดํด๋ณด์. ํ๋ก์ ํธ ๊ด๋ฆฌ์๋ featureB ๋ธ๋์น์ ๋ด์ฉ์ ์ข์ง๋ง, ์์ธ ๊ตฌํ์ ๋ค๋ฅด๊ฒ ํ๊ณ ์ถ๋ค. ๊ด๋ฆฌ์๋ featureB ๋ด๋น์์๊ฒ ์์ธ ๊ตฌํ์ ๋ค๋ฅด๊ฒ ํด๋ฌ๋ผ๊ณ ์์ฒญํ๋ค.
featureB ๋ด๋น์๋ ํ๋ ๊น์ featureB ๋ธ๋์น๋ฅผ ํ๋ก์ ํธ์ ์ต์ master ๋ธ๋์น ๊ธฐ๋ฐ์ผ๋ก ์ฎ๊ธด๋ค.
๋จผ์ origin/master ๋ธ๋์น์์ featureBv2 ๋ธ๋์น๋ฅผ ์๋ก ํ๋ ๋ง๋ค๊ณ , featureB ์ ์ปค๋ฐ๋ค์ ๋ชจ๋ Squash ํด์ Merge ํ๊ณ , ๋ง์ฝ ์ถฉ๋์ด ๋๋ฉด ํด๊ฒฐํ๊ณ , ์์ธ ๊ตฌํ์ ์์ ํ๊ณ , ์ ๋ธ๋์น๋ฅผ Push ํ๋ค.
$ git checkout -b featureBv2 origin/master
$ git merge --squash featureB
... change implementation ...
$ git commit
$ git push myfork featureBv2--squash ์ต์
์ ํ์ฌ ๋ธ๋์น์ Merge ํ ๋ ํด๋น ๋ธ๋์น์ ์ปค๋ฐ์ ๋ชจ๋ ์ปค๋ฐ ํ๋๋ก ํฉ์ณ์ Merge ํ๋ค. ์ด ๋ Merge ์ปค๋ฐ์ ๋ง๋ค์ง ์๋๋ค.
๋ค๋ฅธ ๋ธ๋์น์์ ์์ ํ ์ฌํญ์ ์ ๋ถ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋๊ฐ๋ค. ํ์ง๋ง ์๋ก ๋ง๋ค์ด์ง๋ ์ปค๋ฐ์ ๋ถ๋ชจ๊ฐ ํ๋์ด๊ณ ์ปค๋ฐ์ ๊ธฐ๋กํ๊ธฐ ์ ์ ์ข ๋ ์์ ํ ๊ธฐํ๋ ์๋ค.
๋ค๋ฅธ ๋ธ๋์น์์ ์์ ํ ์ฌํญ์ ์ ๋ถ ๊ฐ์ ธ์ค๋ฉด์ ๊ทธ์ ์ ์ถ๊ฐ์ ์ผ๋ก ์์ ํ ๊ฒ ์์ผ๋ฉด ์์ ํ๊ณ Merge ํ ์ ์๋ค. ๊ฒ๋ค๊ฐ ์๋ก ๋ง๋ค์ด์ง๋ ์ปค๋ฐ์ ๋ถ๋ชจ๊ฐ ํ๋๋ค.
--no-commit ์ต์
์ ์ถ๊ฐํ๋ฉด ์ปค๋ฐ์ ํฉ์ณ ๋๊ณ ์๋์ผ๋ก ์ปค๋ฐํ์ง ์๋๋ค.
์์ ์ ๋ง์น๋ฉด ๊ด๋ฆฌ์์๊ฒ featureBv2 ๋ธ๋์น๋ฅผ ํ์ธํด ๋ณด๋ผ๊ณ ๋ฉ์์ง๋ฅผ ๋ณด๋ธ๋ค.
๋๊ท๋ชจ ํ๋ก์ ํธ๋ ๋ณดํต ์์ ์ฌํญ์ด๋ Patch๋ฅผ ์์ฉํ๋ ์์ ๋ง์ ๊ท์น์ ๋ง๋ จํด๋๊ณ ์๋ค. ํ๋ก์ ํธ๋ง๋ค ๊ท์น์ ์๋ก ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก ๊ฐ ํ๋ก์ ํธ์ ๊ท์น์ ๋ฏธ๋ฆฌ ์์๋ ํ์๊ฐ ์๋ค. ์ค๋๋ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ ๋๋ถ๋ถ ๋ฉ์ผ๋ง๋ฆฌ์คํธ๋ฅผ ํตํด์ Patch๋ฅผ ๋ฐ์๋ค์ด๋๋ฐ ์์ ๋ฅผ ํตํด ์ดํด๋ณธ๋ค.
ํ ํฝ ๋ธ๋์น๋ฅผ ๋ง๋ค์ด ์์ ํ๋ ์์ ์ ์์ ์ดํด๋ณธ ๋ฐ์ ๊ฑฐ์ ๋น์ทํ์ง๋ง, Patch๋ฅผ ์ ์ถํ๋ ๋ฐฉ์์ด ๋ค๋ฅด๋ค. ํ๋ก์ ํธ๋ฅผ Fork ํ์ฌ Push ํ๋ ๊ฒ์ด ์๋๋ผ ์ปค๋ฐ ๋ด์ฉ์ ๋ฉ์ผ๋ก ๋ง๋ค์ด ๊ฐ๋ฐ์ ๋ฉ์ผ๋ง๋ฆฌ์คํธ์ ์ ์ถํ๋ค.
$ git checkout -b topicA
... work ...
$ git commit
... work ...
$ git commit์ปค๋ฐ์ ๋ ๋ฒ ํ๊ณ ๋ฉ์ผ๋ง๋ฆฌ์คํธ์ ๋ณด๋ด ๋ณด์.
git format-patch ๋ช
๋ น์ผ๋ก ๋ฉ์ผ๋ง๋ฆฌ์คํธ์ ๋ณด๋ผ mbox ํ์์ ํ์ผ์ ์์ฑํ๋ค. ๊ฐ ์ปค๋ฐ์ ํ๋์ฉ ์ด๋ฉ์ผ ๋ฉ์์ง๋ก ์์ฑ๋๋๋ฐ ์ปค๋ฐ ๋ฉ์์ง์ ์ฒซ ๋ฒ์งธ ๋ผ์ธ์ด ์ ๋ชฉ์ด ๋๊ณ Merge ๋ฉ์์ง ๋ด์ฉ๊ณผ Patch ์์ฒด๊ฐ ๋ฉ์ผ ๋ฉ์์ง์ ๋ณธ๋ฌธ์ด ๋๋ค.
์ด ๋ฐฉ์์ ์์ ํ ์ด๋ฉ์ผ์ ๋ค์ด ์๋ Patch๋ฅผ ๋ฐ๋ก ์ ์ฉํ ์ ์์ด์ ์ข๋ค. ๋ฉ์ผ ์์๋ ์ปค๋ฐ์ ๋ชจ๋ ๋ด์ฉ์ด ํฌํจ๋๋ค. ๋ฉ์ผ์ ํฌํจ๋ Patch๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๋ค์ ์ ์์ ์ดํด๋ณธ๋ค.
$ git format-patch -M origin/master
0001-add-limit-to-log-function.patch
0002-changed-log-output-to-30-from-25.patchformat-patch ๋ช
๋ น์ ์คํํ๋ฉด ์์ฑํ ํ์ผ ์ด๋ฆ์ ๋ณด์ฌ์ค๋ค.
-M ์ต์
์ ์ด๋ฆ์ด ๋ณ๊ฒฝ๋ ํ์ผ์ด ์๋์ง ์ดํด๋ณด๋ผ๋ ์ต์
์ด๋ค.
๊ฐ ํ์ผ์ ๋ด์ฉ์ ์๋์ ๊ฐ๋ค.
$ cat 0001-add-limit-to-log-function.patch
From 330090432754092d704da8e76ca5c05c198e71a8 Mon Sep 17 00:00:00 2001
From: Jessica Smith <jessica@example.com>
Date: Sun, 6 Apr 2008 10:17:23 -0700
Subject: [PATCH 1/2] add limit to log function
Limit log functionality to the first 20
---
lib/simplegit.rb | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/lib/simplegit.rb b/lib/simplegit.rb
index 76f47bc..f9815f1 100644
--- a/lib/simplegit.rb
+++ b/lib/simplegit.rb
@@ -14,7 +14,7 @@ class SimpleGit
end
def log(treeish = 'master')
- command("git log #{treeish}")
+ command("git log -n 20 #{treeish}")
end
def ls_tree(treeish = 'master')
--
2.1.0๋ฉ์ผ๋ง๋ฆฌ์คํธ์ ์ด๋ฉ์ผ์ ๋ณด๋ด๊ธฐ ์ ์ ๊ฐ Patch ํ์ผ์ ์์ผ๋ก ๊ณ ์น ์ ์๋ค.
--- ๋ผ์ธ๊ณผ Patch๊ฐ ์์๋๋ ๋ผ์ธ(diff --git ๋ก ์์ํ๋ ๋ผ์ธ) ์ฌ์ด์ ๋ด์ฉ์ ์ถ๊ฐํ๋ฉด ๋ค๋ฅธ ๊ฐ๋ฐ์๋ ์ฝ์ ์ ์์ง๋ง, ๋์ค์ Patch์ ์ ์ฉ๋์ง๋ ์๋๋ค.
ํน์ ๋ฉ์ผ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ๊ฑฐ๋ ์ด๋ฉ์ผ์ ๋ณด๋ด๋ ๋ช
๋ น์ด๋ก ๋ฉ์ผ๋ง๋ฆฌ์คํธ์ ๋ณด๋ผ ์ ์๋ค.
๋ถ์ฌ ๋ฃ๊ธฐ๋ก ์์ ๋ด์ฉ์ด ๊ทธ๋๋ก ๋ค์ด๊ฐ์ง ์๋ ๋ฉ์ผ ํ๋ก๊ทธ๋จ๋ ์๋ค. ์ฌ์ฉ์ ํธ์๋ฅผ ์ํด ๊ณต๋ฐฑ์ด๋ ๋ผ์ธ ๋ฐ๊ฟ ๋ฌธ์ ๋ฑ์ ๋ฃ์ด ์ฃผ๋ ๋ฉ์ผ ํ๋ก๊ทธ๋จ์ ์๋ณธ ๊ทธ๋๋ก ๋ค์ด๊ฐ์ง ์๋๋ค.
๋คํํ Git์๋ Patch ๋ฉ์ผ์ ๊ทธ๋๋ก ๋ณด๋ผ ์ ์๋ ๋๊ตฌ๊ฐ ์๋ค. IMAP ํ๋กํ ์ฝ๋ก ๋ณด๋ธ๋ค.
์ ์๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก Gmail์ ์ฌ์ฉํ์ฌ Patch ๋ฉ์ผ์ ์ ์กํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์. ์ถ๊ฐ๋ก Git ํ๋ก์ ํธ์ Documentation/SubmittingPatches ๋ฌธ์์ ๋ง์ง๋ง ๋ถ๋ถ์ ์ดํด๋ณด๋ฉด ๋ค์ํ ๋ฉ์ผ ํ๋ก๊ทธ๋จ์ผ๋ก ๋ฉ์ผ์ ๋ณด๋ด๋ ๋ฐฉ๋ฒ์ ์ค๋ช
ํ๋ค.
๋ฉ์ผ์ ๋ณด๋ด๋ ค๋ฉด ๋จผ์ ~/.gitconfig ํ์ผ์์ ์ด๋ฉ์ผ ๋ถ๋ถ ์ค์ ํ๋ค.
git config ๋ช
๋ น์ผ๋ก ์ถ๊ฐํ ์๋ ์๊ณ ์ง์ ํ์ผ์ ์ด์ด์ ์ถ๊ฐํ ์๋ ์๋ค. ์๋ฌดํผ, ์๋์ ๊ฐ์ด ์ค์ ์ ํ๋ค.
[imap]
folder = "[Gmail]/Drafts"
host = imaps://imap.gmail.com
user = user@gmail.com
pass = YX]8g76G_2^sFbd
port = 993
sslverify = falseIMAP ์๋ฒ๊ฐ SSL์ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๋ง์ง๋ง ๋ ๋ผ์ธ์ ํ์ ์๊ณ host์์ imaps:// ๋์ imap:// ๋ก ํ๋ค.
์ด๋ ๊ฒ ์ค์ ํ๋ฉด git imap-send ๋ช
๋ น์ผ๋ก Patch ํ์ผ์ IMAP ์๋ฒ์ Draft ํด๋์ ์ด๋ฉ์ผ๋ก ๋ณด๋ผ ์ ์๋ค.
$ cat *.patch |git imap-send
Resolving imap.gmail.com... ok
Connecting to [74.125.142.109]:993... ok
Logging in...
sending 2 messages
100% (2/2) done์ดํ Gmail์ Draft ํด๋๋ก ๊ฐ์ To ๋ถ๋ถ์ ๋ฉ์ผ๋ง๋ฆฌ์คํธ์ ์ฃผ์๋ก ๋ณ๊ฒฝํ๊ณ CC ๋ถ๋ถ์ ํด๋น ๋ฉ์ผ์ ์ฐธ๊ณ ํด์ผ ํ๋ ๊ด๋ฆฌ์๋ ๊ฐ๋ฐ์์ ๋ฉ์ผ ์ฃผ์๋ฅผ ์ ๊ณ ์ค์ ๋ก ์ ์กํ๋ค.
SMTP ์๋ฒ๋ฅผ ์ด์ฉํด์ Patch๋ฅผ ๋ณด๋ผ ์๋ ์๋ค.
๋จผ์ SMTP ์๋ฒ๋ฅผ ์ค์ ํด์ผ ํ๋ค. git config ๋ช
๋ น์ผ๋ก ํ๋์ฉ ์ค์ ํ ์๋ ์์ง๋ง ์๋์ ๊ฐ์ด ~/.gitconfig ํ์ผ์ sendemail ์น์
์ ์์ผ๋ก ์ง์ ๊ณ ์ณ๋ ๋๋ค.
[sendemail]
smtpencryption = tls
smtpserver = smtp.gmail.com
smtpuser = user@gmail.com
smtpserverport = 587์ด๋ ๊ฒ ์ค์ ํ๋ฉด git send-email ๋ช
๋ น์ผ๋ก ํจ์น๋ฅผ ๋ณด๋ผ ์ ์๋ค.
$ git send-email *.patch
0001-added-limit-to-log-function.patch
0002-changed-log-output-to-30-from-25.patch
Who should the emails appear to be from? [Jessica Smith <jessica@example.com>]
Emails will be sent from: Jessica Smith <jessica@example.com>
Who should the emails be sent to? jessica@example.com
Message-ID to be used as In-Reply-To for the first email? y๋ช ๋ น์ ์คํํ๋ฉด ์๋์ ๊ฐ์ด ์๋ฒ๋ก Patch๋ฅผ ๋ณด๋ด๋ ๋ด์ฉ์ด ํ๋ฉด์ ๋ํ๋๋ค.
(mbox) Adding cc: Jessica Smith <jessica@example.com> from
\line 'From: Jessica Smith <jessica@example.com>'
OK. Log says:
Sendmail: /usr/sbin/sendmail -i jessica@example.com
From: Jessica Smith <jessica@example.com>
To: jessica@example.com
Subject: [PATCH 1/2] added limit to log function
Date: Sat, 30 May 2009 13:29:15 -0700
Message-Id: <1243715356-61726-1-git-send-email-jessica@example.com>
X-Mailer: git-send-email 1.6.2.rc1.20.g8c5b.dirty
In-Reply-To: <y>
References: <y>
Result: OK์ด๋ฒ ์ ์์๋ ๋ค์ํ ์ํฌํ๋ก์ ๋ฐ๋ผ Git์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ์ดํด๋ณด๊ณ ๊ทธ์ ํ์ํ ๋๊ตฌ๋ค์ ์ค๋ช ํ๋ค. ๋ค์ ์ ์์๋ ๋์ ์ ๋ท๋ฉด์ธ ํ๋ก์ ํธ๋ฅผ ์ด์ํ๋ ๋ฐฉ๋ฒ์ ๋ํ์ฌ ์ดํด๋ณธ๋ค. ์ฆ ์น์ ํ Dictator๋ Integration-Manager๊ฐ ๋์ด ๋ณด๋ ๊ฒ์ด๋ค.















