🧩

003 GitHub

Β 
μ „ μ„Έκ³„μ μœΌλ‘œ κ°€μž₯ 많이 쓰이고 μžˆλŠ” 버전 관리 ν”„λ‘œκ·Έλž¨μΈ GitHub을 μ‚¬μš©ν•˜λŠ” 방법에 λŒ€ν•΄μ„œ λ¨Όμ € λ³΄μ—¬λ“œλ¦¬κ³ , GitHub을 μ™œ μ‚¬μš©ν•΄μ•Ό ν•˜λŠ”μ§€ κ°„λž΅ν•˜κ²Œ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€.
Β 

1. GitHub μ €μž₯μ†Œ 생성

GitHub에 둜그인 ν•˜κ³  λ‚˜μ„œ 였λ₯Έμͺ½ 상단에 λ³΄μ‹œλ©΄ + λ²„νŠΌμ΄ μžˆμŠ΅λ‹ˆλ‹€. 이 λ²„νŠΌμ„ ν΄λ¦­ν•˜μ‹œκ³  'New Repository'λ₯Ό ν΄λ¦­ν•©λ‹ˆλ‹€.
notion imagenotion image
notion imagenotion image
Repository name(μ €μž₯μ†Œ 이름)을 μž…λ ₯ν•΄μ€λ‹ˆλ‹€. Description에 κ°„λ‹¨ν•œ μ„€λͺ…을 μž…λ ₯ν•˜μ…”λ„ μ’‹μŠ΅λ‹ˆλ‹€. 선택사항(optional)μž…λ‹ˆλ‹€.
그리고 Public μ €μž₯μ†Œκ°€ μ•„λ‹ˆλΌ Private μ €μž₯μ†Œλ₯Ό μƒμ„±ν•˜κ² μŠ΅λ‹ˆλ‹€. Create Repository λ²„νŠΌμ„ λˆ„λ₯΄λ„둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
notion imagenotion image
Β 
GitHub Repositoryλ₯Ό μƒμ„±ν•˜κ²Œ 되면 첫 번째 νŽ˜μ΄μ§€μ— 터미널을 톡해 μ–΄λ–»κ²Œ Git을 μ„ΈνŒ…ν•΄μ•Όν•˜λŠ”μ§€ μž‘μ„±λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. 이 λͺ…령어듀을 터미널에 μž…λ ₯ν•˜μ‹œλ©΄ λ©λ‹ˆλ‹€.
notion imagenotion image
Β 

2. ν”„λ‘œμ νŠΈμ— Git μ„€μ •

μš°μ„  ꡬ름 IDE에 μ ‘μ†ν•©λ‹ˆλ‹€. μƒμ„±λœ μ»¨ν…Œμ΄λ„ˆκ°€ μžˆλŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
notion imagenotion image
Β 
μ‹€ν–‰ λ²„νŠΌμ„ λˆŒλŸ¬μ„œ λ°”λ‘œ μ—¬μ‹€ μˆ˜λ„ μžˆμ§€λ§Œ GitHub은 ν„°λ―Έλ„μ—μ„œ λŒ€λΆ€λΆ„μ˜ μž‘μ—…μ„ 진행할 수 있기 λ•Œλ¬Έμ— μ»¨ν…Œμ΄λ„ˆλ₯Ό ν„°λ―Έλ„λ‘œ 싀행을 해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
Β 
터미널이 μ‹€ν–‰μ‹œν‚€κ³  ls λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•©λ‹ˆλ‹€.
root@goorm:/workspace/instaclone# ls
Β 
notion imagenotion image
Β 
instaclone 폴더가 보이게 λ©λ‹ˆλ‹€. instaclone 폴더 μ•ˆμœΌλ‘œ 듀어가도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
root@goorm:/workspace/instaclone# cd instaclone/
Β 
notion imagenotion image
Β 
instaclone μ•„λž˜μ— μžˆλŠ” νŒŒμΌλ“€μ˜ λ³€ν™”λ₯Ό μΆ”μ ν•˜κΈ° μœ„ν•΄ 버전 관리 μ§„ν–‰ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. μš°μ„ , μ–΄λ–€ 파일이 μžˆλŠ”μ§€ ν™•μΈν•©λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# ls
Β 
notion imagenotion image
Β 
venv ν΄λ”λŠ” μΆ”μ ν•˜μ§€ μ•Šμ„ κ²λ‹ˆλ‹€. λ‹€λ₯Έ κ³³μ—μ„œ μž‘μ—…μ„ ν•  λ•ŒλŠ” 가상 ν™˜κ²½μ„ μƒˆλ‘œ λ§Œλ“€ 것이기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
Β 
Git을 μ‚¬μš©ν•˜κΈ° μ•žμ„œ, λ¨Όμ € μ΄ˆκΈ°ν™”λ₯Ό μ‹œν‚€κ² μŠ΅λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git init
Β 
notion imagenotion image
Β 
폴더에 μ–΄λ–€ λ³€ν™”κ°€ μžˆλŠ”μ§€ ν™•μΈν•˜κ² μŠ΅λ‹ˆλ‹€. ls λͺ…λ Ήμ–΄λ₯Ό μž…λ ₯ν•˜μ‹œλ©΄ λ³€ν™”κ°€ μ—†λŠ” 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
git init을 μˆ˜ν–‰ν•˜λ©΄ .git 폴더가 μƒμ„±λ˜λŠ”λ° 이 νŒŒμΌμ€ μˆ¨κΉ€νŒŒμΌμ΄λΌ 기본적인 ls λͺ…λ Ήμ–΄λ‘œ 확인 ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λŒ€μ‹ , -a λ˜λŠ” -al μΆ”κ°€ μ˜΅μ…˜μ„ μ£Όλ©΄ μˆ¨κΉ€νŒŒμΌμ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# ls - a root@goorm:/workspace/instaclone/instaclone# ls -al
Β 
notion imagenotion image
Β 
.git μ΄λΌλŠ” 폴더가 μƒˆλ‘œ 생긴 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 이 μ•ˆμ— μžˆλŠ” νŒŒμΌλ“€μ΄ 이 폴더 μ•ˆμ— 변화듀을 좔적할 게 될 κ²ƒμž…λ‹ˆλ‹€.
Β 

