버전관리 git, github

2023. 3. 26. 15:19기타

흔히 우리가 잘못 작성한 것이 있다면. 무엇을 하는가?

바로 Ctrl+Z이다.

우리는 소스코드 작성할 때에도 Ctrl+Z를 종종사용한다.

하지만 이미 저장을 마친 상태에서 아주 오래전의 코드의 상태로 되돌리려면 어떻게 해야하겠는가?

 

그것이 가능하게끔 만들어주는 것이 바로 git이다.

 

git은 소스코드의 버전관리를 해주는 시스템이다.

약간의 메모리만 있다면 컴퓨터의 로컬디스크에 저장도 되며, usb, 외장메모리 같은 데에서도 git을 쓸 수 있다.

 

이와 같이 서버에도 git을 올릴 수 있다. 이 호스팅 사이트 중 대표적인 사이트가 바로 github이다.

물론 git말고도 형상관리를 해주는 SVN이나 github가 아닌 GitLab, BitButcket같은 사이트도 있지만. 가장 친숙하게 사용되는 것을 git과 Github를 사용한다.

 

github 레파지토리를 공개저장소로 하는 프로젝트는 바로 오픈소스가 된다.

 

개발자에게 git과 github는 정말 아름다운 세계일 것이다.

 

이를 사용하는 방법은 생소하고 복잡하다고 느낄 수도 있지만 git과 Github가  하는 일을 개발자가 직접한다고 생각한다면 이에 대한 방법을 익히는 것이 얼마나 간편한 일인지 체감할 수 있을 것이다.

 

지금부터 가입 및 설치 간단한 사용법을 익혀보자.

 

1. Github 가입

2. Git 설치

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp

git-scm.com

 

아래 사이트에서 각자 맞는 환경의 운영체제로 다운을 받고 git installer가 나오면 맞게 체크해주고 설치를 해준다.

이후에 cmd, 혹은 git bash를 열어주고 git 입력.

다음과 같이 나온다면 설치 성공

 

2. github 레파지토리 생성

 

예시)

다음과 같이 해준다.

여기서 public으로 하면 오픈소스처럼 모두에게 공개가 된다.

필자는 개인 공부용이기 때문에 private로 했다.

 

3. local 저장소 만들기

 

원격 레파지토리를 만들었으니 내 local 내 저장소에 있던 걸 github에 push할 것이다.

 

그러기 위해서는 일단 push할 폴더를 정해야한다.

C:\Hackprac

필자가 원하는 local 폴더 위치

이 폴더 위에서 바로 Git Bash를 열어준다.

물론 그냥 cd로 이동해도 된다.

 

cd 원하는 파일위치(절대, 혹은 상대경로)

git init

 

 

폴더를 확인해보면 이 .git이라는 폴더가 생성되었다.

이 폴더가 바로 버전의 정보와 원격 저장소 주소들을 저장하는 폴더이다.

이것을 우리는 local 저장소라고 한다.

 

4. commit

 

예시)

git config --global user.email "sumsum2@naver.com"

git config --global user.name "sumsum2"

 

원격에 올리는 게 아니라면 local 저장소만 사용하기 때문에 아무 email만 넣어도 상관 없지만 우리는 github 계정정보와 동일하게 해야한다.

 

 

 

이건 이전에 만들어 두었던 system hacking 워게임 문제들이다.

당장 마땅히 넣을 파일이 없다면 README.txt로 아무내용 넣어서 만들어도 된다.

 

git add .
git commit -m "system hacing problem"

 

git add로 commit 과정을 수행할 때 추가할 파일을 넣는다.

add 뒤에 파일이름을 넣어 하나하나 지정할 수도 있지만 다 넣고 싶다면 .으로 현재주소에 있는 것들을 다 add시킨다.

이후에 commit을 하면되고 "" 안에 commit 설명을 추가할 수 있다.

 

 

해당 폴더에 webhack을 넣고 the glory라는 txt 파일을 만들어 주고 

git add .
git commit -m "forensic hacking problem"

 

 

다음과 같은 과정을 가졌다.

 

앗!

실수를 했다. webhacking 폴더에 포렌식 문제를 넣은 것이다.

 

이전의 버전으로 되돌려 보자.

 

git log

 

