Git ๋‰ด๋น„๋ฅผ ์œ„ํ•œ ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ• - ์‹œ์ž‘ํ•˜๊ธฐ

    Git ๋‰ด๋น„๋ฅผ ์œ„ํ•œ ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ• - ์‹œ์ž‘ํ•˜๊ธฐ


    ์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋„ˆ๋„ ์“ฐ๊ณ  ๋‚˜๋„ ์“ฐ๊ณ  ์šฐ๋ฆฌ ๋ชจ๋‘ ์“ฐ๊ณ  ์žˆ๋Š” Git์˜ ๊ธฐ์ดˆ์— ๋Œ€ํ•ด์„œ ํฌ์ŠคํŒ… ํ•˜๋ ค๊ณ ํ•œ๋‹ค. ํ•„์ž๋Š” Git์„ ๋Œ€ํ•™๊ต ๋•Œ ์ฒ˜์Œ ์ ‘ํ–ˆ๋Š”๋ฐ ์ฒ˜์Œ์—๋Š” โ€œ์™  ์ด์ƒํ•œ ํด๋ผ์šฐ๋“œ์— ์†Œ์Šค์ฝ”๋“œ๋ฅผ ์˜ฌ๋ ค๋†“๋Š”๋‹คโ€ ์ •๋„๋กœ๋งŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์šฉํ–ˆ๋˜ ๊ธฐ์–ต์ด ๋‚œ๋‹ค. ํ•˜์ง€๋งŒ Git์˜ ๊ธฐ๋Šฅ์€ ๋‹จ์ˆœํžˆ ์ฝ”๋“œ ๊ณต์œ ์—์„œ ๋๋‚˜์ง€ ์•Š๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ์ด๋ฏ€๋กœ Git์„ ์ž˜ ์“ฐ๋ฉด ์‹ค๋ฌด์—์„œ ํŽผ์ณ์ง€๋Š” ๋‹ค์ด๋‚˜๋ฏนํ•œ ์ƒํ™ฉ์— ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ• ์ˆ˜๋„ ์žˆ๋‹ค.

    ํ•˜์ง€๋งŒ Git์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ์ด ํฌ์ŠคํŒ…์—์„œ ์ „๋ถ€ ๋‹ค๋ฃจ๊ธฐ์—๋Š” ์ง€๋ฉด์ด ๋ถ€์กฑํ•˜๋‹ˆ, ์ด๋ฒˆ์—๋Š” Git์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ๋ช…๋ น์–ด์ธ add, commit, push, pull, fetch์— ๋Œ€ํ•œ ์„ค๋ช…๋งŒ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

    Git์€ ๋ˆ„๊ฐ€, ์™œ ๋งŒ๋“ค์—ˆ๋‚˜์š”?

    Git์€ 2005๋…„ ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์ฆˆ๊ฐ€ ์ž๊ธฐ๊ฐ€ ์“ฐ๋ ค๊ณ  ๋งŒ๋“  ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค. ์ผ๋‹จ ์ด ๋ฆฌ๋ˆ„์Šค ํ† ๋ฅด๋ฐœ์ฆˆ๋ผ๋Š” ํ•€๋ž€๋“œ ํ˜•๋ถ€ํ„ฐ๊ฐ€ ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„ ์•Œ๊ณ  ์žˆ์„ ์ •๋„๋กœ ์œ ๋ช…ํ•˜๋‹ค.

    ์•„์‹ค ๋งŒํ•œ ๋ถ„๋“ค์€ ๋‹ค ์•„์‹œ๊ฒ ์ง€๋งŒ ์ด ํ˜•์€ ์˜คํ”ˆ์†Œ์Šค ์ปค๋„์ธ ๋ฆฌ๋ˆ…์Šค(Linux)๋ฅผ ๋งŒ๋“  ์‚ฌ๋žŒ์ด๋‹ค. ๋ฆฌ๋ˆ…์Šค ์ปค๋„๋กœ ๋งŒ๋“  ์œ ๋ช…ํ•œ ์šด์˜์ฒด์ œ๋Š” ๋ฐ๋น„์•ˆ ๊ณ„์—ด์˜ ์šฐ๋ถ„ํˆฌ(Ubuntu), ๋ ˆ๋“œํ–‡ ๊ณ„์—ด์˜ ์„ผํŠธOS(CentOS) ๋“ฑ์ด ์žˆ๋‹ค. ์ด ์šด์˜์ฒด์ œ๋“ค์€ ์„œ๋ฒ„์—์„œ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ , ํ„ฐ๋ฏธ๋„์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๋„ ํŠผ์‹คํ•ด์„œ ๊ฐœ๋ฐœ ์นœํ™”์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐœ๋ฐœ์ž๋ผ๋ฉด ๋Œ€๋ถ€๋ถ„ ์•Œ๊ณ  ์žˆ๋Š” ์šด์˜์ฒด์ œ์ด๋‹ค. ์ฐธ๊ณ ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ OS๋„ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“  ์šด์˜์ฒด์ œ๋‹ค.

    ๋ญ ์–ด์จŒ๋“  ์ด ํ˜•์€ ์ด ์ชฝ ์—…๊ณ„์—์„œ๋Š” ์ƒ๋‹นํžˆ ์œ ๋ช…ํ•œ๋ฐ, ๋ญ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ž˜ํ•˜๊ฑฐ๋‚˜ ๋ฆฌ๋ˆ…์Šค ์ปค๋„ ๋งŒ๋“  ๊ฑธ๋กœ๋„ ์œ ๋ช…ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ๊ฑธ๋กœ ๋” ์œ ๋ช…ํ•˜๋‹ค.

    linus 세계 그래픽 카드 점유율 1위 기업한테 엿을 먹이는 패기

    ์ด๊ฒŒ ๋Œ€๋žต 2012๋…„ ์ฏค์ธ๋ฐ, ์–ด๋–ค ํฌ๋Ÿผ ์—ฐ์„ค์—์„œ ์‹ค์ œ๋กœ ์ด๋ ‡๊ฒŒ ์—”๋น„๋””์•„ ์—ฟ๋จน์œผ๋ผ๊ณ  ํ–ˆ๋‹ค. ๋‹น์‹œ์— ์—”๋น„๋””์•„ ์˜ตํ‹ฐ๋จธ์Šค ์นฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์ปดํ“จํ„ฐ์—์„œ ๋ฆฌ๋ˆ…์Šค๋กœ ๋งŒ๋“  OS๊ฐ€ ์ œ๋Œ€๋กœ ์•ˆ๊ตด๋Ÿฌ๊ฐ€๋Š” ์ด์Šˆ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ, ์—”๋น„๋””์•„๊ฐ€ ์ง€์ ์žฌ์‚ฐ๊ถŒ์„ ์ด์œ ๋กœ ์˜คํ”ˆ์†Œ์Šค ๋“œ๋ผ์ด๋ฒ„๋ฅผ ๊ณต๊ฐœ๋ฅผ ์•ˆํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ๋ˆ…์Šค์˜ ์„ค์น˜๊ฐ€ ํž˜๋“ค์—ˆ๋˜ ๊ฒƒ์ด๋‹ค. ๋‹น์‹œ์˜ ๋Œ€ํ™”๋Š” ๋Œ€๋žต ์ด๋žฌ๋‹ค.

    [์ฒญ์ค‘]
    ์•„ ๋‹˜โ€ฆ ์—”๋น„๋””์•„ ์˜ตํ‹ฐ๋จธ์Šค ์นฉ ์“ฐ๋Š” ๋…ธํŠธ๋ถ์— ๋ฆฌ๋ˆ…์Šค ๊นŒ๋Š”๊ฒŒ ๋„ˆ๋ฌด ํž˜๋“ค์–ด์š”ใ…œใ…œ ์ข‹์€ ๋ฐฉ๋ฒ• ์—†์„๊นŒ์š”?

    [๋ฆฌ๋ˆ„์Šค]
    โ€ฆ
    ๋‚œ ์šฐ๋ฆฌ๊ฐ€ ํ•˜๋“œ์›จ์–ด ์ œ์กฐ์—…์ฒด๋“ค๊ณผ ๊ฒช์—ˆ๋˜ ์ตœ์•…์˜ ๋ฌธ์ œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์—”๋น„๋””์•„๋ผ๋Š” ๊ฒƒ์„ ์ด๋ ‡๊ฒŒ ๊ณต๊ฐœ์ ์œผ๋กœ ์ง€์ ํ•  ์ˆ˜ ์žˆ์–ด์„œ ๊ธฐ์˜๋„ค์š”! ์ด๊ฑด ์กฐ๊ธˆ ์Šฌํ”ˆ ์ผ์ธ๋ฐ, ์—”๋น„๋””์•„๋Š” ์•ˆ๋“œ๋กœ์ด๋“œ ์‹œ์žฅ์— ๋งŽ์€ ์นฉ์„ ํŒ”๊ณ  ์žˆ์ง€๋งŒ ์ด ํšŒ์‚ฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ๊ฒฝํ—˜ํ•œ ํšŒ์‚ฌ ์ค‘ ์ง„์งœ ์ตœ์•…์ž…๋‹ˆ๋‹ค.

    ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์—”๋น„๋””์•„โ€ฆ ์—ฟ์ด๋‚˜ ๋จน์–ด๋ผ

    ๋ฆฌ๋ˆ„์Šค๋Š” ์ด๋Ÿฐ ํ˜•์ด๋‹ค. ์ฐธ๊ณ ๋กœ ๋ฆฌ๋ˆ…์Šค ์ปค๋„์ด ์˜คํ”ˆ์†Œ์Šค๋ผ๊ณ  ํ•จ๋ถ€๋กœ ์ปค๋ฐ‹ํ–ˆ๋‹ค๊ฐ€๋Š” ์ด ํ˜•ํ•œํ…Œ ์š•๋จน๊ณ  ํ˜„ํƒ€๊ฐ€ ์˜ฌ ์ˆ˜๋„ ์žˆ์œผ๋‹ˆ ๋งˆ์Œ ๋‹จ๋‹จํžˆ ๋จน์ž. ์ด ํ˜•์ด ๋ฐ”๋กœ ์ด ์—…๊ณ„์˜ ๊ณ ๋“  ๋žจ์ง€๋‹ค.

    ๊ทผ๋ฐ ์™œ ์ด ํ˜•์ด Git์„ ๋งŒ๋“ค๊ฒŒ ๋˜์—ˆ๋ƒ?

    ๋ฆฌ๋ˆ„์Šค๋Š” ๋ฆฌ๋ˆ…์Šค ์ปค๋„์„ ๋งŒ๋“ค ๋‹น์‹œ์— BitKeeper๋ผ๋Š” ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ, ์ด Bitkeeper๋ผ๋Š” ์„œ๋น„์Šค๋Š” ์›๋ž˜ ์œ ๋ฃŒ์˜€์ง€๋งŒ ๋ฆฌ๋ˆ…์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์—๋Š” ๋ฌด๋ฃŒ๋กœ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค. ๊ทผ๋ฐ ์ด ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ฐœ๋ฐœ์ž ํ•œ๋ช…์ด BitKeeper์˜ ํ†ต์‹  ํ”„๋กœํ† ์ฝœ์„ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋งํ•ด์„œ ํ•ดํ‚นํ•˜๋Š” ์‚ฌ๊ฑด์ด ๋ฐœ์ƒํ–ˆ๊ณ , Bitkeeper๋Š” ๋ฌด๋ฃŒ๋กœ ๋ฆฌ๋ˆ…์Šค ์ปค๋ฎค๋‹ˆํ‹ฐ์— ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋˜ ๊ฒƒ์„ ์ฒ ํšŒํ•œ ๊ฒƒ์ด๋‹ค.

    ๊ทผ๋ฐ ์ด๊ฑธ ์“ฐ์ง€ ๋ง๋ผ๊ณ  ๋ง‰์€ ๊ฒŒ ์•„๋‹ˆ๋ผ ๊ทธ๋ƒฅ ๋ฌด๋ฃŒ์—์„œ ์œ ๋ฃŒ๋กœ ๋Œ๋ฆฐ ๊ฑฐ๋‹ค. ๊ทผ๋ฐ ์ด ํ˜•์ด ๋ˆ๋‚ด๊ธฐ๋Š” ์‹ซ์—ˆ๋Š”์ง€ ๊ทธ๋ƒฅ ์ž๊ธฐ๊ฐ€ ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ 2์ฃผ ๋งŒ์— ๋š๋”ฑ! ๋งŒ๋“ค์—ˆ๋Š”๋ฐ ๊ทธ๊ฒŒ ๋ฐ”๋กœ Git์ด๋‹ค. (2๋‹ฌ ์•„๋‹ˆ๊ณ  2์ฃผ ๋งž๋‹คโ€ฆ)

    ๋ฆฌ๋ˆ„์Šค๊ฐ€ Git์„ ์ฒ˜์Œ ์ปค๋ฐ‹ํ–ˆ๋˜ ๋‚ด์šฉ์€ Github์˜ Git ๋ฏธ๋Ÿฌ ์ €์žฅ์†Œ์—์„œ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ ์—ฌ๊ธฐ์„œ๋„ ๋ฆฌ๋ˆ„์Šค ํ˜•์˜ ์„ฑ๊ฒฉ์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค.

    GIT - the stupid content tracker

    โ€œgitโ€ can mean anything, depending on your mood.

    - random three-letter combination that is pronounceable, and not
    actually used by any common UNIX command. The fact that it is a mispronounciation of โ€œgetโ€ may or may not be relevant.
    - stupid. contemptible and despicable. simple. Take your pick from the
    dictionary of slang.
    - โ€œglobal information trackerโ€: youโ€™re in a good mood, and it actually
    works for you. Angels sing, and a light suddenly fills the room.
    - โ€œgoddamn idiotic truckload of sh*tโ€: when it breaks

    Linus Torvalds git/git/README.md

    ์Œ, ์ด๊ฒŒ ๋ฆฌ๋ˆ„์Šค๊ฐ€ ํ•œ ์ฒซ๋ฒˆ์งธ ์ปค๋ฐ‹์˜ README.md ํŒŒ์ผ์˜ ์ผ๋ถ€๋ฅผ ๊ฐ€์ ธ์˜จ ๊ฒƒ์ธ๋ฐ, Git์€ ๊ทธ๋ƒฅ ์•„๋ฌด ์˜๋ฏธ ์—†๋Š” ์„ธ๊ธ€์ž ์•ŒํŒŒ๋ฒณ์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ƒฅ ์œ ๋‹‰์Šค ๋ช…๋ น์–ด ์ค‘์— git์ด๋ผ๋Š” ๋ช…๋ น์–ด๊ฐ€ ์—†์–ด์„œ ์ •ํ–ˆ๋‹ค๊ณ  ํ•œ๋‹ค. ๊ธฐ๋ถ„์ด ์ข‹์œผ๋ฉด โ€œglobal information trackerโ€๋ผ๊ณ  ํ•˜๊ณ  ๊ธฐ๋ถ„์ด ๊ตฌ๋ฆฌ๋ฉด โ€œgoddamn idiotic truckload of sh*tโ€์ด๋ผ๊ณ  ํ•˜๋žœ๋‹ค. (์ง„์งœ ์ด ์„ธ์ƒ ์ฟจํ•จ์ด ์•„๋‹ˆ๋‹ค.)

    ์ •๋ฆฌํ•˜์ž๋ฉด Git์€ ํ•€๋ž€๋“œ์˜ ์–ด๋–ค ์ฒœ์žฌ ํ˜•์ด ์“ฐ๋˜ ๋ฒ„์ „ ๊ด€๋ฆฌ ๋„๊ตฌ๊ฐ€ ๊ฐ‘์ž๊ธฐ ์œ ๋ฃŒ๊ฐ€ ๋˜์„œ 2์ฃผ๋งŒ์— ๋งŒ๋“ค์–ด๋‚ธ ์‹œ์Šคํ…œ์ด๊ณ , ์ง€๊ธˆ์€ ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๋‹ค.

    ๊ธฐ์ดˆ์ ์ธ ๊ฐœ๋… ์•Œ์•„๋ณด๊ธฐ

    Git์€ ๋ถ„์‚ฐ ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์žˆ๋Š” ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ ค๋ฉด ๋กœ์ปฌ ํ™˜๊ฒฝ์œผ๋กœ ์†Œ์Šค๋ฅผ ํด๋ก (Clone)ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ๋ชจ๋“  ์†Œ์Šค๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ์‚ฌ์šฉ์ž์˜ ์ปดํ“จํ„ฐ๋กœ ๋ฐ›์•„์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

    ์ดํ›„ Git์€ ๋กœ์ปฌ ํ™˜๊ฒฝ์˜ ํŒŒ์ผ์„ ์ถ”์ ํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€ ์‚ฌ์šฉ์ž๊ฐ€ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ฉด ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•œ๋‹ค. ๊ทธ ํ›„ ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์ด ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฐ˜์˜ํ•˜๊ณ  ์‹ถ์€ ํŒŒ์ผ์ด๋‚˜ ์†Œ์Šค ์ฝ”๋“œ์˜ ๋ผ์ธ์„ ๊ณ ๋ฅธ ๋’ค ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์—…๋กœ๋“œํ•œ๋‹ค.

    source tree 맨 위의 `origin/master`는 리모트 서버의 버전, 맨 밑의 `master`는 필자 컴퓨터의 버전을 의미한다.

    ์ž ์ผ๋‹จ Git์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…์€ ์ด๊ฒŒ ๋์ด๋‹ค. ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋‚ด ์ปดํ“จํ„ฐ๋กœ ๋ณต๋ถ™ํ•œ ๋‹ค์Œ ์ˆ˜์ •ํ•ด์„œ ๋‹ค์‹œ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋กœ ์—…๋ฐ์ดํŠธํ•œ๋‹ค๋Š” ๊ฒƒ. ์ด๋•Œ ์‚ฌ์šฉ์ž๊ฐ€ ์ž์‹ ์ด ๋ณ€๊ฒฝํ•œ ๋กœ์ปฌ์˜ ์†Œ์Šค๋ฅผ ์„œ๋ฒ„์˜ ์†Œ์Šค์— ์—…๋กœ๋“œํ•˜๋Š”, ์ฆ‰ ์„œ๋ฒ„๋กœ ๋ฐ€์–ด์˜ฌ๋ฆฌ๋Š” ํ–‰์œ„๋ฅผ Push๋ผ๊ณ  ๋ถ€๋ฅด๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์„œ๋ฒ„์˜ ์†Œ์Šค๋ฅผ ์ž์‹ ์˜ ํด๋ผ์ด์–ธํŠธ๋กœ ๊ฐ€์ ธ์˜ค๋Š” ํ–‰์œ„๋ฅผ Pull ๋˜๋Š” Fetch๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์‰ฝ์ง€ ์•Š์€๊ฐ€?

    ํ•˜์ง€๋งŒ ์ฒ˜์Œ Git์„ ์ ‘ํ•˜๋ฉด ํ‰์†Œ์— ์ ‘ํ•ด๋ณด์ง€ ๋ชปํ–ˆ๋˜ remote, origin, repository์™€ ๊ฐ™์€ ์šฉ์–ด๋“ค์ด ํŠ€์–ด ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹นํ™ฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿผ ์ด ์šฉ์–ด๋“ค์ด ๋ฌด์—‡์„ ๋œปํ•˜๋Š”์ง€๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž.

    Remote / Origin

    ์šฐ์„  Remote๋Š” ๋ง ๊ทธ๋Œ€๋กœ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„ ์ž์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ด ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋ผ๋Š” ๊ฐœ๋…์ด ์ž˜ ์ดํ•ด๊ฐ€ ์•ˆ๋˜์‹œ๋Š” ๋ถ„์€ ์šฐ๋ฆฌ๊ฐ€ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ๋‚˜ N๋“œ๋ผ์ด๋ธŒ์™€ ๊ฐ™์€ ํด๋ผ์šฐ๋“œ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋– ์˜ฌ๋ฆฌ์‹œ๋ฉด ๋œ๋‹ค. ์ „ ์„ธ๊ณ„ ์–ด๋”˜๊ฐ€์— ์žˆ๋Š” ์„œ๋ฒ„์— ์šฐ๋ฆฌ์˜ ์†Œ์Šค๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด๋•Œ ์ด ์„œ๋ฒ„๋ฅผ ์ œ๊ณตํ•ด์ฃผ๋Š” ๋Œ€ํ‘œ์ ์ธ ์—…์ฒด๊ฐ€ Github, Bitbucket, GitLab๊ณผ ๊ฐ™์€ ํšŒ์‚ฌ๋“ค์ด๋‹ค. ์ด ํšŒ์‚ฌ๋“ค์ด Git์„ ๋งŒ๋“  ๊ฒŒ ์•„๋‹ˆ๋ผ Git์ด๋ผ๋Š” ์‹œ์Šคํ…œ์— ํ•„์š”ํ•œ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์™€ Git์„ ์ข€ ๋” ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    Git์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋‚ด๊ฐ€ ์–ด๋–ค ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์—…๋กœ๋“œ ํ•  ๊ฒƒ์ธ์ง€ ์ •ํ•ด์•ผํ•˜๋Š”๋ฐ, ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์ด๋ฆ„์„ ์ •ํ•ด์ค˜์•ผํ•œ๋‹ค. ์ด๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ด€๋ก€์ ์ธ ์ด๋ฆ„์ด ๋ฐ”๋กœ Origin์ด๋‹ค.

    ๋ณดํ†ต์€ ํ•œ ๊ฐœ์˜ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋งŒ ์šด์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋‹ค์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ์‚ฌ๋žŒ๋“ค์ด Remote์™€ Origin์„ ํ˜ผ์šฉํ•ด์„œ ๋ถ€๋ฅด๊ณค ํ•œ๋‹ค.

    Repository

    ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ(Repository, Repo)๋Š” ์ €์žฅ์†Œ๋ผ๋Š” ๋œป์œผ๋กœ, ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„ ๋‚ด์—์„œ ๊ตฌ๋ถ„๋˜๋Š” ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๊ตฌ๊ธ€ ๋“œ๋ผ์ด๋ธŒ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋„ ํ•˜๋‚˜์˜ ๋””๋ ‰ํ† ๋ฆฌ์— ๋ชจ๋“  ํŒŒ์ผ์„ ๋‹ค ๋•Œ๋ ค๋„ฃ์ง€์•Š๊ณ  ๋ช‡ ๊ฐœ์˜ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ์šฉ๋„์— ๋”ฐ๋ผ ํŒŒ์ผ์„ ๋‚˜๋ˆ ์„œ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•˜๋‹ค.

    ์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ๊ฐœ์˜ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ์˜๋ฏธํ•˜์ง€๋งŒ ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

    https://github.com/user/repository.git
    https://user@bitbucket.org/group-name/repository.git

    ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ๋ฐ›์„ ๋•Œ๋Š” ํ•ด๋‹น ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” URL์ด ํ•„์š”ํ•œ๋ฐ, ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ ์ด๋ฆ„์€ URL์˜ ๋งจ ๋งˆ์ง€๋ง‰์— .git ํ™•์žฅ์ž๋ฅผ ๊ฐ€์ง€๋Š” ๋ฐฉ์‹์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.

    Branch

    ๋ธŒ๋žœ์น˜๋Š” ์ผ์ข…์˜ ๋…๋ฆฝ๋œ ์ž‘์—…์„ ์ง„ํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ž‘์—… ๊ณต๊ฐ„์˜ ๊ฐœ๋…์ด๋‹ค. ๋งจ ์ฒ˜์Œ Git์„ ์ดˆ๊ธฐํ™”ํ–ˆ์„ ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ master๋ผ๋Š” ์ด๋ฆ„์˜ ๋ธŒ๋žœ์น˜๊ฐ€ ํ•˜๋‚˜ ์ƒ์„ฑ๋œ๋‹ค. ๊ทธ ํ›„ ๊ฐœ๋ฐœํ•˜๋Š” ๊ธฐ๋Šฅ ๋˜๋Š” ๋ฒ„๊ทธ ํ”ฝ์Šค์— ๋”ฐ๋ผ์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒˆ๋กœ ์ƒ์„ฑํ•˜๊ณ  ๊ฑฐ๊ธฐ์„œ ์ž‘์—…ํ•œ ํ›„์— ๋‚˜์ค‘์— ๋‹ค์‹œ master๋กœ ํ•ฉ์น˜๋Š” ๊ฒƒ์ด๋‹ค.

    branches master 브랜치에서 다른 브랜치를 분리한 모습

    ์ด ๋ธŒ๋žœ์น˜ ๊ฐœ๋…์€ Git์— ์ต์ˆ™ํ•˜์ง€ ์•Š์€ ๋ถ„๋“ค์—๊ฒŒ ์ž ๊น ์„ค๋ช…ํ•˜๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ์—๋Š” ์ง๊ด€์ ์œผ๋กœ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”ํ›„ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ๋‹ค์‹œ ์„ค๋ช…ํ•˜๊ฒ ๋‹ค. ์ผ๋‹จ ์ง€๊ธˆ์€ ์ด 3๊ฐ€์ง€ ์ •๋„๋งŒ ๊ธฐ์–ตํ•ด๋‘์ž.

    1. Git์„ ์ดˆ๊ธฐํ™”ํ•˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ master ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ๊ธด๋‹ค. ์ด ์นœ๊ตฌ๊ฐ€ ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ์—ญํ• ์„ ํ•œ๋‹ค.
    2. ๋ธŒ๋žœ์น˜๋Š” ์–ด๋–ค ๋ธŒ๋žœ์น˜์—์„œ ๋ถ„๋ฆฌ์‹œํ‚ค๋Š” ๊ฒƒ์ด๊ณ , ๋ถ„๋ฆฌ๋œ ๋ธŒ๋žœ์น˜๋Š” ๋ถ„๋ฆฌ๋  ๋‹น์‹œ์˜ ๋ถ€๋ชจ ๋ธŒ๋žœ์น˜ ์ƒํƒœ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    3. ๊ฐœ๋ฐœ์ž๋Š” ๊ฐ๊ฐ์˜ ๋ธŒ๋žœ์น˜์—์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•œ ๋’ค ๋‚˜์ค‘์— ๋‹ค์‹œ master ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•ฉ์นœ๋‹ค.

    ํ•„์ˆ˜ ๋ช…๋ น์–ด๋“ค์„ ์•Œ์•„๋ณด์ž

    ๋งŒ์•ฝ ์—ฌ๋Ÿฌ๋ถ„์ด ํ˜ผ์ž์„œ๋งŒ ํ”„๋กœ์ ํŠธ์˜ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ํ•œ๋‹ค๋ฉด ๋‹จ์ˆœํžˆ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ ์†Œ์Šค๋ฅผ ๋ฐ›์•„์™€์„œ ๋ณ€๊ฒฝํ•œ ํ›„ ๋‹ค์‹œ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œํ•˜๋Š” ๊ณผ์ •๋งŒ์œผ๋กœ๋„ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋Š”๋ฐ๋Š” ์‚ฌ์‹ค ์•„๋ฌด ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.

    ํ•˜์ง€๋งŒ Git์€ ์• ์ดˆ์— ํ˜ผ์ž์„œ ๊ฐœ๋ฐœํ•˜๋Š” ์ƒํ™ฉ๋ณด๋‹ค๋Š” ์—ฌ๋Ÿฟ์ด์„œ ํ•จ๊ป˜ ์†Œ์Šค๋ฅผ ์ˆ˜์ •ํ•˜๋ฉฐ ๊ฐœ๋ฐœํ•˜๋Š” ํ˜‘์—… ์ƒํ™ฉ์„ ์ƒ์ •ํ•˜๊ณ  ๋งŒ๋“ค์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜‘์—…์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ณค๋ž€ํ•œ ์ƒํ™ฉ๋“ค์„ ํƒ€ํŒŒํ•˜๊ธฐ ์œ„ํ•œ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

    Git์€ ๊ธฐ๋ณธ์ ์œผ๋กœ CLI(Command Line Tools)์„ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ณ  commit, fetch, branch์™€ ๊ฐ™์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด ๊ธฐ๋Šฅ๋“ค์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

    ๊ทธ๋Ÿผ ์ด๋ฒˆ์—๋Š” Git์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์•Œ์•„์•ผ ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ช…๋ น์–ด๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์ž.

    ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์™€ ์—ฐ๋™ํ•˜๊ธฐ

    clone

    clone์€ ๋ง ๊ทธ๋Œ€๋กœ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ ํด๋ผ์ด์–ธํŠธ๋กœ ํŒŒ์ผ์„ ๋ณต๋ถ™ํ•˜๋Š” ํ–‰์œ„๋ฅผ ๋งํ•œ๋‹ค. ์ด๋•Œ ํด๋ก ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ค ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ ํŒŒ์ผ์„ ๊ฐ€์ ธ์˜ฌ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ์ด ์ •๋ณด๋Š” ์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด URL๋กœ ํ‘œํ˜„ํ•œ๋‹ค. HTTPS ํ”„๋กœํ† ์ฝœ์ด๋‚˜ SSH ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค๋ฅผ ํด๋ก ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณดํ†ต HTTPS๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค.

    clone

    ๋ณดํ†ต Github๊ณผ ๊ฐ™์€ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„ ์ œ๊ณต์—…์ฒด๋“ค์€ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํด๋ก ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ˆˆ์— ์ž˜ ๋„๋Š” ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์–ด ๋†“๊ณ  ํ•ด๋‹น ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ URL์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๋‹จ์ง€ ์ € URL์„ ๋ณต์‚ฌํ•œ ๋‹ค์Œ Git์˜ clone ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค.

    $ cd ~/dev/evan # ์›ํ•˜๋Š” ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™
    $ git clone https://github.com/evan-moon/test-repo.git

    ์›ํ•˜๋Š” ์ž‘์—… ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•œ ๋’ค clone ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ๋ฅผ ํด๋ก ํ•˜๊ฒŒ๋˜๋ฉด ํ˜„์žฌ ์œ„์น˜์— ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ ์ด๋ฆ„๊ณผ ๋™์ผํ•œ ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ๊ทธ ๋‚ด๋ถ€์— ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์†Œ์Šค๊ฐ€ ์ „๋ถ€ ๋ณต์‚ฌ๋œ๋‹ค. ์œ„ ์˜ˆ์ œ์˜ ๊ฒฝ์šฐ ~/dev/evan ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด๋ถ€์— test-repo ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ  ํ•ด๋‹น ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์˜ ์†Œ์Šค๊ฐ€ ๋ณต์‚ฌ๋  ๊ฒƒ์ด๋‹ค.

    ์ด์ œ ์ด ๋ณต์‚ฌ๋œ ์†Œ์Šค๋ฅผ ๋ง˜๋Œ€๋กœ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ํŒŒ๊ดดํ•ด๋„ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์—…๋กœ๋“œ๋งŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด, ๊ฐ™์€ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋ฅผ ๋ณด๊ณ  ์žˆ๋Š” ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์˜ํ–ฅ์„ ๋ฐ›์„ ์ผ์€ ์ ˆ๋Œ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์•ˆ์‹ฌํ•˜๊ณ  ๋ง˜๋Œ€๋กœ ๋งŒ์ง€์ž‘๊ฑฐ๋ ค๋„ ๋œ๋‹ค.

    pull

    pull ๋ช…๋ น์–ด๋Š” ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์ตœ์‹  ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋กœ์ปฌ ์†Œ์Šค์— ๋ณ‘ํ•ฉ(Merge)ํ•ด์ฃผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ฒ˜์Œ ์†Œ์Šค๋ฅผ ํด๋ก ํ•œ ํ›„์— ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋ฅผ ์ƒํƒœ๋ฅผ ๊ฐฑ์‹ ํ–ˆ๋”๋ผ๋„ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ๊ทธ ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ์•Œ๋ ค์ฃผ์ง€๋Š” ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ์„œ๋ฒ„์— ๋ฌธ์˜๋ฅผ ๋‚ ๋ ค์•ผ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ๋˜ํ•œ pull์€ ๋‹จ์ˆœํžˆ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์—์„œ ๋กœ์ปฌ๋กœ ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค์˜ ๊ฐœ๋…๋ณด๋‹ค๋Š” ๊ฐ€์ ธ์™€์„œ ํ•ฉ์นœ๋‹ค์˜ ๊ฐœ๋…์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ธŒ๋žœ์น˜๋ผ๋ฆฌ๋„ pull์„ ํ†ตํ•ด ์†Œ์Šค๋ฅผ ํ•ฉ์น  ์ˆ˜ ์žˆ๋‹ค.

    $ git pull # ํ˜„์žฌ ๋‚ด ๋กœ์ปฌ ๋ธŒ๋žœ์น˜์™€ ๊ฐ™์€ ์ด๋ฆ„์„ ๊ฐ€์ง„ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„ ๋ธŒ๋žœ์น˜๊ฐ€ ํƒ€๊ฒŸ
    $ git pull origin master # origin ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ master ๋ธŒ๋žœ์น˜๊ฐ€ ํƒ€๊ฒŸ

    ์˜คํ”ˆ์†Œ์Šค์— ๊ด€์‹ฌ์ด ๋งŽ์€ ๋ถ„์ด๋ผ๋ฉด Pull Request๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋“ค์–ด๋ณด์•˜์„ ๊ฒƒ์ด๋‹ค. ์ด Pull Request๋Š” โ€œ๋‚ด๊ฐ€ ์ž‘์—…ํ•œ ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€์ ธ๊ฐ€์„œ ํ•ฉ์ณ์ค˜~โ€œ๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค.

    ํ•„์ž๋Š” ์ฒ˜์Œ์— ์ด๊ฒŒ ์™œ Merge Request๊ฐ€ ์•„๋‹ˆ๋ผ Pull Request์ธ์ง€ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๊ฐ”์—ˆ๋Š”๋ฐ, ๋‚˜์ค‘์— ์™€์„œ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ์ตœ์ข…์ ์œผ๋กœ ๋‘ ๋ธŒ๋žœ์น˜์˜ ์†Œ์Šค๋ฅผ ํ•ฉ์น˜๋Š” ํ–‰์œ„๋ฅผ ํ•˜๋Š” ์ฃผ์ฒด๊ฐ€ ์š”์ฒญ์„ ํ•œ ์‚ฌ๋žŒ์ด ์•„๋‹ˆ๊ณ  ์š”์ฒญ์„ ๋ฐ›์€ ์‚ฌ๋žŒ์ด๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์„ ๋ฐ›์€ ์‚ฌ๋žŒ์ด ๋ธŒ๋žœ์น˜๋ฅผ ๊ฐ€์ ธ๊ฐ€์„œ ํ•ฉ์นœ๋‹ค๋Š” ๊ด€์ ์—์„œ ๋ณด๋ฉด ์ ์ ˆํ•œ ๋„ค์ด๋ฐ์ธ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋‹ค.

    fetch

    fetch๋Š” ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์ตœ์‹  ์ด๋ ฅ์„ ๋‚ด ํด๋ผ์ด์–ธํŠธ๋กœ ๊ฐ€์ ธ์˜ค๋˜ ๋ณ‘ํ•ฉ์€ ํ•˜์ง€ ์•Š๋Š” ๋ช…๋ น์–ด์ด๋‹ค.

    $ git fetch

    fetch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์ƒˆ๋กœ ์—…๋ฐ์ดํŠธํ•œ ๋ชจ๋“  ๋‚ด์—ญ์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด์ œ ๊ทธ ๋‚ด์—ญ์„ ๋ณด๊ณ  ๋‚ด ๋กœ์ปฌ์— ์žˆ๋Š” ๋ฒ„์ „์ด ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์žˆ๋Š” ๋ฒ„์ „๋ณด๋‹ค ์ด์ „ ๋ฒ„์ „์ด๋ผ๋ฉด pull ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด ์ปดํ“จํ„ฐ์˜ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๋ฉด ๋œ๋‹ค.

    ๊ทธ๋Ÿผ ์ด ๋ช…๋ น์–ด๊ฐ€ pull์˜ ํ•˜์œ„ ํ˜ธํ™˜์ด ์•„๋‹Œ๊ฐ€? ๋ผ๋Š” ์ƒ๊ฐ์ด ๋“ค ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, pull๊ณผ fetch๋Š” ์กฐ๊ธˆ ์šฉ๋„๊ฐ€ ๋‹ค๋ฅด๊ธด ํ•˜๋‹ค. pull ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ผ๋‹จ ๋ฌป์ง€๋„ ๋”ฐ์ง€์ง€๋„ ์•Š๊ณ  ๋ฐ”๋กœ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์ตœ์‹  ์†Œ์Šค๋ฅผ ๊ฐ€์ ธ์™€์„œ ๋‚ด ๋กœ์ปฌ ์†Œ์Šค์— ํ•ฉ์ณ๋ฒ„๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ธˆ ์œ„ํ—˜ํ•˜๊ธด ํ•˜๋‹ค. ๋ญ ์˜ˆ๋ฅผ ๋“ค๋ฉด ์ง€๊ธˆ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์ตœ์‹  ์†Œ์Šค๊ฐ€ ๋ฒ„๊ทธ๊ฐ€ ์žˆ๋Š” ์ƒํƒœ์ผ ์ˆ˜๋„ ์žˆ์ง€ ์•Š์€๊ฐ€?

    ๊ทธ๋ž˜์„œ ํ•„์ž๊ฐ™์€ ๊ฒฝ์šฐ ๋ณดํ†ต ๋กœ์ปฌ ์†Œ์Šค์™€ ๋ฆฌ๋ชจํŠธ ์†Œ์Šค์˜ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฏธ๋ฆฌ ๋น„๊ตํ•ด๋ณด๊ณ  ์‹ถ์„ ๋•Œ fetch๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  fetch๋ฅผ ์ž˜ ์ด์šฉํ•˜๋ฉด ์ด๋Ÿฐ ์–Œ์ƒ์ด๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

    #!/bin/bash
    
    git fetch --all -p; git branch -vv | grep ": gone]" | awk '{ print $1 }' | xargs -n 1 git branch -d

    ์ด ์‰˜์Šคํฌ๋ฆฝํŠธ๋Š” ํ•„์ž๊ฐ€ ์˜ˆ์ „์— ๋งŒ๋“ค์–ด ๋†จ๋˜ ์นœ๊ตฌ์ด๋‹ค. fetch๋ฅผ ํ†ตํ•ด ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์ตœ์‹  ๋‚ด์šฉ์„ ๋ฐ›์•„์˜จ ๋’ค, branch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์—์„œ๋Š” ์‚ญ์ œ๋˜์—ˆ์ง€๋งŒ ๋กœ์ปฌ์—๋Š” ๋‚จ์•„์žˆ๋Š” ๋ธŒ๋žœ์น˜๋ฅผ ์ฐพ์•„์„œ ์‹น ๋‹ค ์ง€์›Œ์ฃผ๋Š” ์Šคํฌ๋ฆฝํŠธ์ด๋‹ค. ์ฐธ๊ณ ๋กœ ๋กœ์ปฌ์—๋Š” ์žˆ์ง€๋งŒ ๋ฆฌ๋ชจํŠธ์—์„œ ์‚ญ์ œ๋œ ๋ธŒ๋žœ์น˜๋Š” ๋ธŒ๋žœ์น˜ ์ด๋ฆ„ ๋’ค์— : gone์ด๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋ถ™์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๋ถ„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    $ git branch -vv
    * master fa0cec5 [origin/master] ๋งˆ์Šคํ„ฐ ๋ธŒ๋žœ์น˜์—์šค
      test   1f3578f [origin/test: gone] ๋ฆฌ๋ชจํŠธ์—์„  ์ฃฝ์€ ๋ธŒ๋žœ์น˜
      test2  fa0cec5 ๋กœ์ปฌ์—์„œ ๋งŒ๋“ค์–ด์ง€๊ณ  ๋ฆฌ๋ชจํŠธ์— ์—…๋ฐ์ดํŠธ๋Š” ์•ˆ๋œ ๋ธŒ๋žœ์น˜

    fetch ๋ช…๋ น์–ด์™€ branch ๋ช…๋ น์–ด์˜ ํŠน์„ฑ์„ ์ž˜ ์ด์šฉํ•˜๋ฉด ์ด๋Ÿฐ ๊ฟ€ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.

    ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์—…๋ฐ์ดํŠธํ•˜๊ธฐ

    ์ž, ์ง€๊ธˆ๊นŒ์ง€๋Š” ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ๋‚ด์šฉ์„ ๋กœ์ปฌ๊ณผ ์—ฐ๋™ํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์‚ดํŽด๋ดค๋‹ค๋ฉด ์ด์ œ๋Š” ๋‚ด ๋กœ์ปฌ์—์„œ ๋ณ€๊ฒฝํ•œ ์†Œ์Šค๋ฅผ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์„ ์‚ดํŽด๋ณผ ์ฐจ๋ก€์ด๋‹ค. ํ•„์ž๋Š” ์ด ๊ณผ์ •์„ ์„ค๋ช…ํ•  ๋•Œ ๋ณดํ†ต ํƒ๋ฐฐ๋กœ ์˜ˆ๋ฅผ ์ฃผ๋กœ ๋“œ๋Š” ํŽธ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ด ํฌ์ŠคํŒ…์—์„œ๋„ ํƒ๋ฐฐ๋ฅผ ํฌ์žฅํ•˜๊ณ  ๋ฐฐ์†กํ•˜๋Š” ๊ณผ์ •์— ๋น—๋Œ€์–ด์„œ ์„ค๋ช…์„ ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.

    add

    add 원하는 변경사항만 골라 담는 add 명령어

    ์ž, ํ‰ํ™”๋กœ์šด ์ค‘*๋‚˜๋ผ์—์„œ ์ค‘๊ณ  ๊ฑฐ๋ž˜๋ฅผ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ๋ฌผ๋ก  ์ง‘์— ์žˆ๋Š” ๋ชจ๋“  ๋ฌผ๊ฑด์„ ๋ณด๋‚ด๋Š” ํ˜œ์ž๊ฐ™์€ ๋ถ„๋„ ๊ณ„์‹œ๊ฒ ์ง€๋งŒ ์ผ๋ฐ˜์ธ์ด๋ผ๋ฉด ๊ทธ๋Ÿฌ์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ์ƒ๋Œ€๋ฐฉํ•œํ…Œ ๋ฌผ๊ฑด์„ ๋ณด๋‚ด๊ธฐ ์ „์— ์–ด๋–ค ๋ฌผ๊ฑด์„ ๋ณด๋‚ผ ๊ฒƒ์ธ์ง€ ๋ถ€ํ„ฐ ์ •ํ•ด์•ผํ•œ๋‹ค. ์ด๋•Œ add ๋ช…๋ น์–ด๊ฐ€ ์–ด๋–ค ๋ฌผ๊ฑด๋“ค์„ ํฌ์žฅํ•  ๊ฒƒ์ธ์ง€ ๊ณ ๋ฅด๋Š” ๊ณผ์ •์„ ๋‹ด๋‹นํ•œ๋‹ค.

    $ git add . # ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆฐ๋‹ค
    $ git add ./src/components # components ๋””๋ ‰ํ† ๋ฆฌ์˜ ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆฐ๋‹ค
    $ git add ./src/components/Test.vue # ํŠน์ • ํŒŒ์ผ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋งŒ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆฐ๋‹ค
    $ git add -p # ๋ณ€๊ฒฝ๋œ ์‚ฌํ•ญ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด๋ฉด์„œ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆฐ๋‹ค

    ์ด๋•Œ ์„ ํƒ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์€ ์Šคํ…Œ์ด์ง€(Stage)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์ด๋•Œ git add <๊ฒฝ๋กœ> ๋ช…๋ น์–ด๋Š” ํ•ด๋‹น ๊ฒฝ๋กœ ์•ˆ์— ์žˆ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ „๋ถ€ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ, ์ด๊ฒŒ ์˜ ๋ถˆ์•ˆํ•˜๋‹ค ์‹ถ์€ ์‚ฌ๋žŒ์€ -p ์˜ต์…˜์„ ์คŒ์œผ๋กœ์จ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ•˜๋‚˜ํ•˜๋‚˜ ํ™•์ธํ•˜๋ฉด์„œ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ฆด ์ˆ˜๋„ ์žˆ๋‹ค.

    ์ด๋ ‡๊ฒŒ ์Šคํ…Œ์ด์ง€์— ๋‹ด๊ธด ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์€ git status ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ™•์ธํ•ด๋ณผ ์ˆ˜ ์žˆ๊ณ , status ๋ช…๋ น์–ด์— ์ถ”๊ฐ€์ ์œผ๋กœ -v ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์–ด๋–ค ํŒŒ์ผ์˜ ์–ด๋–ค ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€๋„ ํ•จ๊ป˜ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

    $ git add ./soruce
    $ git status
    
    On branch master
    Your branch is up to date with 'origin/master'.
    
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
    	modified:   source/_drafts/git-tutorial.md

    commit

    commit 변경 사항들을 포장하는 commit 명령어

    add๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์Šคํ…Œ์ด์ง€์— ์˜ฌ๋ ธ๋‹ค๋ฉด ์ด์ œ ์Šคํ…Œ์ด์ง€์— ์žˆ๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์„ ํฌ์žฅํ•  ์ฐจ๋ก€์ด๋‹ค. ์ด๋•Œ ์ด ํฌ์žฅํ•˜๋Š” ํ–‰์œ„๋ฅผ commit์ด๋ผ๊ณ  ํ•œ๋‹ค. ์ปค๋ฐ‹์€ Git์—์„œ ์ƒ๋‹นํžˆ ์ค‘์š”ํ•œ ๋ถ€๋ถ„์„ ์ฐจ์ง€ํ•˜๋Š” ํ–‰์œ„์ธ๋ฐ, ๋ฐ”๋กœ Git์ด ํ•˜๋‚˜์˜ ์ปค๋ฐ‹์„ ํ•˜๋‚˜์˜ ๋ฒ„์ „์œผ๋กœ ์ •์˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ฒ„์ „์œผ๋กœ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ณ€๊ฒฝ์ด๋ผ๋Š” ๊ธฐ์ค€๋„ ๋‹น์—ฐํžˆ ๋ฐ”๋กœ ์ด ์ปค๋ฐ‹์ด ๋œ๋‹ค.

    $ git log --graph
    
    * commit 20f1ea9 (HEAD -> master, origin/master, origin/HEAD)
    | Author: Evan Moon <bboydart91@gmail.com>
    |
    |     ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋!
    |
    * commit ca693fd
    | Author: Evan Moon <bboydart91@gmail.com>
    |
    |     ํšŒ์›๊ฐ€์ž… ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํผ ์ถ”๊ฐ€
    |
    * commit f9b6e2d
    | Author: Evan Moon <bboydart91@gmail.com>
    |
    |     ํšŒ์›๊ฐ€์ž… ์ด๋ฉ”์ผ ์ž…๋ ฅ ํผ ์ถ”๊ฐ€
    |

    ์œ„์˜ ๊ทธ๋ž˜ํ”„ ์ƒ์—์„œ ํ•„์ž์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ˜„์žฌ ์ƒํƒœ๋Š” ์–ด๋–ค ์ปค๋ฐ‹์ผ๊นŒ?

    ๊ทธ๋ž˜ํ”„ ์ƒ์—์„œ HEAD๊ฐ€ 20f1ea9 ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ ๊ฐœ๋ฐœ ๋! ์ปค๋ฐ‹์— ์œ„์น˜ํ•ด ์žˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ ํ•„์ž์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ๊นŒ์ง€ ๊ฐœ๋ฐœ์ด ์™„๋ฃŒ๋œ ์ƒํƒœ๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ๊ทธ๋ž˜ํ”„๋ฅผ ์ž์„ธํžˆ ๋ณด๋ฉด ๊ฐ๊ฐ์˜ ์ปค๋ฐ‹๋“ค์€ 20f1ea9๊ณผ ๊ฐ™์€ ๊ณ ์œ ํ•œ ํ•ด์‰ฌ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ, ์ด ํ•ด์‰ฌ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ ์–ด๋– ํ•œ ์ปค๋ฐ‹์œผ๋กœ๋“  ์ž์œ ์ž์žฌ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด ํšŒ์›๊ฐ€์ž… ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํผ ์ถ”๊ฐ€ ์ปค๋ฐ‹์˜ ํ•ด์‰ฌ ๊ฐ’์„ ์‚ฌ์šฉํ•˜์—ฌ git checkout ca693fd ๋ช…๋ น์–ด๋กœ ํšŒ์›๊ฐ€์ž… ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅ ํผ์ด ์ถ”๊ฐ€๋œ ์‹œ์ ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ฆ‰, ์‹œ๊ฐ„์—ฌํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค!

    ์ด๋Ÿฌํ•œ ์ปค๋ฐ‹์˜ ๊ธฐ๋Šฅ์„ ์ œ๋Œ€๋กœ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ปค๋ฐ‹์€ ๋ฐ˜๋“œ์‹œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋‹จ์œ„๋กœ ํ•ด์•ผํ•œ๋‹ค. ๋” ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ํŠน์ • ์ปค๋ฐ‹์œผ๋กœ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋ฆฌ๊ณ  ์œ„์˜ ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ปค๋ฐ‹์—๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค. ์ด ๋ฉ”์„ธ์ง€๋Š” ์ด ์ปค๋ฐ‹์œผ๋กœ ์ธํ•œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์ด ๋ฌด์—‡์ธ์ง€ ์ง์ ‘์ ์œผ๋กœ ํ‘œํ˜„ํ•ด์ฃผ๋Š” ์œ ์ผํ•œ ์ˆ˜๋‹จ์ด๋ฏ€๋กœ ์ข‹์€ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์ž‘์„ฑํ•˜๊ธฐ ์œ„ํ•œ ๊ณ ๋ฏผ์€ ํ•„์ˆ˜๋‹ค. ๋‹คํ–‰ํžˆ๋„ ์ด๋ฏธ ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์ด ์ข‹์€ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด ํฌ์ŠคํŒ…์„ ํ•ด์ฃผ์…จ๊ธฐ ๋•Œ๋ฌธ์— ๊ตฌ๊ธ€์—์„œ ํ•œ๋ฒˆ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ์ˆ˜๋‘๋ฃฉํ•˜๊ฒŒ ๋‚˜์˜จ๋‹ค.

    ์ฐธ๊ณ ๋กœ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋Š” ๊ผญ ์˜์–ด์—ฌ์•ผ ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ์กฐ์ง์— ๋”ฐ๋ผ์„œ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์˜์–ด๋กœ๋งŒ ์ž‘์„ฑํ•˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ๋ฃฐ์ด ์žˆ์„ ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ์‚ฌ์‹ค ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋Š” ๊ฒฐ๊ตญ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์ˆ˜๋‹จ์ด๋ฏ€๋กœ ์–ธ์ œ ๋ˆ„๊ฐ€ ๋ณด๋”๋ผ๋„ ์•Œ์•„๋ณด๊ธฐ ์‰ฝ๊ฒŒ๋งŒ ์ž‘์„ฑํ•˜๋ฉด ์žฅ๋•ก์ด๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ ์˜์–ด๊ฐ€ ์ต์ˆ™ํ•˜์ง€ ์•Š์€๋ฐ๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๊ตณ์ด ์˜์–ด๋ฅผ ๊ณ ์ง‘ํ•  ํ•„์š”๋Š” ์—†๋‹ค. ์˜คํžˆ๋ ค ๊ฐ™์ด ํ˜‘์—…ํ•˜๋Š” ํŒ€์›๋“ค์ด ์˜์–ด์— ์ต์ˆ™ํ•˜์ง€ ์•Š๋‹ค๋ฉด ๊ทธ ๋˜ํ•œ ๋ถˆํ•„์š”ํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ๋น„์šฉ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

    ๋˜ํ•œ ์ปค๋ฐ‹์€ ์•„์ง ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ํŒŒ์ผ์„ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์‚ฌ์šฉ์ž์˜ ํด๋ผ์ด์–ธํŠธ ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ๊ณผ์ •์ด๋ฏ€๋กœ ์ธํ„ฐ๋„ท์— ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•˜๋Š” ๊ฒƒ์€ ์•„๋ฌด๋Ÿฐ ์ง€์žฅ์ด ์—†๋‹ค.(๋น„ํ–‰๊ธฐ์—์„œ ์ฝ”๋”ฉํ•  ๋•Œ๋„ ์ปค๋ฐ‹๊นŒ์ง€๋Š” ๊ฐ€๋Šฅํ•˜๋‹ค!)

    ์‚ฌ์‹ค ํ•„์ž๋Š” Git ๋‰ด๋น„์ผ ๋•Œ ์ด ์ปค๋ฐ‹์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ์—ˆ๋Š”๋ฐ, ๋งŽ์€ ๊ฐœ๋ฐœ์ž ๋ถ„๋“ค์ด commit๊ณผ push๋ฅผ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋‘ ๋ช…๋ น์–ด๋Š” ์—„์—ฐํžˆ ๋‹ค๋ฅธ ์—ญํ• ์„ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋˜๋„๋ก์ด๋ฉด ๊ตฌ๋ถ„ํ•ด์„œ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์ž.

    push

    push 변경 사항들을 리모트 서버로 배송하는 push 명령어

    ์ปค๋ฐ‹์„ ํ†ตํ•ด ํฌ์žฅ๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์€ push ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋กœ ์—…๋กœ๋“œ ๋œ๋‹ค. ์ด๋•Œ๋Š” ์ปค๋ฐ‹๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ๋“ค์„ ์‹ค์ œ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ์ „์†กํ•˜๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ˜๋“œ์‹œ ๋„คํŠธ์›Œํฌ์— ์—ฐ๊ฒฐ์ด ๋˜์–ด์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ‘ธ์‰ฌํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ A ๋กœ์ปฌ ๋ธŒ๋žœ์น˜๋Š” A ๋ฆฌ๋ชจํŠธ ๋ธŒ๋žœ์น˜์—๋งŒ ํ‘ธ์‰ฌํ•ด์•ผ ํ•œ๋‹ค๋Š” ๋ฃฐ ๋”ฐ์œˆ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์ปค๋ฐ‹๋“ค์„ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„๋กœ ํ‘ธ์‰ฌํ•  ๋•Œ๋Š” Git์—๊ฒŒ โ€œ์–ด๋–ค ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ์–ด๋–ค ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‰ฌํ•  ๊ฒƒ์ธ์ง€โ€๋„ ํ•จ๊ป˜ ์•Œ๋ ค์ค˜์•ผ ํ•œ๋‹ค.

    $ git push origin master # origin ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ master ๋ธŒ๋žœ์น˜๋กœ ํ‘ธ์‰ฌํ•ด์ค˜!

    ๊ทผ๋ฐ ์ด๊ฒŒ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์ด master์ •๋„๋ฉด ๊ทธ๋ž˜๋„ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ๋งค๋ฒˆ ์ž…๋ ฅํ•ด์ค„๋งŒ ํ•˜์ง€๋งŒ feature/SD-0000-request-api-refactoring ์ •๋„ ๋˜๋ฉด ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ๋งค๋ฒˆ ์ž…๋ ฅํ•œ๋‹ค๋Š” ๊ฒƒ์ด ๊ท€์ฐฎ์„ ์ˆ˜๋„ ์žˆ๋‹ค.

    ๊ทธ๋ž˜์„œ Git์€ ๋ธŒ๋žœ์น˜๋ฅผ ์ž๋™์œผ๋กœ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ๋˜ํ•œ ์ œ๊ณตํ•ด์ค€๋‹ค.

    $ git push --set-upstream origin master

    --set-upstream ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์ฒ˜์Œ ํ•œ๋ฒˆ๋งŒ ๋ธŒ๋žœ์น˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•ด์ฃผ๋ฉด ๊ทธ ์ดํ›„๋กœ๋Š” git push ๋ช…๋ น์–ด๋งŒ ์ž…๋ ฅํ•ด๋„ ์ž๋™์œผ๋กœ ์ฒ˜์Œ ์ž…๋ ฅํ–ˆ๋˜ ๋ธŒ๋žœ์น˜๋กœ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ํ‘ธ์‰ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์ด๋ ‡๊ฒŒ ํ•ด์„œ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์˜ ๋ ˆํŒŒ์ง€ํ† ๋ฆฌ์—์„œ ์†Œ์Šค๋ฅผ ๋‚ด ์ปดํ“จํ„ฐ์— ๋ฐ›์•„์˜จ ๋’ค ํŒŒ์ผ์„ ๋ณ€๊ฒฝํ•˜๊ณ , ๊ทธ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๋ฆฌ๋ชจํŠธ ์„œ๋ฒ„์— ๋‹ค์‹œ ์—…๋ฐ์ดํŠธํ•˜๋Š” clone -> ํŒŒ์ผ ์ˆ˜์ • -> add -> commit -> push๊ณผ์ •์„ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์•˜๋‹ค.

    ๋งˆ์น˜๋ฉฐ

    ์‚ฌ์‹ค ๋ธ”๋กœ๊ทธ ํฌ์ŠคํŒ… ํ•œ๊ฐœ๋กœ Git์— ๋Œ€ํ•œ ๊ฒƒ๋“ค์„ ๋ชจ๋‘ ์„ค๋ช…ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ํž˜๋“ค๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ๋Š” branch, checkout, merge, revert์™€ ๊ฐ™์ด ๋ฒ„์ „์„ ์‹ค์ œ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ช…๋ น์–ด์™€ ๊ทธ ๊ฐœ๋…์— ๋Œ€ํ•œ ๋‚ด์šฉ์„ ํฌ์ŠคํŒ…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

    Git์€ ํ˜„์—…์—์„œ ๊ต‰์žฅํžˆ ๋งŽ์ด ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์ง€๋งŒ ์ •์ž‘ ๋Œ€ํ•™์ด๋‚˜ ํ•™์›๊ฐ™์€ ๊ต์œก ๊ธฐ๊ด€์—์„œ๋Š” ์•ฝ๊ฐ„ ์ฉŒ๋ฆฌ ์ทจ๊ธ‰ ๋ฐ›๋Š” ๊ฒƒ ๊ฐ™๊ธฐ๋„ ํ•˜๋‹ค. ๋ญ ์‚ฌ์‹ค ๋Œ€ํ•™์—์„œ๋Š” ์ข€ ๋” ์›๋ก ์ ์ธ ๊ณตํ•™์„ ๋ฐฐ์šฐ๋Š” ๊ฑฐ์ง€ ์ฝ”๋”ฉ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ณณ์€ ์•„๋‹ˆ๊ธฐ๋„ ํ•˜๊ณ , ํ•™์› ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ๋ฒ„์ „ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ์„ ๊ฐ€๋ฅด์น  ์‹œ๊ฐ„์— ์ฝ”๋”ฉ์„ ์•Œ๋ ค์ฃผ๋Š” ๊ฒŒ ๋” ์ทจ์—…์— ์œ ๋ฆฌํ•˜๋‹ˆ ๊ทธ๋Ÿด ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค. (์š”์ฆ˜์—๋Š” ๋Œ€ํ•™์— ๊ฐ•์‚ฌ ๋ถ„๋“ค์ด ์˜ค์…”์„œ Git์— ๋Œ€ํ•ด ๊ฐ•์˜ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.)

    ์–ด์จŒ๋“  Git์„ ์ž˜์“ฐ๋ฉด ๋‹ค๋ฅธ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐœ๋ฐœํ•œ ๋ชจ๋“ˆ ์ค‘์— ํ•˜๋‚˜๋งŒ ๋‚ด ๋ธŒ๋žœ์น˜๋กœ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค๊ฑฐ๋‚˜, ์ปค๋ฐ‹์ด ๊ผฌ์—ฌ์„œ ์†Œ์Šค๊ฐ€ ์ง€์›Œ์กŒ๋‹ค๊ฑฐ๋‚˜ํ•˜๋Š” ๋“ฑ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ์Šฌํ”ˆ ์ƒํ™ฉ๋“ค์„ ์ž˜ ํ—ค๊ฒฐํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŒ€์›๋“ค์—๊ฒŒ ์ด์จ๋ฐ›๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋  ์ˆ˜(๋„) ์žˆ๋‹ค.

    ์ด์ƒ์œผ๋กœ Git ๋‰ด๋น„๋ฅผ ์œ„ํ•œ ๊ธฐ์ดˆ ์‚ฌ์šฉ๋ฒ• - ์‹œ์ž‘ํ•˜๊ธฐ ํฌ์ŠคํŒ…์„ ๋งˆ์นœ๋‹ค.

    Evan Moon

    ๐Ÿข ๊ฑฐ๋ถ์ด์ฒ˜๋Ÿผ ์‚ด์ž

    ๊ฐœ๋ฐœ์„ ์ž˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ๊ฐ€ ์•„๋‹Œ ๊ฐœ๋ฐœ์„ ์ฆ๊ธฐ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๋Š” ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•œ ์ƒ๊ฐ ์ •๋ฆฌ๋ถ€ํ„ฐ ํŠœํ† ๋ฆฌ์–ผ, ์‚ฝ์งˆ๊ธฐ ์ •๋„๋ฅผ ์ฃผ๋กœ ๋„์ ์ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.