More Related Content
git, ์ดํด๋ถํฐ ํ์ฉ๊น์ง Git: A Motivating Introduction Git branch stregagy & case study แแ
ฉแแ
ณแซแแ
ฉแแ
ณ แแ
ฉแผแแ
ฅแซแแ
ณแฏ แแ
ฑแแ
กแซ แแ
ตแฏแแ
ฎ แแ
ตแแ
ตแจ What's hot (20)
[๊ธฐ์ด] GIT ๊ต์ก ์๋ฃ ์ดํด๋ฆฝ์ค๋ก GIT ์ฌ์ฉํ๊ธฐ Git ๊ธฐ๋ณธ๊ฐ๋
๊ณผ ์ฌ์ฉ๋ฒ ๊ทธ๋ฆฌ๊ณ ์ดํ๋ฆฌ์ผ์ด์
Git ์ฝ๋๋ฉ ์คํฐ๋ 2 2011๋
KTH H3 ์ปจํผ๋ฐ์ค Track B, ์ธ์
4 "Advanced Git" by A.J Git ์
๋ฌธ์๋ฅผ ์ํ ๊ฐ์ด๋ Git ๊ณผ GitHub ๋ฅผ ์ด์ฉํ ๋ฒ์ ๊ด๋ฆฌ์ ํ์
- 2์ฃผ์ฐจA - ๋น๊ตํ๊ธฐ์ ๋๋๋ฆฌ๊ธฐ Git ๋ถ์ฐ๋ฒ์ ๊ด๋ฆฌ ์์คํ
(1) Git ๋ํ๊ธฐ GitHub(๊ตฌ๋ฆIDE ํ๊ฒฝ) Similar to Git from google techtalks by Randal (20)
แแ
ขแแ
ฅแแ
ณ แแ
กแแ
ตแแ
ณ แแ
ฎ แแ
ตแบ Gitแแ
ด แแ
ขแแ
งแทแแ
ช แแ
กแแ
ญแผ [17.02.09] Github introduction (Korean Version) Git Merge - ์ฌ๋ฌ ๋ธ๋์นญ ์๋๋ฆฌ์ค ์๊ฐ: 2022๋
7์ 8์ผ Git ์ธ๋ฏธ๋ Git server แแ
ฎแแ
ฎแจ(git olite,gitweb) [์คํ์์ค์ปจ์คํ
]Subversion vs git - ์ฐธ์ ์ ์๋ ๊ฐ๋จํจ Git ์ฝ๋๋ฉ ์คํฐ๋ 1 Git ๋ํ๊ธฐ GitHub(Gitํด๋ผ์ด์ธํธ ํ์ฉ) / Getting started with git+github svn ๋ฅ๋ ฅ์๋ฅผ ์ํ git ๊ฐ๋
๊ฐ์ด๋ [T์์นด๋ฐ๋ฏธ] ๋น๊ฐ๋ฐ์๋ฅผ ์ํ Git๊ณผ Github Page ๋ธ๋ก๊ทธ ๋ง๋ค๊ธฐ Git from google techtalks by Randal
- 1. Git fromย Google TechTalks Randal Schwatz ์ Google TechTalks slides * ์ผ๋ถ์์ญ ๋ด์ฉ์ด๋ ๋ฒ์ญ ( ์์ญ ) ์ด ๋ง์ ์๋์๋๋ถ์ ์ฐ๋ฝ์ฃผ์๋ฉด ๊ฐ์ฌํ ๋ฐ์ํ๊ฒ ์ต๋๋ค . ์ผ๋ถ ๊ธธ์ด์ง์์๋ ์ถ๊ฐ ์ค๋ช
์ ๋ธ๋ก๊ทธ ํ๋จ์ ์์น ํฉ๋๋ค . ์ด๋ฏธ git ์ ์ข ์ฌ์ฉํ์ ๋ถ์ ๋์์ด ๋์ง ์์์๋ ์์ต๋๋ค .
- 2. Disclaimer git ์ ์์๊ณผ ํจ๊ปํจ ( ๋ฆฌ๋์ค ํ ๋ฐ์ฆ๊ฐ ์ด์ข๊ฒย Randalย ๊ทผ์ฒ๋ก ์ด์ฌ์ด ใทใท ) ์์ ํ๋ก์ ํธ์ ์ฌ์ฉ ์ค๋ ๊ฒฝ๋ ฅ๋์ ๋ค๋ฅธ ์์คํ
๋ ์ฌ์ฉํด๋ณด์์ git ์ ๊ด๋ จ๋ mailing-list ์ฃผ์ํจ git ์ patch ๋ฅผ ๊ธฐ์ฌ , UI ๋ณํ ์ ์ ์์ ํ๊ณผ ํจ๊ป GIT ์ฌ์ฉ๊ฒฝํ ํฐํ๊ณผ GIT ์ฌ์ฉ๊ฒฝํ์ ์ ๋ฌด
- 3. What is git?ย ย ย file tree ์ ๊ฐํด์ง ๋ณ๊ฒฝ์ ๊ด๋ฆฌ Git ์ ์ต์ ํ : ๋ถ์ฐ ๊ฐ๋ฐ ( ๋ฆฌ๋
์ค ์ปค๋์ ์ฌ๋ฌ๊ตญ๊ฐ์์ ๋์์ ๊ฐ๋ฐ๋จ ) ๋ง์ ํ์ผ ์งํฉ ๊ด๋ฆฌ ( ๋ฆฌ๋
์ค ์ปค๋์ 35000 ๊ฐ ์ด์ ) ๋ณต์กํ ๋ณํฉ Merge ์ํ์ ๋ถ๊ธฐ Branch ๋ง๋ค๊ธฐ ( ๋ถ๊ธฐ๊ฐ ์ฝ๋ค๋๊ฒ์ ์ํ์ ์ผ๋ก ๋ฌด์์ธ๊ฐ ๊ฐ๋ฐํ๋๊ฒ์ ๋
๋ คํ๊ฒ ๋๋ค . ) ๋น ๋ฆ ( ์ > diff, merge ) ๊ฒฌ๊ณ ํจ ( ํฐ ํ๋ก์ ํธ์์ ๊ฒฌ๊ณ ํจ์ด ์์ผ๋ฉด ... ) Git ์ด ๊ณ ๋ คํ์ง ์์ ์ต์ ํ : ํ์ผ ๊ถํ๊ณผ ์์ ๊ถ ๊ฐ ํ์ผ์ ์ญ์ฌ
- 4. Why git? ๋ฆฌ๋
์ค ์ปค๋ ๊ฐ๋ฐ์ ๋งค์ฐ ์ค์ BitKeeper ์ ๋์ ์๋ฌด๋ย ๋ฐ์ commit ํจ ( ๋ถ์ฐ์ ํน์ฑ : ๋ฐฐํฌ์ ๋ฐ์๋๋๊ฒ์ ์ ํ์ ) ์๋ฌด๋ ๊ฐ๋ฅ : ํธ๋ฆฌ ๋ณต์ ๋ก์ปฌ ๊ฐ๋ฐ๊ณผ ํ
์คํธ ๋ณ๊ฒฝ ํจ์น๋ฅผ EMAIL ๋ก ๋ณด๋ด๊ฑฐ๋ ๋ง์คํฐ ์ ์ฅ์์ ๋ณํฉ์ ์ํ ๋ณ๋ ์๋ฒ๋ฅผ ๋์ ์ข๋ ๊ฐ๋ฐ๋ ๋ฒ์ ผ์ ๋ณ๊ฒฝ์ฌํญ์ ๋ณํฉ merge ์ ๋์ ๊ณต๊ฐ ์ ๊ทผ
- 5. How does git do it? ๋ณดํธ์ ๊ณต๊ฐ ์๋ณ์ Universal Public Identifier ( SHA-1 40 char ๋ฌธ์์ด์ ํตํด ํ์ผ , ๋๋ ํ ๋ฆฌ๋ฑ ๊ฐ๋ฆฌ์ง ์๊ณ ๊ฐ์ฒด์ ์ผ๊ด์ ์ธ ์ ๊ทผ์ ๊ฐ๋ฅ์ผ ํจ ) SVK ๊ฐ์๊ฒ๊ณผ ๋ค๋ฆ ( ์ > ๋ด @245 ๊ฐ ๋์ @992 ์ด๋ค ) SVK ๋ ๋ถ์ฐํ VCS( perl ๋ก ๋ง๋ฌ ) ๋ค์คํ๋กํ ์ฝ ์ ์ก ์ง์ ( HTTP, SSH, GIT ) ํจ์จ์ ์ค๋ธ์ ํธ ์ ์ฅ์ ๋ชจ๋๊ฐย ์ ์ฅ์ ์ ์ฒด ์์ ( ํจ์จ์ ๊ณต๊ฐ์ ์ฌ์ฉํจ , ๋ชจ๋ ๋ณ๊ฒฝ ๊ธฐ๋ก์ ๊ฐ์ง๊ณ ์์ ) ์ฌ์ดย ๋ถ๊ธฐ branching ๊ณผย ๋ณํฉ merge ( ์ฅ์ ) ๋ฐ์์ด๋ย ๋ณํฉ์ดย ๋ฐ์ํด๋ ๊ณตํต๋ถ๋ชจ๋ฅผ ์ถ์ ํ ์์์ ๋ฐ์ด๋๋ฆฌ ํจ์น ์ง์ ( jpeg ๊ฐ์ ์ด๋ฏธ์ง ๋ค๋จ )ย
- 6. The SHA1 is King <1> ๋ชจ๋ ๊ฐ์ฒด๋ ์๋ณ์ฉ ๊ณ ์ SHA1 ์ ๊ฐ๊ณ ์๋ค . ์ค๋ธ์ ํธ ( object ) ๊ตฌ์ฑ : Blobs( ํ์ผ์ ๋ด์ฉ ) ํธ๋ฆฌ (Blobs ์ ํธ๋ฆฌ , ์ด์ธ์ ํธ๋ฆฌ ) ํธ๋ฆฌ์ ์์น๋ณ๊ฒฝ๋ง์ผ๋ก๋ ์๋ณ์๊ฐ ๋ณ๊ฒฝ๋์ง ์์ผ๋ฉฐ , ๋ด์ฉ์ ๋ณต์ฌํ์ง ์๊ณ ์๋ณธ์ ์ ์งํ๋ค . ๋ณต์ฌ๋ณธ๋ ๋๊ฐ์ ๋ฐ์ (Commit): A Tree ๋ถ๋ชจ๊ฐ ์๊ฑฐ๋ , ์ฌ๋ฌ ๋ถ๋ชจ๊ฐ ์๋ Tree( ์ฃผ๋ก ์ ํ์ด๋ฉฐ , ์ฌ๋ฌ ๋ถ๋ชจ๋ฅผ ํตํดย ๋ณํฉ merge ํ ย ์๋ ์๋ค . ) Why( ์ปค๋ฐ ์ด์ ๋จ๊ธธ์์๋ค )
- 7. The SHA1 is King <2> Tags: ์ค๋ธ์ ํธ ( ๋ณดํต commit ์ ) ์ฃผ์ ๋ฅผ ํฌํจ ( ์๋ณ์ , ์ > Kernel 2.6.18-194) ๋ถ๊ฐ์ ์ธ๊ฒ์ ํต์์ Tag ๋ฅผ ์๊ฐํ๋ฉด ๋๋ค .
- 8. Objects live in the repo Git ์ ์ ์ค๋ธ์ ํธ๋ฅผ ํจ์จ์ ์ผ๋ก ์์ฑํ๋ค . ์ค๋ธ์ ํธ๋ ์ผ๋ฐ์ ์ผ๋ก ์ถ๊ฐ๋๋ฉฐ , ์ญ์ ๋์ง ์๋๋ค . ์ฐธ์กฐ๋์ง ์๋ ์ค๋ธ์ ํธ ( ์ > ์ง์์ง branch, ์ถ๊ฐ๋์ง๋ง commit ๋์ง ์์ ๊ฒ๋ค , etc ) ๋ค์ garbage collect ๋ ์ ์๋ค . ์ค๋ธ์ ํธ๋ค์ ์ฐธ์กฐ๋์ง ์์์ ์๋ค . ํ์ผ์์คํ
์ ํจ์จ์ ์ํด pack ๋ ์ ์๋ค (git-gc ๋ฅผ ํตํด ์ฒญ์ํ ์์๋ค . packing ํด์ ๋ค๋ฅธ๊ณณ์ ์ ์ฅ . ์ ์ฅ์๋ฅผ ์ผ๊ด์ ์ผ๋ก ์ต์ ๊ณต๊ฐ ์ ์ง ) Packs ๋ ๊ณต๊ฐ ํจ์จ์ ์ํด deltas( ์ค๋ธ์ ํธ ) ๋ก ํํ๋ ์์๋ค .( ํฐ ํ์ผํ๋์ ์์ ๋ณํ๊ฐ ์์์ , ์ ๋ถ ์ ์ฅํ๋ ๊ฒ์ด ์๋ ๋ณํ๋ง์ ํจ์จ์ ์ผ๋ก ์ ์ฅ ) Packs ๋ ์ ์ฅ์๊ฐ์ ์ ๋ณด ์ ์ก์ ์ํด ์ฌ์ฉ๋ ์ ์๋ค .
- 9. Commits rule the repo ์ค๋ธ์ ํธ ์ฐ๊ฒฐ์ฒด์ย ์ต์ head ์ ๋ฐ์ commit ์ด ๋ง๋ค์ด๋ธ๋ค . ๊ทธย ์ต์ head ๋ค์คย ํน์ง์ ์ผ๋ก "master" ๋ผ๋ ๊ฒ์ด ์๋ค .( ์ฒ์ repoย ๋ง๋ค๋ ์๊ธฐ๋ ์ต์ด์ ๋ถ๊ธฐ branch ) ๋ค๋ฅธ ๋ถ๊ธฐ branch ๋ ์ฌ์ฉ์์ ์์ง์ ์ํด ๋ง๋ค์ด์ง ( ์ > ' ๋ฒ๊ทธ ๊ณ ์นจ A' ๋ธ๋์น๋ก ๋ถ๊ธฐํด์ ๋ฌธ์ ๋ฅผ ์์ ํ ์ฐ์์ ๋ฐ์ commits ์ย ์ต์ Head ์ย ํตํด ๋ค์ master ๋ก ๋ณํฉ merge ํ๋ค . ) ์ ๊ทผ ๊ฐ๋ฅํ ๋ชจ๋ ์ ์ฅ์ ์ค๋ธ์ ํธ๋ค์ ์ด ๋ฐ์ commits ๋ค์ย ์ต์ Head ์ผ๋ก๋ถํฐ ์ ๊ทผํ๋ค . ํน์ ๋ฐ์ ์์ ์ผ๋ก ๋ถํฐ ํธ๋ฆฌ ์ค๋ธ์ ํธ๋ฅผ ์ถ์ ํด ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ์ ๊ทผํ๋ค . ๋ถ๋ชจ ์ค๋ธ์ ํธ๋ฅผ ์ถ์ ํ๋ฉด ์์ ๋ฐ์ commit ๋ค๊ณผ ๊ทธ๋ค ๊ฐ๊ฐ์ ํธ๋ฆฌ๋ฅผ ์ ๊ทผํ ์ ์๋ค .
- 10. Mapping objects to a file tree " ์์
์ค์ธ ํธ๋ฆฌ " ๋ ".git" ๋๋ ํ ๋ฆฌ๋ฅผ ์ต์์ ๊ฒฝ๋ก์ ๊ฐ์ง๊ณ ์๋ค . CVS, SVN ๊ณผ๋ ๋ฌ๋ฆฌ ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๊ฐ ๊น์ด์ ธ๋ ๊ท์ฐฎ์ ๊ฒ ( ์ > .svn ) ๋ค์ด ์๋ค . ( "grep -r" ์ฌ์ฉ์๋ ํธ๋ฆฌ ) .git ๋๋ ํ ๋ฆฌ์ ๊ตฌ์ฑ : config - configuration ํ์ผ ( .ini ์คํ์ผ ) objects/* - ์ค๋ธ์ ํธ ์ ์ฅ์ refs/heads/* - ๋ถ๊ธฐ๋ค branches ( ์ > "master" ) refs/tags/* - tags logs/* - logs refs/remotes/* - ๋ค๋ฅธ์ด๋ค์ ์์
์ถ์ index - the "index cache" ( ํ์ ์ค๋ช
) HEAD - ๋ถ๊ธฐ์ค ํ๋๋ฅผย ๊ฐ๋ฅดํด ( " ํ์ฌ ์ฌ์ฉ์ค์ธย ๋ฐ์๋ ย ๋ถ๊ธฐ " )
- 11. The index (or "cache") blob ์ค๋ธ์ ํธ๋ค์ ๋๋ ํ ๋ฆฌ " ๋ค์ ๋ฐ์ commit " ์ ๋ปํจ ( ๋ฐ์์ ํ๋ค๋๊ฒ์ index ๋ฅผ ๋ค์ ๋ฐ์ next commit ์ผ๋ก ๋ณํํ๋๊ฒ์ ๋งํจ ) " ํ์ผ ์ถ๊ฐ adding files " ๋ ๋์์ ์ธ๋ฑ์ค์ ๋ฃ๋๊ฒ์ ๋งํ๋ค .( ๊ทธ๋ฌ๋ฏ๋ก ์ต๋ฑ์ฑ ํ์ง ์๋ ๋์์ ๋ณ๊ฒฝ์ฌํญ์ ์ถ์ ๋์ง ์๋๋ค . ) ๋ฐ์ commit ์ ํ์ index ๋ฅผ ์ค์ ๋ฐ์ ์ค๋ธ์ ํธ real commit object ๋ก ๋ง๋ ๋ค . HEAD ์ index ์ ์ฐจ์ด Diff ๋ ๋ฐ์ commit ํ์ง ์์ ๋ณ๊ฒฝ์ฌํญ index ์ working dir ์ ์ฐจ์ด Diff ๋ ์ถ๊ฐ add ๋์ง ์์ ๋ณ๊ฒฝ์ฌํญ index ๋ ๋ณํฉ merge ์ค ์ถฉ๋ conflict ์ฌํญ ์ ๋ณด๋ฅผ ๋นํฌํจํ๋ค
- 12. The great renaming controversy Git ์ ๋ช
์์ ์ด๋ฆ๋ณ๊ฒฝ explicit renaming ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ์ฌ์ฉ์๊ฐ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ์ง ์๋๋ค . ์ด๋ฆ๋ณ๊ฒฝ์ SHA1 ๋น๊ต๋ฅผ ํตํด ํ๋จํ ์์๋ค . Copy-paste-edits ๋ ๋ก๊ทธ logs ์ย ์์ ์ ์ฌ์ฑ ๋ฒ์น ad-hoc similarity rules ์ ์ ์ฉํด ๊ฒ์ถ๊ฐ๋ฅ ์ผ๋ฐ์ ์ผ๋ก ์ฌ๋๋ณด๋ค ์ปดํจํฐ๊ฐ ์ ์ฌ์ฑ ์ฐพ๊ธฐ์ ๋ฅํ๋ค ์ฌ์ฉ์๊ฐ ๋ช
์์ ์ผ๋ก ์ ๊ทผ์ ์๋ชป ๋ ์ ์๋ค . ์ด๊ฒ์ ๋ณํฉ merge ๋ฅผ ๋ฐฉํดํ๋ค . ์ณ์ ๋ช
์์ ์ ๊ทผ๋ ๋ฐฉํด๊ฐ ๋ ์์๋ค . ๊ฒฐ๋ก : ๋ด์ฉ์ ์ถ์ ํ๋๊ฒ์ด , ๋ด์ฉ์ ๋ด๋ ์ปจํ
์ด๋๋ฅผ ์ถ์ ํ๋๊ฒ๋ณด๋ค ์ ์ฐํ๊ณ ์ ํํ๋ค .
- 13. Git speaks and listens ์ ์ฅ์ repo ๊ฐ ๋ง์ ํ๋กํ ์ฝ์ ํตํด git data ๋ฅผ ์ ์ก rsync, http, https, git, ssh, local files Git Core ๊ฐ ํฌํจ : CVS ๋ฅผ import/exportย SVN ์ย import/exportย Arch ๋ฅผ import CVS/SVN import ๋ฅผ ํตํด ํ๋ก์ ํธ์ ์ ์ฒด history ๋ฅผ ์ด๋์๋ offline ์ผ๋ก ์ ๊ทผ๊ฐ๋ฅ ์จ๋ํํธ ์๋ฃจ์
๋ค์ด ๋ํ ์กด์ฌ ( ์ > Perforce) ๋ ๊ฑฐ์๋ฅผ ๊ณ ์งํ๋ ์ฌ๋์ ์ํ CVS server ๋ ํฌํจํ๋ค .ย
- 14. Getting Git http://www.kernel.org/pub/software/scm/git/ ์์ ์ต์ git-*.tar.gz ์ ํตํด RPMs ๊ณผ Debian ํจํค์ง git ์ ๋ถํธ์คํธ๋ฉํ์ ๊ฒฝ์ฐ , git-developer archive ๋ฅผ git-clone ! - git-clone git://git.kernel.org/pub/scm/git/git.git ํ์ฃผ์ ํ๋ฒ์ ๋ ๋ฆฌ๋น๋ ( ๋ณ๋ฌธ์ ์๋ค ) Maintenance Release ๋ ๋งค์ฐ ์์ ์
- 15. Git commands ๋ชจ๋ git ๋ช
๋ น์ "git-" ์ผ๋ก ์์ "git-MUMBLE-FOO bar" = "git MUMBLE-FOO bar" ์์ ๊ฐ์ผ๋ฏ๋ก "git" ํ๋๋ง /usr/local/bin ์ ์ถ๊ฐํด์ย ย ย ์คํ ๊ฐ๋ฅ ๋ด๋ถ ํธ์ถ internal call ๋ ์๋์ ๋์๋ง manpages ์ "git-MUMBLE-FOO" ํํ๋ก ์กด์ฌ . ๊ทธ๋ฌ๋ฏ๋ก ์ ๋ฐฉ์๋ ์์์ผํ๋ค . ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก git help MUMBLE-FOO ๋ ๊ฐ๋ฅ
- 16. "The internet is just a series of tubes" ์ ์์ค git ์์
low-level git operationย ์ ๋ฐฐ๊ด plumbing ์ด๋ผ ํ๋ค . ๊ณ ์์ค git ์์
higher level action ์ ์๊ธฐ porcelain ์ด๋ผ ํ๋ค . ๊ณ๋ค๋ฆฌ๋ Blog ํ๋จ์ ์ค๋ช
git ๋ฐฐํฌํ์ git ๋ฐฐ๊ด plumbing ๊ณผ ์๊ธฐ porcelain ๋ฅผ ๋๋ค ํฌํจ ๋๋จธ์ง ์ฌ๋ผ์ด๋๋ ๋ฐ๋ก ์ธ๊ธํ์ง ์๋ ์ด์ย git ์๊ธฐ porcelain ๋ฅผ ํตํด ์ด์ผ๊ธฐ ๋ค๋ฅธ ์๊ธฐ porcelain ๊ฐ ์กด์ฌ : StGit : stacked git guilt tig(curses-based viewer) qgit
- 17. Creating a repoย ย ย git-init ํ์ฌ ๊ฒฝ๋ก์ .git ์ ๋ง๋ ๋ค . Optional: .gitignore ์ ํธ์งํด์ ๋ฌด์ํ ํ์ผ ์ง์ "git-add ." ๋ก ๊ฒฝ๋ก๋ก๋ถํฐ ๋ชจ๋ ํ์ผ ์ถ๊ฐ (.git ์ ์ธ ) ๊ทธ๋ฌ๋ฉด "master" ๋ ๋ถ๊ธฐ branch ๊ฐ ๋ง๋ค์ด์ง๋ค . ์ต์ Head ์ "master" ๋ฅผ ๊ฐ๋ฅดํค๊ฒ ๋๋ค . git-clone REMOTESPECย git ์ ์ฅ์ repo ๋ฅผ ๋ค๋ฅธ ์ ์ฅ์๋ก๋ถํฐ ๋ณต์ ์ผ๋ฐ์ ์ผ๋ก ํ์๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ ๋ค . ์์
ํ ํ์ผ๋ค working copy ์ .git ์ด ๊ทธ๊ณณ์ ์์น ์๊ฒฉ์ง์ ๋ชจ๋ ๋ถ๊ธฐ remote branch ๋ค์ ์ถ์ tracked ๋๋ค . ์๊ฒฉ์ง์ ์ต์ข
๋ถ๊ธฐ Head Branch ๊ฐ ์ฌ์ฉ์์ ์ด๊ธฐ master ๋ถ๊ธฐ๋ก ์ง์ ๋๋ค .
- 18. Think globally, work locally ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ์์ ๊ฒฐ๊ณผ๋ฌผ์ ์ถ๊ฐ ๋ฐ์ commits ๋ค์ด๋ค . ๋ฐ์ commits ๋ค์ย ํญ์ย ๋ถ๊ธฐ branch ์ ์ํด์๋ค . ๋ถ๊ธฐ branch ๋ ์ด๋ฆ์ง์ด์ง ๋ฐ์ commit ์ด๋ค . ์ฌ์ฉ์๊ฐ ๋ฐ์ commit ํ๊ฒ ๋๋ฉด ์ด์ ๋ถ๊ธฐ์ ์ต์ head ์ ๋ถ๋ชจ parent ๊ฐ ๋ฉ๋๋ค . ์ ๋ฐ์์ ๋ถ๋ชจ๊ฐ ๋๋ค๋ ์๋ฏธ ๋ถ๊ธฐ์ ์ต์ branch head ์ ์ ๋ฐ์ new commit ์ ๊ฐ๋ฅดํค๊ฒ ๋ฉ๋๋ค . ์ฌ์ฉ์๋ ๋ถ๊ธฐ ์ต์ Branch Head ์ ๋ฃจํธ root ๋ก ํ๋ DAG( Directed acyclic graph ) ๋ฅผ ๋ง๋๋ ์
์ด๋ค . ๋ณํฉ merge ์ ๋ค์ค๋ถ๋ชจ multiple parent ๋ฅผ ๋ ๋ฐ์ commit ์ด๋ค .
- 19. Typical work flow ํธ์ง git-add files ( ์ฌ์ฉ์์ ๋ณ๊ฒฝ์ฌํญ ) file ์ index ์ ์ถ๊ฐํจ "git-add ." ์ด ๋ฌด์ ignore ํ๋ ๊ฒ๋ค์ ์ ์ธํ๊ฒ๋ค์ ์ถ๊ฐ git-status ์ต์ Head ๊ณผ ์ธ๋ฑ์ค index , ์์
๊ฒฝ๋ก๊ฐ์ ์ฐจ์ด์ diff ์ ์๋ฆผ git-commit ย ( ์ฌ์ฉ์ ๋ฐ์ commit ์ด ์ค๋น๋์๋ ) ๋ก๊ทธ log ๋ฅผ ๊ธฐ๋กํ ์ ์๋ ํ
์คํธ ํธ์ง๊ธฐ๋ฌ๋ค ์ฒซํ์ " ์งง์ ๋ก๊ทธ log " ๋ฅผ ๊ธฐ๋กํ๋๊ณณ ํ์ฌ ๋ถ๊ธฐ current branch ์ ๊ฐ๋ฐ ์ผ๋ณด ์ ์ง๋จ ์ด์ ์ฌ์ฉ์๋ ๊ฐ๋ฐ์ ์ํด ์ข๋ ํธ์ง
- 20. But which branch? <1> ์ด์ ์ธ๊ธ์ฒ๋ผ Git ์ ๋ถ๊ธฐ branch ๋ฅผ ๋
๋ ค ย ๋ถ๊ธฐ branch ๋ 40 ๋ฐ์ดํธ ์ง๋ฆฌ ๋ฌธ์์ด๊ณผ '\n' : ์ ์๋น์ฉ ์ ํ์ ์ธ ์งํ๋ฐฉ์ : ๋ฌด์์ ํ ์ง ์ ํ๋ค . ์ ๋ถ๊ธฐ๋ฅผ ๋ง๋ ๋ค : git-checkout -b topic-name master ๊ฐ๋ฐ , ๊ฐ๋ฐ , ๊ฐ๋ฐ , ๊ทธ๋ฆฌ๊ณ topic-name ์ ๋ฐ์ commit ๋ถ๊ธฐ ๊ฐ๋ฐ์ด ๋๋๋ฉด : git-checkout master : master ๋ถ๊ธฐ๋ก ๋์๊ฐ๋ค git-merge topic-name : ๊ฐ๋ฐ์๋ฃ๋ ๋ถ๊ธฐ ๋ณํฉ git-branch -d topic-name ๋ถ๊ธฐ๊ฐ HEAD ๋ก๋ถํฐ ๋์ฌ๋๋ง ์๊ตฌ์ญ์ ํ์ฉ " ๋์ด์ ์ถ์ ์ํจ " ์ ํฌํจํ๋ ์๋ฏธ
- 21. But which branch? <2> ๊ฐ๊ฐ์ ๋ฐ์ commit ์ ํ์ํจ ๋ชจ๋ ์์
commits ์ ํ๋์ ๋ฐ์ a ย commit ์ผ๋ก ์์ถ flatten ํ๊ณ ์ถ์๋ : ย git-merge --squash --no-commit t; git-commit ย ( ์ > 17 ๋ฒ์ ๋ฐ์์ ๋ชจ์ ์ปค๋ค๋ ํ๋ฒ์ ๋ฐ์์ผ๋ก )
- 22. Working in parallel ์ฌ๋ฌ๊ฐ์ง ๋ชฉํ๋ฅผ ๋์์ ๊ฐ๋ฐ๊ฐ๋ฅ : ์๋๋ ๋์๋ค๋ฐ์ ์์ git-checkout -b topic1 master ๊ฐ๋ฐ , ๊ฐ๋ฐ ; ๋ฐ์ commit ; ๊ฐ๋ฐ , ๊ฐ๋ฐ ; ๋ฐ์ commit git-checkout -b topic2 master ๊ฐ๋ฐ , ๊ฐ๋ฐ ; ๋ฐ์ commit ; git-checkout topic1 ; ๊ฐ๋ฐ ๊ฐ๋ฐ ;ย ๋ฐ์ commit ์ด์ ์ด ์์
๋ค์ ์ด๋ป๊ฒ ์ต์ข
์ ํ์ ๋ฐ์ํ ๊ฒ์ธ๊ฐ ๋ณํฉ merge : ๋ณํ ํ์คํ ๋ฆฌ parallel historyย ๊ทธ๋ํ๋ ์ฌ๋ฌ ๊ฐ๋๊ฐ ํ๋๋ก ๋ณํฉ๋จ ๊ธฐ๋ฐ - ์ฌ์ค์ rebase : ์์ฐจ์ ํ์คํ ๋ฆฌ serial history ๊ธฐ๋ฐ์ด ๋ถ๊ธฐ ์ต์ head ์์ผ๋ก ์ฐ๊ฒฐ๋์ด ์ ํํ
- 23. The merge <1> git-checkout master git-merge topic1; git-branch -d topic1 ์ด๋ฐ ์ฌ์ํ ๋ณํฉ trivial ย merge ์ "fast forward" merge ๋ผ ํจ ์ด๋ฐ ๊ฒฝ์ฐ๋ ๋ณดํต ์ฌ์ํ ๋ณ๊ฒฝ , ๊ทธ์ ๋ณํฉํ๋ฉด ๋ git-merge topic2 ํ์ฌ master ์ ์๋ ์ถ๊ฐ ๋ณ๊ฒฝ์ฌํญ์ด ๋ค์ด์๋ ๊ฒฝ์ฐ ์ด๋ฐ ๊ฒฝ์ฐ ์ถฉ๋ conflicts ๊ฐ ๋ ์ ์๋ค : ๋ณ๊ฒฝ์ฌํญ์ด ๊ฒน์น ์ ์๋ค . ํ์ผ ์ด๋ฆ์ ๋ถ๊ธฐ๊ฐ์ ์๋ก ๋ค๋ฅด๊ฒ ๋ณ๊ฒฝํ์์๋
- 24. The merge <2> ์ฌ์ฉ์๊ฐ ์ถฉ๋์ ํด๊ฒฐํ๊ณ ์งํ : git-add ์ฌ์ฉ์๊ฐ ๋ณ๊ฒฝํ๊ฒ๋ค ํน์ git-add . git-commit ( ๋ณํฉ ์ถฉ๋์ ์ด๋ป๊ฒ ํด๊ฒฐํ๋์ง ๊ธฐ์ ) ๋ณํฉ ์ค๋จ ( ๋ค๋ฅธ ์ต์
์ด๋ค ): ๋ณํฉ์ undo ํ ์์์์ ๋ปํจ git-reset --hard HEAD
- 25. The rebase <1> ํน์ ๋ถ๊ธฐ์ ๋ฐ์๋ค์ ๋ค๋ฅธ ๋ถ๊ธฐ branch ๋ก ์ฎ๊ธด๋ค . SHA1 ์ ๊นจํธ๋ฆฐ๋ค : ๋์ ๋ฐ์ commit ๋ค์ ์ถ์ ๋ถ๊ฐ ๋ฐ์ commit ์ ์ฎ๊ธฐ๋ฉด ๊ทธ ๋ฐ์์ ๋ค์ ์์ฑ rewrite ํจ์ผ๋ก์ ์๋ก์ด ๋ฐ์์ด ๋๋๊ฒ์ด๋ค . SHA1 ์ด ๋ค๋ฆ . ๊ณต๊ฐ ํน์ ์๊ฒฉ ์ ์ฅ์ repo ์ ๋ฐ์ commits ์ ๋ฐ์ด ( push or published) ๋ฃ์์ ๊ฒฝ์ฐ ๊ธฐ๋ฐ - ์ฌ์ค์ rebase ์ ํ์ง ๋ง๊ฒ ์ด๊ฒ์ ์ฃผ๋ก ๋ก์ปฌ์์ ์ ์ฉํ ๊ธฐ๋ฅ์ด๋ ์๋ฆฌ git-rebase master topic master ๋ฅผ ์ ์ธํ topic ์ ๋ณ๊ฒฝ์ฌํญ์ด master ์ ๊ธฐ๋ฐํ์ฌ ์ฌ์์ฑ๋๋ค .ย ์ถ๊ฐ์ค๋ช
์ Blog ํ๋จ์
- 26. The rebase <2> ๊ธฐ๋ฐ - ์ฌ์ค์ rebase ๋ ๋ณํฉ ์ถฉ๋ merge conflict ํ ๊ฐ๋ฅ์ฑ์ด ์์ . ์ฌ์ค์ ์ ๊ธฐ๋ฐ์ด ๋ฐ๊พธ๊ณ ๊ทธ ์์ ๋ถ๊ธฐ์ ๋ณ๊ฒฝ์ ๋ค์ ์ ์ฉํ๊ธฐ๋๋ฌธ์ ๊ฐ๋ฅ์ฑ์ด์๋ค . git-rebase --continue or --abort or --skip ์์ ๋ช
๋ น์ผ๋ก ์์ ํ๊ณ ์งํํ๋์ง ์ค๋จํ๋์ง ๊ฑด๋ ๋์ ์๋ค . git-rebase -i ( ์ํธ์์ฉ interactive ) ์ ์ฉํ๋ค . ํ
์คํธ ์๋ํฐ๋ฅผ ๋์ ์ฌ๋ฌ๊ฐ์ง ์์
์ ๋์์ค๋ค . ๊ธฐ๋ฐ - ์ฌ์ค์ rebase ์ด ๋์์๋ ๋ณํฉ์ "fast forward" ์ด๋ค git-checkout master; git-merge topic
- 27. Read the history git-log ๋ณ๊ฒฝ๋ค์ ์ถ๋ ฅํด์ค๋ค git-log -p ๋ณ๊ฒฝ๋ค์ ๋ฆฌ๋น์ revisions ย ์ฌ์ด์ diff ๋ฅผ ํฌํจํด ์ถ๋ ฅ git-log --stat diffstat ์ ์์ฑํด ๋ณ๊ฒฝ์ฌํญ์ ์์ฝ ์ถ๋ ฅ git-log file1 file2 file3 ๋์ด๋ ํ์ผ์ด๋ ๊ฒฝ๋ก๋ค์ ๋ณ๊ฒฝ์ ๋ณด์ฌ์ค๋ค . ย
- 28. What's the difference? git-diff index ์ ์์
๊ณต๊ฐ working tree ์ฌ์ด์ ์ฐจ์ด ์ฌ๊ธฐ ๋์ค๋๊ฒ๋ค์ด "git-add" ํด์ผํ ๋์ "git-commit -a" ์ด ๋ชฉ๋ก์ ๋น์ด๋ค . git-diff head ์ต์ HEAD ๊ณผ ์์
๊ณต๊ฐ working tree ์ฌ์ด์ ์ฐจ์ด "git-commit -a" ์ด ๋ชฉ๋ก์ ๋น์ด๋ค . git-diff --cached HEAD ์ index ์ฌ์ด์ ์ฐจ์ด "git-commit -a" ์ด ๋ชฉ๋ก์ ๋น์ด๋ค .ย git-diff BRANCH_A : ๋ถ๊ธฐ A ์ต์ Head ๊ณผ ์์
๊ณต๊ฐ์ ์ฐจ์ด git-diff BRANCH_A BRANCH_B : ๋ถ๊ธฐ A,B ์ต์ ๊ฐ ์ฐจ์ด
- 29. Barking up the tree ๋ง์ ๋ช
๋ น๋ค์ด "tree-ish" ๋ผ ๋ถ๋ฆฌ์ฐ๋๊ฒ์ย ์ธ์๋กย ๋ฐ๋๋ค . SHA1 ์ ์ ๋์ ์ธ ์ค๋ธ์ ํธ๋ฅผ ๊ฐ์ ธ์จ๋ค . SHA1 ์ ์ฒด๊ฐ ์๋ ์ฒซ 8~9 ์๋ง์ธ ์ค์ ํํ์ผ๋ก๋ ์ ๋งคํ์ง ์๊ณ , ๊ณ ์ ํ ๊ฒ์ด๋ผ๋ฉด ๊ฐ๋ฅ ๋ชฉ๋ก A : HEAD, ๋ถ๊ธฐ์ด๋ฆ , ํ๊ทธ์ด๋ฆ , origin ์ด๋ฆ ๋ชฉ๋ก A ๋ค์ ์๋ ํ๊ธฐ๋ฒ์ ์ ์ฉํ ์์๋ค . ^n - " ์์ดํ
์ n ๋ฒ์งธ ๋ถ๋ชจ " ( ๊ธฐ๋ณธ 1) ~n ์ n^1 ์ ํ์ (~3 ์ ^1^1^1 ์ด ๋๋ค .) :path - tree ๋ก๋ถํฐ ์ค๋ธ์ ํธ๋ฅผ ์ ํ ์ > git-diff HEAD^ HEAD ์ต์ ๋ฐ์ commit ๊ณผ ์ด์ ๋ฐ์ commit ์ ์ฐจ์ด ์ >git-dff HEAD~3 HEAD : ๋ง์ง๋ง ์ธ ๋ฐ์์ด ๋ญํ๋ ?
- 30. Seeing the changes side by side gitk mytopic origin History ๋ฅผ Tk widget ์ผ๋ก ํ์ (graphical) ์ฌ์ฉ์๊ฐ ์ํ๋ ์ฐจ์ด์ ์ GUI ๋ฅผ ํตํด ๋ณด์ฌ์ค gitk -all ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ค ๋ณด์ gitk from..to from ์ ์๋ to ์ ์๋ ๋ณ๊ฒฝ์ฌํญ์ ๋ณด์ git-show-branch myTopic...origin Tk ๊ฐ ํ๋๊ฒ๊ณผ ๊ฐ์ qgit ๋ ํ๋ฒ ๋ด๋ณผ๊ฒ์ ๊ถํจ ๋ฐํ๋์ ๋ฌ๋ฆฌ ์ง๊ธ์ ์๋นํ ๋ง์ front-end ๊ฐ ์กด์ฌ
- 31. Playing well with others <1> git-clone ์ถ์ ์ง tracking ํน์ ์๊ฒฉ์ง remote ๋ถ๊ธฐ branch ์์ฑ ๋ณดํต ์ด ๋ถ๊ธฐ๋ "origin/master" ๋ผ๊ณ ์ด๋ฆ์ง์ด์ง๋ค ์ฌ์ฉ์ ์์
์ ๊ณต์ ํ๊ธฐ ์ํด ์ผ๋จ ์๋ณธ์ ์ต์ ์ ์ง : git-fetch ( ์๊ฒฉ์ง๋ก๋ถํฐ ์ฌ์ฉ์์ origin ๋ถ๊ธฐ ๊ฐฑ์ ) ์ฌ์ฉ์์ ๋ณ๊ฒฝ์ ์์์์
๊ณต๊ฐ upstream ์ ๊ธฐ๋ฐ - ์ฌ์ค์ rebase: ๋ชจ๋ ๊ธฐ๋ฐ base ์ด ๋ค๋ฅด๊ฒ ๋ถ๊ธฐํ๋ฉด ๋ณต์กํด์ง๋ค . git-checkout master # ํน์ ๋ถ๊ธฐ๋ช
git-rebase origin/master
- 32. Playing well with others <2> ์์ ์์
๊ณต๊ฐ Upstream ์ ๋ฃ๊ธฐ push: git-push ์์ ์์
๊ณต๊ฐ์ ๋ฃ๊ธฐ pushย ๊ถํ์ด ์์๊ฒฝ์ฐ : git-format-patch origin/master ๊ทธ๋ฆฌ๊ณ ํ์ฌ ๊ฒฝ๋ก์ ์๊ธด ํจ์น๋ฅผ ์ ์๋ฉ์ผ๋ก ๋ณด๋ธ๋ค .
- 33. Keeping things clean git-gc ์ฐธ์กฐํ์ง ์๋ ์ค๋ธ์ ํธ๋ฅผ ์ํ garbage-collectorย ์ ์ฅ์์ ์ค๋ธ์ ํธ๋ค์ด ์ ํจํ์ง ํ์ธ ์ค๋ธ์ ํธ๋ฅผ ๋ชจ์ ํฐ ๊ณต๊ฐ container ์ย ๋ค์ย ๋ด๋๋ค : R epack ์ด์ : ์ ๊ทผ์ฑ๊ณผ ๊ณต๊ฐ์ฌ์ฉ์ ํจ์จ์ฑ git-gc --prune ์ ๊ทผ๋ถ๊ฐํ ์ค๋ธ์ ํธ๋ฅผ ์ญ์ ์ํํ ์์
์ด๋ค . ๋ค๋ฅธ ๊ฒ๊ณผ ์ฐ๊ด์์๋ ์ ๋ ํ์ง๋ง๊ฒ .
- 34. Resetting git-reset --soft ๋ชฉํ ์ธ๋ฑ์ค , ์์
๊ณต๊ฐ์ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์ต์ HEAD ๋ง ๋ชฉํ๋ก git-reset --hard # ์ํ ์์
๊ณต๊ฐ working dir ์ ๋ง์ง๋ง ๋ฐ์ commit ์ผ๋ก ๋๋๋ฆฐ๋ค . git-reset --hard HEAD~3 ๊ฐ์ฅ ์ต๊ทผ ์ธ ๋ฐ์ commit ์ ์ทจ์ํ๊ณ ์์
๊ณต๊ฐ working dir ์ ๊ทธ์ ๋ง์ถฐ ๋ฐ๊ฟ์ค๋ค . ์ด๋ฏธ ๋ถ๊ธฐ๋ฅผ ๋ฐฐํฌํ๋ค๋ฉด , git-revert ๋ฅผ ์ฌ์ฉํ์ . git-checkout HEAD ๋ณต๊ตฌ๋์ ๋ง์ง๋ง ๋ฐ์ commit ์ ์๋ ๋ณต๊ตฌ๋์์ ๊ฐ์ ธ์จ๋ค .
- 35. Pay no attention to the man behind the curtain ๋ชจ๋ ๊ฒฝ๋ก๊ฐ .gitignore ๋ฅผ ์ง๋์ ์๋ค . ํ์ ์์ ๋ฌธ์๊ฐ "!" ์ด๋ฉด , ๋ถ์ ์ฐ์ฐ์ ์ญํ์ ํ๋ค . ํ์ด "/" ๋ฅผ ์ ์ธํ๊ณ ์๋ค๋ฉด basename ์ผ๋ก ํ์ธํจ basename ์ unix program ์ด๋ค . [ ๋งํฌ ] ์ด์ธ์ fnmatch(3) ๋ฅผ ํตํด shell ์ด ํจํด๋งค์นญ์ ํจ "/" ๋ก ์์ํ๋ฉด ํ์ฌ ๊ฒฝ๋ก๋ฅผ ๋ปํจ ์ ์ฅ์ repo ์ ์ ์ฅ๋๊ณ ์ถ์ ๋จ ย .git/info/exclude ๋ฅผ ํตํด .gitignore ์ ๋น์ทํ ๋์์ ํ ์์๋๋ฐ ์ด๋ ์ฌ์ฉ์ ์ ์ฅ์ repo ์๋ง ํด๋นํ๋ค . ๋๊ฐ๋ค ๊ฐ์ด ๋์ํ์ง๋ง , ํ์๋ ๋ณต์ clone ๋์ง ์๋๋ค .
- 36. Configuration ๋ง์ ๋ช
๋ น์ ํ๊ฒฝ์ค์ configurations ๋ฅผ ๊ฐ์ง์์๋ค . git-config name value name ์ ๊ฐ value ์ ๋์
name ์ "." ์ ๋ถ์ฌ ์ข
์๋ ์์ฑ ์ ์ง๋์ ์๋ค . ์ > git config core. filemode ย true ์ํ๋ค๋ฉด ์๋์ผ๋ก ํธ์ง๊ฐ๋ฅ git-config name ํ์ฌ ๊ฐ value ์ ๋ณด์ git-config -l ์ค์ ๊ฐ๋ค์ ๋์ด ์ต์ํ user.email ๊ณผ user.name ์ ๋ฐ์ commit ์ ์ํด ์ค์
- 37. other useful porcelain git-archive : tar/zip ํํ๋ก tree ๋ฅผ ๋ด๋ณด๋ git-bisect : ๋ฌธ์ ์๋ ๋ฐ์๊ณผ ์๋๊ฒ์ฌ์ด์ ์ ์ ๋ฐ์์ฐพ๊ธฐ git-cherry-pick : ์ ํ์ ๋ณํฉ selective merging git-mv : file/dir ์ ์ฌ๋ฐ๋ฅธ ์ธ๋ฑ์ค ์กฐ์์ผ๋ก ์ด๋ฆ ๋ฐ๊ฟ git-push : ์์ ์์
๊ณต๊ฐ upstream ์ ๋ฃ๊ธฐ git-revert : ์ด์ ๋ฐ์ commit ์ ๋ฌดํจํํ๋ ๋ฐ์ commit git-blame : ๋๊ฐ ์์ฑํ๊ฒ์ธ์งย
- 38. For further info "Git (softwware)" ๋ฅผ Wikipedia ์์ ์ฐพ์๋ณผ๊ฒ [ ๋งํฌ ] git homepage http://git.or.czย Git wiki https://git.wiki.kernel.org/index.php/Main_Page mailing list ํ์ฉ ๋์๋ ๋งํ ์ฌ๋๋ค์ด ์๋ค . ์ฌ์ฉ์๊ฐ ๋ฒ๊ทธ ๋ฆฌํฌํธ , ํจ์น , ์์ด๋์ด ์ ๊ณต ๊ฐ๋ฅ git ์ฌ์ฉ์๋ค๊ณผ ๋ง๋๋ณด์ Freenode IRC ์ #git ์ฑ๋์ด ์์