깃/깃허브 기초 사용법
코딩을 하다보면 버전 관리를 하게된다.
요즘에 모두 git이라는 프로그램을 쓴다.
linux를 만든 리누스토발즈가 만든 프로그램이다.
git은 https://git-scm.com/ 에서 다운받을 수 있다.
자신의 OS에 맞는 것을 다운받아서 설치하면 된다.
git을 설치하면 이제 자신의 컴퓨터에서 버전관리를 할 수 있게 된 것이다.
여기서 git과 github를 구분해서 알고 있어야 한다.
git 자신의 컴퓨터(local이라고 부른다)에서 버전을 관리하는 시스템이다.
github는 원격저장소다. 즉 내 컴퓨터에서 작업한 것을 인터넷에 올려서 관리할 수 있게 한 것이다. 이게 필요한 이유는 다른 사람과 협업을 하기 위해서다. 물론 혼자서 작업할 때도 사무실 컴퓨터와 집 컴퓨터 두대의 컴퓨터를 쓴다면 원격저장소가 있으면 편할 것이다.
git을 설치했다면 제일 먼저해야 하는 것은
코드가 있는 디렉토리에서 git init 명령을 내리는 것이다.
현재 디렉토리를 git으로 관리하겠다고 알려주는 의미다.
.git디렉토리가 생긴다(숨김이 되어 있어서 보이지 않는다)
git 초기화
git init
이제 파일을 편집했다면 스테이징(staging) 할 차례다. 이렇게 하면 git은 변경사항을 체크한다. .은 모든 파일을 스테이징 한다는 뜻이다.
staging
git add .
이제 commit을 할 차례다. 커밋은 하나의 버전을 만든다고 생각하면 된다. 버전이니까 이름을 줄 수 있다. -m 옵션은 직접 커밋메시지를 입력하겠다는 뜻이다. 뒤따라 오는 " " 안에 버전 이름에 해당하는 메시지를 입력한다. 메시지는 변경사항을 설명하는 문구를 넣으면 된다.
commit
git commit -m "modify cal function"
이제 변경사항을 깃허브에 올려보자.
올리기 전에 github에 repository를 만들어야 한다. repository는 그냥 저장소라고 생각하면 된다. github에 접속해서 새로운 repository를 만든다. repository 페이지에서 new버튼을 누르면 된다.
repository name을 입력하고 공개와 비공개 중에 선택한다.
public은 공개 private는 비공개다. public을 선택하면 아무나 볼 수 있다.
repository를 만들면 아래와 같이 두가지 방법중 하나를 택해서 로컬(내 컴퓨터)과 원격저장소를 연결할 수 있다.
…or create a new repository on the command line
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:dolljong/test.git
git push -u origin main
…or push an existing repository from the command line
git remote add origin git@github.com:dolljong/test.git
git branch -M main
git push -u origin main
첫번째 command line 명령들은 내 컴퓨터에서 git init도 안하고 아무것도 안했을 때 적용한다. 즉 원격저장소에서 repository를 먼저 만들고 내 컴에서 새 repository를 만들었을 때 적용하는 명령들이다. 간단하게 설명하면 echo 명령으로 readme.md파일을 만든다. 그리고 git init로 초기화 한다. git add readme.md로 readme.md 파일을 스테이징한다. git commit -m "first commit"으로 커밋한다. 그리고 git branch -M main는 main이라는 브랜치를 만드다.
그 다음이 내 컴과 깃허브를 연결하는 명령이다. dolljong은 깃허브 아이디, test가 repository이름이다.
git@github.com:dolljong/test.git
git remote add origin git@github.com:dolljong/test.git
다음 명령이 git push -u origin main. 내 컴의 내용을 깃허브에 올리는(push) 명령이다. origin은 통상 원격저장소를 뜻한다고 생각하면 된다. 처음 push할 때 만 -u origin main을 붙여주고 다음부터는 git push만으로 push할 수 있다.
명령은 아래와 같이 간단하다. git-github에서 push는 원격저장소에 올린다는 뜻이고, pull은 원격저장소에서 local저장소로 가져온다는 뜻이다.
git push
git push
두번 째 방법은 내 컴에 이미 있는 repository와 연결하는 명령이다. git init등이 빠져 있다. git remote ~ 명령으로 시작한다. 내용은 같다.
git을 이용할 때 유용한 것이 바로 branch다.
코딩 작업을 할 때 수정을 시도하다가 틀릴 수도 있기 때문에 다른 파일로 복사를 한 다음 수정한 경험이 있을 것이다. branch가 바로 다른 파일(또는 폴더)로 복사를 하는 개념으로 생각하면 된다.
git은 브랜치를 만들고 왔다 갔다 할 수 있다. 그런데 우리가 파일이나 폴더를 복사해서 수정할 때는 다른이름으로 복사를 한다. 그러면 두개가 동시에 존재한다. 원본과 복사본. 그러나 git 시스템에서는 그런 방식이 아니다. 두개다 보이는 게 아니라 한개만 보인다. git 시스템이 그것을 관리해준다. 예를 들어 내가 calc.py를 만들고 있다고 하면 아마도 main이라는 브랜치에서 작업을 하고 있을 것이다. 그래서 calc.py를 수정을 하고 싶은데 망가질까봐 겁이 나서 따로 복사해서 작업한다. calc1.py 이런 이름으로 복사해서 작업한다. 하지만 git에서는 branch를 만든다.
아래와 같은 명령으로 test-branch를 만들 수 있다.
git branch -b test-branch
이 명령은 test-branch를 만들고 그 branch로 이동하라는 뜻이다. 말하자면 폴더를 복사하고 거기로 이동한 것과 마찬가지다. 그런데 재미있는 건 파일이름이나 이런 건 모두 똑같다. 그냥 branch상태만 바뀌는 것이다. 즉 내가 test-branch상태에서 calc.py를 수정하면 main branch상태의 calc.py와 이름은 같지만 내용이 다른 calc.py가 생기는 것이고 그 관리는 git이 알아서 해주는 것이다.
이렇게 테스트용 브랜치를 만들고 이동했다면 원하는 대로 수정을 한다. 수정이 완료되었고 문제가 없다면 main브랜치에서 merge를 해주면 된다. merge라는 것은 합친다는 뜻이다.
합치기 전에 test-branch에서 add와 commit을 해줘야 한다. git에서 커밋의 의미는 지금까지 작업한걸 한데 묶어서 정리한다는 개념을 가지면 된다. 이걸 안하면 git은 뭐가 바뀌었는지 모른다. 그래서 merge를 하기 전에도 commit을 해야 하는 것이다. commit은 자주하는 것이 좋다.
git add .
git commit -m "테스트용 변경"
그런 다음 main브랜치로 이동한다. git checkout 명령을 이용해서 main으로 이동한다.
git checkout main
이제 머지를 하면 된다. git merge 명령을 이용한다. main브랜치에서 test-branch를 합친다는 뜻이다.
git merge test-branch
이제 test-branch가 필요 없으니 지워준다.
git branch -d test-branch
내가 지금 어느 브랜치에 있는 지 아는 것이 중요하다. git을 설치할 때 같이 설치되는 git bash를 사용하면 프롬프트 맨 뒤에 branch명이 나온다. ( )안의 test-branch가 현재 위치하고 있는 브랜치 이름이다.
PCuser@pc MINGW64 ~/dev/calc (test-branch)
하지만 anaconda prompt나 cmd를 사용하는 경우 branch이름이 나오지 않는다.
git status명령을 내리면 브랜치를 확인할 수 있다. git status 명령으로 브랜치 상태 외에 다양한 정보들을 알 수 있다.
(base) C:\Users\PCuser\dev\clac>git status
On branch test-branch
이번 포스트에서는 git / github의 기초적인 사용법에 대해서 알아봤다.
git은 생각보다 엄청나게 복잡하다.
하지만 처음부터 복잡한 것을 모두 배우려면 힘만 들 것 같다. 기초적인 부분만으로 사용하다가 나중에 다른 사람과 협업을 하면서 다른 기능들도 차근차근 배워나가면 되지 않을까 싶다. -끝-