3. Git μ‚¬μš©ν•˜κΈ°

Git이 μ–΄λ–€ νŒŒμΌλ“€μ„ μΆ”μ ν•˜κ²Œ 될지 λͺ…ν™•ν•˜κ²Œ μ•Œλ €μ€˜μ•Ό ν•©λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git status
Β 
notion imagenotion image
Β 
'Untracted files' 라고 μžˆμŠ΅λ‹ˆλ‹€. λΉ¨κ°„μƒ‰μœΌλ‘œ ν‘œμ‹œλœ 것은 아직 μΆ”κ°€κ°€ μ•ˆ 된 파일과 ν΄λ”μž…λ‹ˆλ‹€.
관리할 νŒŒμΌμ΄λ‚˜ 폴더λ₯Ό μΆ”κ°€ν•œ ν›„ git status κ°€ μ–΄λ–»κ²Œ λ³€ν•˜λŠ”μ§€ λ³΄κ² μŠ΅λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git add config/ root@goorm:/workspace/instaclone/instaclone# git status
Β 
notion imagenotion image
Β 
config 폴더 μ•„λž˜μ— μžˆλŠ” νŒŒμΌλ“€μ΄ new file 이라고 λ…Ήμƒ‰μœΌλ‘œ ν‘œμ‹œλ˜λŠ” 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
그러면 Git이 new file에 ν•΄λ‹Ήν•˜λŠ” νŒŒμΌλ“€μ˜ λ³€ν™”λ₯Ό μΆ”μ ν•˜κ²Œ λ˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
Β 
λ‹€λ₯Έ 것듀도 좔가해보도둝 ν•˜κ² μŠ΅λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git add manage.py root@goorm:/workspace/instaclone/instaclone# git add db.sqlite3 root@goorm:/workspace/instaclone/instaclone# git status
Β 
notion imagenotion image
Β 
이제 μ›ν•˜λŠ” νŒŒμΌλ“€μ˜ λ³€ν™”λ₯Ό 좔적할 수 μžˆμŠ΅λ‹ˆλ‹€.
μ΄λŸ¬ν•œ 변경사항듀을 commit ν•΄μ•Ό ν•©λ‹ˆλ‹€. νŒŒμΌμ—λ‹€κ°€ μ–΄λ–€ 것을 μˆ˜μ •ν–ˆλŠ”μ§€ κ°„λ‹¨ν•œ λ©”λͺ¨λ₯Ό λ‚¨κΈ°λŠ” κ²ƒμž…λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git commit -m "first commit"
Β 
notion imagenotion image
ν•˜μ§€λ§Œ μ²˜μŒμ—λŠ” commit이 λ˜μ§€ μ•Šκ³  사진과 같이 git μ‚¬μš©μžλ₯Ό μ„€μ •ν•˜λΌλŠ” λ©”μ‹œμ§€κ°€ 좜λ ₯λ©λ‹ˆλ‹€. commit의 경우 μ–΄λ–€ κ°œλ°œμžκ°€ commit을 ν–ˆλŠ”μ§€κ°€ κΈ°λ‘λ˜μ–΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— git μ‚¬μš©μžλ₯Ό λ°˜λ“œμ‹œ μ„€μ •ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.
Β 
git의 emailκ³Ό name을 μ„€μ •ν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€. 본인의 각자 κΉƒν—ˆλΈŒ 이메일과 μœ μ € λ„€μž„μ„ μ μœΌμ‹œλ©΄ λ©λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git config --global user.email asdasd@naver.com root@goorm:/workspace/instaclone/instaclone# git config --global user.name name
Β 
λ‹€μŒ λͺ…λ Ήμ–΄λ₯Ό 톡해 섀정을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git config --list
Β 
notion imagenotion image
Β 
λ‹€μ‹œ commit을 μ‹œλ„ν•˜λ©΄ λ©λ‹ˆλ‹€. μ΄λ•Œ λ‹€μ‹œ νƒ€μ΄ν•‘ν•˜μ‹€ ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. μ™œλƒν•˜λ©΄, 터미널 μ°½μ—μ„œ ν™”μ‚΄ν‘œ λ°©ν–₯ν‚€ ↑ λ₯Ό μž…λ ₯ν•˜λ©΄ μ˜ˆμ „μ— μž…λ ₯ν–ˆλ˜ λͺ…λ Ήμ–΄λ₯Ό μžλ™μœΌλ‘œ μ™„μ„±ν•΄μ€λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git commit -m "first commit"
Β 
notion imagenotion image
Β 
이제 commit이 잘 된 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. 그러면 μ˜¨λΌμΈμ— μžˆλŠ” μžμ‹ μ˜ GitHub 곡간과 μ—°κ²°μ‹œν‚¬ κ²ƒμž…λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git remote add origin https://github.com/"μžμ‹ μ˜ μ €μž₯μ†Œ μ£Όμ†Œλ₯Ό μ°Έκ³ "
Β 
μ–΄λ–€ μ£Όμ†Œλ₯Ό λ„£μ–΄μ•Ό ν•  지 λͺ¨λ₯΄κ² λŠ” 뢄은 처음 GitHub Repository 생성 μ‹œμ— 봀던 νŽ˜μ΄μ§€μ— κ·ΈλŒ€λ‘œ λ‚˜μ™€ μžˆμœΌλ‹ˆ μ°Έκ³ ν•˜λ©΄ 쒋을 것 κ°™μŠ΅λ‹ˆλ‹€. μ΄λ•Œ, μžμ‹ μ˜ μ£Όμ†Œλ₯Ό μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€.
notion imagenotion image
Β 
notion imagenotion image
Β 
πŸ’‘
ꡬ름 IDE의 ν„°λ―Έλ„μ—μ„œλŠ” 볡사 λ˜λŠ” λΆ™μ—¬λ„£κΈ° 단좕킀가 λ‹€λ₯΄λ‹€λŠ” 것 μ°Έκ³ ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€. Shift ν‚€λ§Œ μΆ”κ°€μ μœΌλ‘œ λˆ„λ₯΄μ‹œλ©΄ λ©λ‹ˆλ‹€. 볡사 : Ctrl + Shift + C λΆ™μ—¬λ„£κΈ° : Ctrl + Shift + V
Β 
μž‘μ—…ν•˜κ³  commitν•œ λ‚΄μš©λ“€μ„ μ €μž₯μ†Œμ— μ—…λ‘œλ“œν•˜λ„λ‘ ν•˜κ² μŠ΅λ‹ˆλ‹€.
root@goorm:/workspace/instaclone/instaclone# git push -u origin master
Β 
μžμ‹ μ˜ GitHub Usernameκ³Ό λΉ„λ°€λ²ˆν˜Έλ₯Ό μž…λ ₯ν•΄μ€λ‹ˆλ‹€.
notion imagenotion image
Β 
μ„±κ³΅μ μœΌλ‘œ pushκ°€ 된 것을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.
notion imagenotion image
Β 
잘 μ—…λ‘œλ“œ λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ GitHub Repositoryλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€. GitHub νŽ˜μ΄μ§€λ₯Ό μƒˆλ‘œκ³ μΉ¨ν•˜λ©΄ pushν•œ 것을 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.
notion imagenotion image
Β 
commit λ²„νŠΌμ„ λˆŒλŸ¬λ³΄κ² μŠ΅λ‹ˆλ‹€.
notion imagenotion image
Β 
notion imagenotion image
Β 
commit λ©”μ‹œμ§€ "first commit"이 λ³΄μž…λ‹ˆλ‹€. 이런 λ°©μ‹μœΌλ‘œ commit듀이 μŒ“μ΄λŠ” κ²ƒμž…λ‹ˆλ‹€.
notion imagenotion image
Β 
commit을 ν™œμš©ν•˜λ©΄ λ¬Έμ œκ°€ 생겼을 λ•Œ, λ¬Έμ œκ°€ μ—†μ—ˆλ˜ μœ„μΉ˜λ‘œ 되돌릴 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„μ΄ λ§ˆμ§€λ§‰μœΌλ‘œ commit ν–ˆμ„ λ•ŒλŠ” 였λ₯˜κ°€ μ—†μ—ˆλŠ”λ° μž‘μ—…ν•˜κ³  λ³΄λ‹ˆ 였λ₯˜κ°€ μƒκ²ΌμœΌλ©΄ λ§ˆμ§€λ§‰ commit λ‚΄μš©μœΌλ‘œ 되돌릴 수 μžˆμŠ΅λ‹ˆλ‹€.
Β 
ꡬ름 IDE둜 κ°€μ„œ, μ•„κΉŒ 였λ₯˜κ°€ λ‚¬λ˜ λΆ€λΆ„ '*' λ₯Ό μ§€μ›Œμ„œ λ‹€μ‹œ 였λ₯˜κ°€ λ‚˜λ„λ‘ λ°”κΏ”λ³΄κ² μŠ΅λ‹ˆλ‹€.
notion imagenotion image
notion imagenotion image
Β 
μ €μž₯ν•˜μ‹  λ‹€μŒ μ„œλ²„λ₯Ό 켜고 URL을 톡해 μ ‘μ†ν•˜λ©΄ λ‹€μ‹œ μ—λŸ¬κ°€ λ‚˜νƒ€λ‚©λ‹ˆλ‹€.
(venv)root@goorm:/workspace/instaclone/instaclone# python manage.py runserver 0:80
Β 
notion imagenotion image
notion imagenotion image
Β 
ν˜„μž¬ 상황에선 금방 ν•΄κ²°ν•  수 μžˆλŠ” μ—λŸ¬μ΄μ§€λ§Œ λ§Žμ€ μ–‘μ˜ μ½”λ“œμ™€ νŒŒμΌμ„ μˆ˜μ •ν•œ μƒν™©μ—μ„œλŠ” μ—λŸ¬λ₯Ό μˆ˜μ •ν•˜κΈ° μ–΄λ ΅μŠ΅λ‹ˆλ‹€. μ΄λ•Œ, κ°„λ‹¨ν•˜κ²Œ λͺ¨λ“  λ³€κ²½ 사항을 μ΄ˆκΈ°ν™”μ‹œν‚€λŠ” κ²ƒμœΌλ‘œ μ²˜μŒλΆ€ν„° λ‹€μ‹œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
notion imagenotion image
Β 
μœ„ μ‚¬μ§„μ²˜λŸΌ ν„°λ―Έλ„μ—μ„œ μ„œλ²„κ°€ μž‘λ™λ˜κ³  μžˆλ‹€λ©΄ ν„°λ―Έλ„μ—μ„œ Ctrl + c λˆŒλŸ¬μ„œ μ„œλ²„λ₯Ό λ•λ‹ˆλ‹€. 그러면 λ‹€μ‹œ 터미널이 λͺ…λ Ήμ–΄λ₯Ό λ°›λŠ” μƒνƒœλ‘œ λŒμ•„μ˜΅λ‹ˆλ‹€.
Β 
이제 λ‹€μŒ λͺ…λ Ήμ–΄λ‘œ commit을 λ˜λŒλ €λ΄…μ‹œλ‹€.
root@goorm:/workspace/instaclone/instaclone# git reset --hard
Β 
notion imagenotion image
Β 
'*'κ°€ λŒμ•„μ™”μŠ΅λ‹ˆλ‹€. "first commit" ν–ˆλ˜ μƒνƒœλ‘œ λ³€ν•œ 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.
Β 
μ΄λ ‡κ²Œ μžμ‹ μ˜ νŒŒμΌμ„ 이전 λ²„μ „μœΌλ‘œ 볡ꡬ할 수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„λ“€λ„ 과정을 λ”°λΌν•˜μ‹œλ‹€κ°€ λ¬Έμ œκ°€ 생기고 또 κ·Έ 문제λ₯Ό ν•΄κ²°ν•˜μ§€ λͺ»ν•˜μ‹œκ² λ‹€λ©΄ μ΄λŸ¬ν•œ λ°©λ²•μœΌλ‘œ λ˜λŒλ €μ„œ λ‹€μ‹œ μ‹œμž‘ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
Β