[총정리] 깃허브 파일 업로드, 프로젝트 올리기 (git, github)
요약
//저장소 생성 및 연결
$ git init
$ git remote add origin [원격저장소 주소]
$ git branch -m master main
//파일 업로드
$ git pull (또는 git pull origin [브랜치 이름])
$ git add .
$ git commit -m "commit message"
$ git push (또는 git push origin [브랜치 이름])
//추가적인 명령어
$ git remote -v
$ git remote rm origin
$ git branch
$ git config --global init.defaultBranch [브랜치 이름]
$ git status
$ git rm --cached -r .
$ git push -u origin main
깃허브에 파일이나 프로젝트를 올리는 방법을 알아보자!
내 컴퓨터의 파일을 깃허브에 올리려면,
① 깃허브에 '원격 저장소'를 만들고,
② 내 컴퓨터(=올리려는 파일이 있는 폴더)에 '로컬 저장소'를 만든 뒤
③ 둘을 연결해서 로컬 저장소의 파일을 원격 저장소로 보내라고 명령하면 된다.
물론 가장 먼저 컴퓨터에 git이 설치 되어 있어야 한다. git은 이 모든 것을 가능하게 해주는 소프트웨어이다.
git 설치 방법에 대한 설명은 검색해 보면 많으니 참고해서 설치해주자.
여기서는 이후 과정부터 알아보겠다.
1. 깃허브에 원격 저장소(repository) 만들기
본인 깃허브 페이지의 'Repositories' 탭에서 'New' 버튼을 누르면 저장소를 생성할 수 있다.
'Repository name' 부분에 저장소 이름을 적어준다(예시: my-cool-website)
참고로 올리려는 폴더(컴퓨터에 있는 폴더)와 이름이 달라도 상관없다.
*저장소에 대한 설명 파일을 추가하려면 "Add a README file"을 체크해 주자. 이는 저장소 첫화면에 나오게 되는 파일로, 저장소에 대한 소개글이나 사용법 등을 적을 수 있다. 나중에도 언제든 만들거나 삭제할 수 있으니 마음대로 해도 된다.
화면 하단의 Create repository 버튼을 누르면 저장소가 만들어진다.
2. 로컬 저장소 만들기
내 컴퓨터의 폴더 중, 깃허브에 올리려고 하는 폴더에 마우스 우클릭 후 'Git bash here'를 누른다.
(폴더 이름에 대고 클릭하거나, 폴더에 들어가서 폴더 배경에 대고 클릭하면 된다.)
Git bash는 git 명령어를 쓸 수 있는 명령창이다.
* 윈도우 11부터는 '추가 옵션 표시'를 눌러야 목록에 보인다.
* 만약 옵션 목록에 git bash here이 없다면, 설치를 하지 않은 것일 수 있다. git을 다시 설치해서 Select Components 단계에서 'Windows Explorer integration - Git bash here'에 체크 표시를 한다.
이제 git bash 명령창에 아래 명령어를 써서 로컬 저장소를 만들어준다.
//로컬 저장소 만들기
$ git init
참고로 이걸 하면 폴더 안에 .git 라는 폴더가 생성되는데, '.'으로 시작하는 폴더는 숨김처리되니 보이지는 않는다.
(보고 싶다면 이 글을 참고)
3. 로컬 저장소와 원격 저장소 연결
이제 원격 저장소의 주소를 이용해서 두 저장소를 연결할 것이다.
방금 만든 깃허브의 원격 저장소에서 Code 라고 적힌 초록색 버튼을 누르면, HTTPS 탭에 주소가 적혀 있을 것이다.
잘 모르겠으면 그냥 저장소 페이지 URL 에서 뒤에 .git을 붙여주면 된다.
즉 형식은 다음과 같다: https://github.com/아이디/저장소이름.git
이 주소를 사용해서 아래 명령어를 치면 두 저장소가 연결된다.
//원격 저장소와 연결
$ git remote add origin [원격저장소 주소]
예시: git remote add origin https://github.com/myid/myproject.git
※ Tip 1
로컬 저장소에 원격 저장소가 잘 연결됐는지 (혹은 이미 연결되어 있는 다른 저장소가 있는지) 확인하고 싶다면
아래 명령어를 입력해서 연결된 저장소를 확인할 수 있다.
//연결된 원격 저장소 확인
$ git remote -v
잘 연결 되었다면 원격 저장소의 주소가 출력될 것이다.
※ Tip 2
원격 저장소를 잘못 연결했거나, 기존에 연결했던 것을 삭제하고 싶다면
아래 명령어를 통해 원격 저장소와의 연결을 끊을 수 있다.
//기존 원격 저장소와의 연결 삭제
$ git remote rm origin
참고로 rm은 remove이다.
4. 파일 업로드 준비 (저장소 세팅하기)
4-1. 브랜치(branch) 이름 변경
branch 개념은 따로 설명하진 않겠지만 대충 버전이라고 이해하면 된다.
깃허브 원격 저장소의 기본 branch 이름은 main이다. 따라서 파일도 main branch에 올려줘야 하는데,
로컬 저장소에서는 branch 이름이 기본으로 master로 되어있다.
원래 깃허브 기본 branch도 'master'였는데, 노예제를 연상시킨다고 main으로 바뀌면서 이 차이가 생겼다고 한다.
그러므로 먼저 branch 이름을 master에서 main으로 바꿔줘야 한다.
* 최근 git 설치 과정에서 branch 기본 이름을 재설정 할 수 있는 기능이 생겨서, 이때 main으로 지정을 했다면 해당되지 않는다. 뭐로 했는지 모르겠으면 아래 tip3의 방법으로 이름을 확인해보자.
//브랜치 이름 바꾸기
$ git branch -m master main
※ Tip 3
현재 내가 보고 있는 branch의 이름을 확인하려면 아래 명령어를 쓰면 된다.
위에서 브랜치 이름을 바꾸기 전에는 master라고 뜰 것이고, 바꾼 뒤에는 main이라고 뜰 것이다.
//현재 브랜치 이름 확인
$ git branch
※ Tip 4
저장소를 만들때마다 브랜치 이름을 변경하기 귀찮으니, 항상 main으로 이름 짓도록 설정할 수 있다.
아래 명령어에서 브랜치 이름을 main으로 써서 입력하면, 앞으로 모든 로컬 저장소의 브랜치 이름은 main이 된다.
//브랜치 기본(default)이름 설정
$ git config --global init.defaultBranch [브랜치 이름]
예시: git config --global init.defaultBranch main
4-2. README.md 가져오기
이제 원격 저장소도 연결됐고, 브랜치도 세팅했으니 파일을 올리기만 하면 된다.
하지만 그 전에 할 일이 하나 더 있다!
지금 원격 저장소에는 로컬 저장소에 없는 README.md 파일이 있다. (저장소 만들 때 추가하지 않은 경우는 제외)
따라서 두 저장소의 상태가 같아지도록 이걸 먼저 로컬 저장소로 가져와줘야 한다.
이렇게 원격 저장소에 있는 것을 로컬 저장소로 가져오는 것이 pull이다.
main branch에서 가져올 것이기 때문에 git pull origin main 이라고 치면 된다.
//원격 저장소의 파일 가져오기
$ git pull origin [브랜치 이름]
이걸 하고나면 내 컴퓨터에도 원격 저장소에 있던 README.md 파일이 생긴 것을 볼 수 있다.
(참고로 README가 없는데 pull을 하면 아무것도 가져올 게 없다는 문구가 출력될 것이다)
이렇듯 로컬 저장소가 최신 상태를 유지할 수 있도록, 파일을 깃허브에 올리기 전에 항상 pull을 먼저 해준다.
5. 파일 올리기
이제 드디어 파일을 올리는 단계다.
총 3단계로 이루어지는데, add → commit → push 순서이다.
정확한 비유는 아니지만 쉽게 얘기하자면, add는 슈퍼에서 장바구니("staging area")에 물건을 담는 거고,
commit은 계산대에서 물건을 계산하는 거고, push는 구매한 물건을 들고 집, 즉 원격 저장소로 가는 거다. (그냥 느낌적인 설명이니 참고만 하시길)
5-1. add하기
먼저 add를 해보자. 원격 저장소에 올릴 파일들을 장바구니에 담는 것이다.
추가할 파일의 이름을 아래 명령어 "git add" 뒤에 적어주면 된다.
//파일을 staging area에 추가하기
$ git add [파일/디렉토리 이름]
예를 들어 내 폴더에 파일이 여러 개 있는데, 그 중 myfile.txt라는 파일만 깃허브에 올라가게 하려면 "git add myfile.txt"라고 명령하면 된다.
그런데 대부분의 경우에는 폴더 안에 있는 모든 파일을 올리고 싶을 것이다.
이 경우에는 파일 이름 대신 '.'을 쓰면 된다. 나는 거의 항상 '.'를 사용한다.
//모든 파일을 staging area에 추가하기
$ git add .
참고로, 'git add .'는 정확히 말하면 '모든 파일'이 아니라 '모든 변경된 파일'을 추가하는 것이다.
(변경됐다는 것은, 마지막으로 원격 저장소의 파일을 가져온 시점으로부터 로컬 저장소에서만 작업한 내용을 의미한다)
예를 들어 깃허브와 내 컴퓨터의 저장소에 동일한 2개의 파일이 있는데, 어느날 내 컴퓨터에서 그 중 1개의 파일에서만 뭔가를 수정한 뒤 이를 깃허브에 올리려고 'git add .'를 하면, 변경된 해당 1개 파일만 깃허브에 반영하는 방식으로 동작한다.
※ Tip 5
add를 하기 전에, 현재 로컬 저장소에서 변경된 파일이 뭐가 있는지 확인해보는 것도 좋다.
아래 명령어를 입력해보자.
//현재 브랜치에서 변경된 파일 목록 확인
$ git status
그럼 변경했거나 추가 혹은 삭제한 파일들의 목록이 빨간 글씨로 뜬다.
빨간색으로 뜨는 것은 untracked files, 즉 추적되지 않은 파일이라는 것으로
쉽게 말해 장바구니에 아직 안 담았단 얘기다.
add를 해준 뒤에 다시 status를 확인해보면 추적되었다는 뜻으로 초록색으로 바뀐다.
(참고로 add 했던 파일을 또 변경하면 다시 빨간색으로 바뀐다)
※ Tip 6
만약 add를 했는데 이를 취소,즉 장바구니(staging area)에서 빼내려면?
//add한 파일 모두 취소
$ git rm --cached -r .
//특정 파일만 add 취소
$ git rm --cached [파일]
5-2. commit 하기
원격 저장소에 올릴 파일을 다 추가했다면 이제 commit을 할 차례이다. 앞서 add 한 파일들을 확정하는 것이다.
물건을 담는 단계에서는 물건이 맘에 안들면 다시 진열대에 내려놓으면 되니 비교적 자유로웠다.
하지만 한번 계산대에서 계산을 한 뒤에는, 마음이 바뀌면 번거롭게 결제 취소를 해야 하니 복잡하다.
그러니 commit은 조금 신중할 필요가 있다. (참고로 commit은 '저지르다, 약속하다' 라는 뜻이다)
commit을 할 때는 커밋 메시지도 함께 작성해준다.
//커밋하기
$ git commit -m "commit message"
예시: git commit -m "fix bugs"
깃허브 저장소를 보면 각 파일 옆에 회색으로 적힌 글씨를 볼 수 있는데, 이게 바로 커밋 메시지이다.
커밋 메시지는 이 커밋이 어떤 변경사항을 담고 있는지 알려주기 위한 글로, 잘 작성해주면 나중에 알아보기 좋다.
예를 들어 버그를 고친 뒤에 하는 커밋이라면 git commit -m "버그 수정함" 이런 식으로 작성해주면 된다.
여러 명이 협업하는 프로젝트라면 이 커밋 메시지의 형식을 미리 정해두기도 한다. 이를 테면 기능을 추가했을 땐 "feat: ~", 버그를 수정했을 땐 "fix:~" 이런 식이다. 더 궁금하다면 구글에 'git commit 컨벤션'이라고 검색해보자.
※ Tip 7
커밋을 취소하려면? 이 글을 참고하자. git commit 취소
5-3. push하기
드디어 마지막 단계, 원격 저장소로 파일을 올릴 차례이다.
로컬 저장소에 있는 것을 밀어서, 즉 push 해서 올려준다.
이때 main 브랜치에 올릴 것이니 git push origin main이라고 적어주면 된다.
//로컬 저장소에서 원격 저장소로 올리기
$ git push origin [브랜치 이름]
※ Tip 8
푸시할 때 항상 main 브랜치에 푸시하도록 설정할 수 있다.
푸시를 할 때 이렇게 명령해보자. (-u는 원격의 main브랜치를 'upstream' 브랜치로 설정하는 옵션이다)
$ git push -u origin main
그럼 그 다음부터 푸시할 때는 아래처럼 브랜치 이름을 생략할 수 있다.
//푸시할 때
$ git push
//풀할 때
$ git pull
이제 깃허브 저장소로 가보면, 파일이 업로드 된 것을 볼 수 있다!
6. 다음 작업부터는?
원격 저장소와 로컬 저장소도 있고 연결도 완료됐다.
앞으로 내 컴퓨터에서 작업을 이어 가면서
추가로 생긴 변경사항들을 계속해서 깃허브에 올리게 될 것이다.
이때는 앞서 저장소를 만들거나 연결하는 등의 과정은 필요 없고,
아래 명령어만 순서대로 입력하면 된다. (main 브랜치로 가정)
$ git pull origin main
$ git add .
$ git commit -m "commit message"
$ git push origin main
참고로 첫 번째 줄의 pull은 해당하는 경우에만 하면 된다.
예를 들어 다른 팀원이 main 브랜치에 뭔가 추가해서, 내 컴퓨터의 내용과 차이가 생겼을 수 있다. 이 경우 그 팀원이 만든 변경사항을 내 컴퓨터에도 반영하기 위해 pull을 먼저 해줘야 한다.
(까먹고 안 한 상태로 push해도 pull 하라고 안내가 뜰 것이다)
요약
//저장소 생성 및 연결
$ git init
$ git remote add origin [원격저장소 주소]
$ git branch -m master main
//파일 업로드
$ git pull (또는 git pull origin main)
$ git add .
$ git commit -m "commit message"
$ git push (또는 git push origin main)
//추가적인 명령어
$ git remote -v
$ git remote rm origin
$ git branch
$ git config --global init.defaultBranch [브랜치 이름]
$ git status
$ git rm --cached -r .
$ git push -u origin main
읽어주셔서 감사합니다.