๊ฐ์
๊ธฐ๋ณธ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ๋ถ๊ธฐ ์ฐธ์กฐ๋ฅผ ์ ๋ฐ์ดํธํ์ฌ Git์ ์ค์นํ์ง ์๊ณ ๋ Git์์ ์ํํ ์ ์๋ ๋ชจ๋ ์์ ์ ๊ธฐ์ ์ ์ผ๋ก ์ํํ ์ ์์ผ๋ฏ๋ก REST API๋ฅผ ํตํด ๋ง์ Git ๊ธฐ๋ฅ์ ๋ค์ ๊ตฌํํ ์ ์์ต๋๋ค.
REST API๋ Git ๋ฆฌํฌ์งํ ๋ฆฌ๊ฐ ๋น์ด ์๊ฑฐ๋ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ 409 Conflict
๋ฅผ ๋ฐํํฉ๋๋ค. ์ฌ์ฉํ ์ ์๋ ๋ฆฌํฌ์งํ ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก GitHub๊ฐ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ๋ง๋๋ ์ค์์ ์๋ฏธํฉ๋๋ค. ๋น ๋ฆฌํฌ์งํ ๋ฆฌ์ ๊ฒฝ์ฐ, PUT /repos/{owner}/{repo}/contents/{path}
REST API ์๋ํฌ์ธํธ๋ฅผ ์ฌ์ฉํด ์ฝํ
์ธ ๋ฅผ ๋ง๋ค๊ณ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๋ฉด ํด๋น API๋ฅผ ์ฌ์ฉํด Git ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ด ์๋ต ์ํ๊ฐ ์ง์๋๋ฉด GitHub ์ง์ ํฌํธ ์ฌ์ฉ์ ๋ฌธ์ํ์ธ์.
Git ๊ฐ์ฒด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์์ธํ ๋ด์ฉ์ Pro Git ์ฑ ์ Git Internals ์ฑํฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
์๋ฅผ ๋ค์ด ๋ฆฌํฌ์งํ ๋ฆฌ์ ํ์ผ์ ๋ํ ๋ณ๊ฒฝ ๋ด์ฉ์ ์ปค๋ฐํ๋ ค๋ ๊ฒฝ์ฐ ๋ค์์ ์ํํฉ๋๋ค.
- ํ์ฌ ์ปค๋ฐ ๊ฐ์ฒด ๊ฐ์ ธ์ค๊ธฐ
- ๊ฐ๋ฆฌํค๋ ํธ๋ฆฌ ๊ฒ์
- ํด๋น ํน์ ํ์ผ ๊ฒฝ๋ก์ ๋ํด ํธ๋ฆฌ์ ์๋ Blob ๊ฐ์ฒด์ ์ฝํ ์ธ ๊ฒ์
- ์ด๋ป๊ฒ๋ ์ฝํ ์ธ ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ ์ฝํ ์ธ ๊ฐ ํฌํจ๋ ์ Blob ๊ฐ์ฒด๋ฅผ ๊ฒ์ํ์ฌ Blob SHA ๋ค์ ๊ฐ์ ธ์ค๊ธฐ
- ํด๋น ํ์ผ ๊ฒฝ๋ก ํฌ์ธํฐ๊ฐ ํธ๋ฆฌ SHA๋ฅผ ๋ค์ ๊ฐ์ ธ์ค๋ ์ Blob SHA๋ก ๋์ฒด๋ ์ ํธ๋ฆฌ ๊ฐ์ฒด ๊ฒ์
- ํ์ฌ ์ปค๋ฐ SHA๋ฅผ ๋ถ๋ชจ ๋ฐ ์ ํธ๋ฆฌ SHA๋ก ์ฌ์ฉํ์ฌ ์ ์ปค๋ฐ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ปค๋ฐ SHA ๋ค์ ๊ฐ์ ธ์ค๊ธฐ
- ์ ์ปค๋ฐ SHA๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ๋ถ๊ธฐ ์ฐธ์กฐ ์ ๋ฐ์ดํธ
๋ณต์กํด ๋ณด์ผ ์ ์์ง๋ง ๋ชจ๋ธ์ ์ดํดํ๊ณ API๋ก ํ ์ ์๋ ๋ง์ ์์ ์ ์ด๋ฉด ์ค์ ๋ก ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
๋์ด์ค๊ธฐ ์์ฒญ์ ๋ณํฉ ๊ฐ๋ฅ์ฑ ํ์ธ
๊ฒฝ๊ณ
์ด ์ฝํ
์ธ ๋ ๊ฒฝ๊ณ ์์ด ์ค๋๋์์ผ๋ฏ๋ก Git ์ฐธ์กฐ๋ฅผ merge
ํ๋ ์
๋ฐ์ดํธ๋ฅผ ์ํด Git์ ์ง์ ์ฌ์ฉํ๊ฑฐ๋ GET /repos/{owner}/{repo}/git/refs/{ref}
๋ฅผ ์ฌ์ฉํ์ง ๋ง์ธ์.
์๋น API๋ ํ
์คํธ ๋ณํฉ ์ปค๋ฐ์ ๋ง๋ค๊ธฐ ์ํด ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ช
์์ ์ผ๋ก ์์ฒญํด์ผ ํฉ๋๋ค.__ ํ
์คํธ ๋ณํฉ ์ปค๋ฐ์ UI์์ ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ณด๊ณ โ๋ณํฉโ ๋จ์ถ๊ฐ ํ์๋๊ฑฐ๋ REST API๋ฅผ ์ฌ์ฉํ์ฌ ๋์ด์ค๊ธฐ ์์ฒญ์ ๊ฐ์ ธ์ค๊ฑฐ๋, ๋ง๋ค๊ฑฐ๋, ํธ์งํ ๋ ๋ง๋ค์ด์ง๋๋ค.__ ์ด ์์ฒญ์ด ์์ผ๋ฉด ๋ค์์ ๋๊ตฐ๊ฐ๊ฐ ๋์ด์ค๊ธฐ ์์ฒญ์ ๋ณผ ๋๊น์ง merge
Git ์ฐธ์กฐ๊ฐ ๋ง๋ฃ๋ฉ๋๋ค.
ํ์ฌ ์ค๋๋ merge
Git ์ฐธ์กฐ๋ฅผ ์์ฑํ๋ ํด๋ง ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ GitHub๋ ๋ค์ ๋จ๊ณ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๋ณธ ๋ถ๊ธฐ์์ ์ต์ ๋ณ๊ฒฝ ๋ด์ฉ์ ๊ฐ์ ธ์ค๋ ๊ฒ์ด ์ข์ต๋๋ค.
- ๋์ด์ค๊ธฐ ์์ฒญ ์นํํฌ๋ฅผ ๋ฐ์ต๋๋ค.
- ๋ณํฉ ์ปค๋ฐ ํ๋ณด๋ฅผ ๋ง๋ค๊ธฐ ์ํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์
์ ์์ํ๋ ค๋ฉด
GET /repos/{owner}/{repo}/pulls/{pull_number}
๋ฅผ ํธ์ถํฉ๋๋ค. GET /repos/{owner}/{repo}/pulls/{pull_number}
๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํด๋งํ์ฌmergeable
ํน์ฑ์ดtrue
๋๋false
์ธ์ง ํ์ธํฉ๋๋ค. Git์ ์ง์ ์ฌ์ฉํ๊ฑฐ๋ ์ด์ ๋จ๊ณ๋ฅผ ์ํํ ํ์๋งmerge
Git ์ฐธ์กฐ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ํดGET /repos/{owner}/{repo}/git/refs/{ref}
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.