Skip to main content

Git ํ•˜์œ„ ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ ์ •๋ณด

๋‹จ์ผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ•˜์œ„ ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Platform navigation

ํ•˜์œ„ ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ ์ •๋ณด

์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜์œ„ ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. โ€œํ•˜์œ„ ๋ฆฌํฌ์ง€ํ† ๋ฆฌโ€๋Š” ์ฃผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ํด๋”์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

ํ•˜์œ„ ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ์„ ์„ค๋ช…ํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด์—ฌ ์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • ํ”„๋กœ์ ํŠธ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” test๋ผ๋Š” ์ด๋ฆ„์˜ ๋นˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ Spoon-Knife๋ผ๋Š” ํ•˜์œ„ ํŠธ๋ฆฌ๋กœ ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค.
  • test ํ”„๋กœ์ ํŠธ๋Š” ๋™์ผํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ผ๋ถ€์ธ ๊ฒƒ์ฒ˜๋Ÿผ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์—…๋ฐ์ดํŠธ๋ฅผ Spoon-Knife์—์„œ test ํ”„๋กœ์ ํŠธ๋กœ ํŽ˜์น˜ํ•ฉ๋‹ˆ๋‹ค.

ํ•˜์œ„ ํŠธ๋ฆฌ ๋ณ‘ํ•ฉ์— ๋Œ€ํ•œ ๋นˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์„ค์ •

  1. ํ„ฐ๋ฏธ๋„ํ„ฐ๋ฏธ๋„Git Bash๋ฅผ ์—ฝ๋‹ˆ๋‹ค.

  2. ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ํ•ด๋‹น ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

    mkdir test
    cd test
    
  3. ์ƒˆ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค.

    $ git init
    > Initialized empty Git repository in /Users/octocat/tmp/test/.git/
    
  4. ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ปค๋ฐ‹ํ•ฉ๋‹ˆ๋‹ค.

    $ touch .gitignore
    $ git add .gitignore
    $ git commit -m "initial commit"
    > [main (root-commit) 3146c2a] initial commit
    >  0 files changed, 0 insertions(+), 0 deletions(-)
    >  create mode 100644 .gitignore
    

ํ•˜์œ„ ํŠธ๋ฆฌ๋กœ ์ƒˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ถ”๊ฐ€

  1. ๊ด€์‹ฌ ์žˆ๋Š” ๋ณ„๋„์˜ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒˆ ์›๊ฒฉ URL์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

    $ git remote add -f spoon-knife https://github.com/octocat/Spoon-Knife.git
    > Updating spoon-knife
    > warning: no common commits
    > remote: Counting objects: 1732, done.
    > remote: Compressing objects: 100% (750/750), done.
    > remote: Total 1732 (delta 1086), reused 1558 (delta 967)
    > Receiving objects: 100% (1732/1732), 528.19 KiB | 621 KiB/s, done.
    > Resolving deltas: 100% (1086/1086), done.
    > From https://github.com/octocat/Spoon-Knife
    >  * [new branch]      main     -> Spoon-Knife/main
    
  2. Spoon-Knife ํ”„๋กœ์ ํŠธ๋ฅผ ๋กœ์ปฌ Git ํ”„๋กœ์ ํŠธ์— ๋ณ‘ํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒŒ์ผ์ด ๋กœ์ปฌ์—์„œ ๋ณ€๊ฒฝ๋˜์ง€๋Š” ์•Š์ง€๋งŒ Git์€ ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ์ค€๋น„ํ•ฉ๋‹ˆ๋‹ค.

    Git 2.9 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

    $ git merge -s ours --no-commit --allow-unrelated-histories spoon-knife/main
    > Automatic merge went well; stopped before committing as requested
    

    Git 2.8 ์ดํ•˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ:

    $ git merge -s ours --no-commit spoon-knife/main
    > Automatic merge went well; stopped before committing as requested
    
  3. spoon-knife๋ผ๋Š” ์ƒˆ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  ํ”„๋กœ์ ํŠธ์˜ Git ๊ธฐ๋ก์„ Spoon-Knife ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.

    $ git read-tree --prefix=spoon-knife/ -u spoon-knife/main
    > fatal: refusing to merge unrelated histories
    
  4. ๋ณ€๊ฒฝ ๋‚ด์šฉ์„ ์ปค๋ฐ‹ํ•˜์—ฌ ์•ˆ์ „ํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

    $ git commit -m "Subtree merged in spoon-knife"
    > [main fe0ca25] Subtree merged in spoon-knife
    

ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ ํ•˜๋‚˜๋งŒ ์ถ”๊ฐ€ํ–ˆ๋”๋ผ๋„ ์—ฌ๋Ÿฌ ํ•˜์œ„ ํ”„๋กœ์ ํŠธ๋ฅผ Git ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒ

๋‚˜์ค‘์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ ์ƒˆ ๋ณต์ œ๋ณธ์„ ๋งŒ๋“œ๋Š” ๊ฒฝ์šฐ ์ถ”๊ฐ€ํ•œ ์›๊ฒฉ์ด ์ƒ์„ฑ๋˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. git remote add ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์—…๋ฐ์ดํŠธ ๋ฐ ๋ณ€๊ฒฝ ๋‚ด์šฉ๊ณผ ๋™๊ธฐํ™”

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

git pull -s subtree REMOTE-NAME BRANCH-NAME

์œ„์˜ ์˜ˆ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

git pull -s subtree spoon-knife main

์ถ”๊ฐ€ ์ฐธ๊ณ  ์ž๋ฃŒ