현재의 commit id는 forensic problem이 있는 6d2fd153773f8f70bd0c6462b13ad3dfd62c2f78이고 이를 

hacking problem이 있는 c34552f31112fdda8c6af5374c508756f30d49c9로 이동해야한다.

 

git checkout c34552f31112fdda8c6af5374c508756f30d49c9

 

 

 

id를 풀네임으로 칠 필요도 없다 앞의 7자리 이상만 쳐주면 알아서 인식한다.

되돌아온 것 확인 (파일 3개가 아니라 systemhack 폴더인 이유는 이전에 파일3개를 만든 직후 폴더에 옮기고 커밋을 해서이다.)

 

git log는 하나가 됐다.

 

 

여기서 하나 알아두면 좋은점은

git branch명령어로 현재 브랜치를 확인하면 git detatched...~ 라는 메시지가 뜨는데

이전 분기로 돌아가서 git branch HEAD가 저멀리 떨어져있기 때문이다.

 

checkout master

branch의 master로 이동하면 마지막 branch, 즉 webhacking 폴더가 있었던 잘못된 파일까지 나오기 때문에 이 방법이 아니라.

 

git branch -f master HEAD
 git checkout master

 

해줘야한다.

 

https://git-scm.com/book/ko/v2/Git-%EB%B8%8C%EB%9E%9C%EC%B9%98-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80

 

Git - 브랜치란 무엇인가

3.1 Git 브랜치 - 브랜치란 무엇인가 모든 버전 관리 시스템은 브랜치를 지원한다. 개발을 하다 보면 코드를 여러 개로 복사해야 하는 일이 자주 생긴다. 코드를 통째로 복사하고 나서 원래 코드와

git-scm.com

 

HEAD, master, main 같은 개념이 익숙치 않다면 다음 자료 확인해보기.

 

5. 원격 레파지토리에 commit

 

이전의 만들어둔 레파지토리 정보에 보면 레파지토리 주소가 나온다.

이를 복사

git remote add origin 깃허브 주소
git push origin main

이제 다시 bash 창으로 돌아와서 해당 명령어를 쳐준다.

이 명령어는 로컬 저장소에 원격 저장소 주소를 알려주는 command 이다. 아까 .git 폴더에 원격저장소의 정보같은 것도 저장된다고 스치듯이 이야기를 했었는데 그것이 맞다. 

 

여기서 나는 main이 되는 branch가 master(구버전이라 기본이 아직도 master인듯)의 이름으로 되어있었는데.

 

master의 어감때문인지 2020년 즈음에 main으로 바뀌었다고 한다.

 

https://usingu.co.kr/frontend/git/github-%EA%B8%B0%EB%B3%B8-%EB%B8%8C%EB%9E%9C%EC%B9%98%EB%AA%85-%EB%B3%80%EA%B2%BD-main-master/

 

[Github] 기본 브랜치명 변경 (main, master) - git | UsingU

Github에서 2020년에 리포지토리의 기본 브랜치명을 master에서 main으로 변경하였습니다. Github의 기본 브랜치명을 변경하는 방법과 로컬의 기본 브랜치명을 변경하는 명령을 같이 포스트합니다.

usingu.co.kr

 

이 현상을 겪는 사람은 다음과 같이 설정하면 된다.

 

왜나하면 로컬 저장소의 브랜치의 이름과 원격 저장소의 브랜치이름은 같아야한다.

 

안그러면 push할 때 문제가 생기거나 그 저장소의 이름으로 새로 생기니까 알아두면 좋다.

 

필자는 main도 있는데 master 브랜치가 자꾸 충돌하는게 짜증나서 이번기회에 변경했다.

 

여기서 push가 안 된다면 원격 레파지토리에 있던걸 pull로 당겨오고 push 하면 된다.

git pull origin main
git push origin main

 

(pull 할때 ~~`historian 오류가 난다면 git pull origin main --allow-unrelated-histories) 로 옵션을 더 주면 된다.

 

 

다음과 같이 설정완료.

 

다음  포스팅에서는 branch로 공동작업하는 것에 대해서 써보겠다.

'기타' 카테고리의 다른 글

python .exe 실행파일 만들기  (0) 2023.04.05
cigwin?  (0) 2023.03.09
논문 번역 하기 좋은 번역기 DEEPL  (0) 2023.03.07