[Git, Github] Git&Github사용법

김세림·2024년 5월 2일

특강정리

목록 보기
3/3
post-thumbnail

Git&Github사용법

04.15/ 4.30 강의에서 들은 git, github사용법에 대해서 늦게나마 작성해보려고 한다.
정리도 할겸, 프로젝트를 진행하며 많이 사용할 부분이기에 익숙해지려고!


1. git, github 차이점

나는 github가 git이고 git이 github라고 생각해왔다.. 그냥 다같이 쓸수도 있고 나혼자 쓸수도있는 버전관리를 하는 도구라고 생각해왔었다.
하지만 두가지는 분명히 차이점이 있고 이름자체에서도 그 차이점을 알아볼 수 있었다.
예시를 들어 설명해주셨는데
우리가 과제같은 제출해야하는 레포트를 작성할때 작성을 다 해놓고 아 이부분만 조금 수정해볼까~? 하면서 점점 파일이 많아지고 어디를 고쳤었는지 모를 아이들이 계속 생기게 된다. 이 문제점을 git을 사용해서 코드 변경점 기록을 하게되면 한 파일에서 어느 부분이 수정되었었는지 기록을 차근차근해낼 수 있다.
한줄로 설명하면 git이란
소프트웨어의 변경사항을 체계적으로 추적하고 통제하는 것이 되겠다.
그리고 github 예시로는 내가 과제를 하고있다가 갑자기 블루스크린이 떠버렸다? 하면 처음부터 다시 해야하는 경우가 있을 때를 대비해 우리는 클라우드에 백업을 진행하고 있다. 그리고, 그 백업파일을 공유를 하기위해서는 링크를 주던지 혹은 파일을 다시 압축하여 팀원들과 공유해야한다. 이 두가지를 한번에 할 수 있는 플랫폼이 되겠다. 온라인 백업, 공유, 협업!

2. git 기초 명령어

git명령어는 git bash에서 실행한다.
우선 git을 사용하는 이유는 본인의 git에 작성한 코드들을 올리기 위함이라고 생각이 들어 특강내용순이 올리는 순서대로 설명해보려고한다.

내 컴퓨터의 파일을 깃허브에 올리려면,
① 깃허브에 '원격 저장소'를 만들고,

② 내 컴퓨터(=올리려는 파일이 있는 폴더)에 '로컬 저장소'를 만든 뒤

③ 둘을 연결해서(로컬과 원격저장소)

④ 로컬 저장소의 파일을 원격 저장소로 보내라고 명령하면 된다.


① 원격 저장소를 만드는 방법

git에 접속하여 repository의 new를 눌러 폴더이름을 만들면 끝이다!

만약 저장소에대한 설명파일을 추가하고싶으면 중간에 보이는 Add a README file에 체크를 해주면 된다.

② $ git init

코드 관리를 시작하는 명령어
(initialize / 초기화하다, 초기세팅하다)의 줄임말
프로젝트 시작 전 한번만 입력하면 되고, 정확한 폴더에서 입력해야한다.
(현재 폴더는 pwd로 확인이 가능하다)
이를 통해 로컬 저장소를 만들 수 있다.

③ $ git remote add origin [원격저장소 주소]

아까 원격 저장소를 만들었을 때 Code라고 되어있는 초록색 버튼을 눌러보면 아래에 원격저장소의 주소가 나온다.
상단에 url주소에 마지막에 .git을 붙인것과 동일하다.

로컬 저장소에 원격 저장소가 잘 연결됐는지 (혹은 이미 연결되어 있는 다른 저장소가 있는지) 확인하고 싶다면 아래 코드로 확인이 가능하다.

//연결된 원격 저장소 확인
$ git remote -v

잘 연결 되었다면 원격 저장소의 주소가 출력될 것이다.

또한, 원격 저장소를 잘못 연결했거나, 기존에 연결했던 것을 삭제하고 싶다면

아래 명령어를 통해 원격 저장소와의 연결을 끊을 수 있다.

//기존 원격 저장소와의 연결 삭제
$ git remote rm origin
참고로 rm은 remove이다.

④ pull, push

4-1

README.md파일을 만드는것에 체크를 했다면 해당 파일을 로컬로 불러와야할 것이다.
그때 사용하는 것이 pull이다.

//원격 저장소의 파일 가져오기
$ git pull origin [브랜치 이름]

브랜치 이름이라는 것이 나오는데 우선 만든 이후이기 때문에 main으로 들고오면된다
git pull origin main

파일을 올리는 것은 push인데 이것만 있는것이 아니다.
총 3단계로 올리게 되는데 add -> commit -> push순이다.

4-2 add

add는 저장하기전 저장할 파일을 지정하는 것이며, commit은 실제로 저장하는 명령어이고, push가 최종으로 원격저장소에 저장되는 것이라고 보면된다.

  1. $ git add 파일명
    만약 파일명을 지정하지않고 모든 변경된 파일을 다 올리고싶다면 .을 작성하면 모든 것이 저장된다.

또한, $ git status 명령어를 통해 현재 로컬 저장소에서 변경된 파일이 무엇이 있는지 확인할 수 있다.
코드의 변경은 있지만 저장을 하지않는다면 붉은색으로 나오게 된다.

만약 add를 했는데 이를 취소하고 싶다면 아래 명령어로 취소할 수 있다.

//add한 파일 모두 취소
$ git rm --cached -r .

//특정 파일만 add 취소
$ git rm --cached [파일]

4-3 commit

  1. $ git commit -m "메세지 작성"
    메세지 작성 부분은 내가 무슨 코드를 짰는지를 자세하게 작성하여 올리면 된다.

여기서 잠깐!

Please tell me who you are 에러..?
말 그대로 계정설정을 하지않아 내가 누군지 모르는 상태인것이다.

  1. git config--globaluser.name 유저네임
  2. git config--globaluser.email 유저이메일

를 통해 내가 누군지 지정할 수 있다.

4-4 push

아래 코드와 같이 push할 수 있으며 우리는 main에 올릴것이기 때문에 브랜치 이름에는 main을 작성하면 된다.

//로컬 저장소에서 원격 저장소로 올리기
$ git push origin [브랜치 이름]

또한, 계속 origin 브랜치 이름을 작성하기 귀찮다면 업스트림을 사용해서 뒤에 내용을 생략할 수 있다.

git push-u origin main

이후로는 git push로만 push가 가능해진다.

3. github 협업

organization!

우선 github에서 organization을 새로 만든다.
free로만 사용해도 작업이 가능하기에 free를 선택한 후 organization name을 정하고, 이메일은 본인이 연락받기가 가능한 이메일, my personal account로 나의 개인 계정으로 선택을 하면 된다.
이를 통해 organization을 생성한 다음 기존 레포지토리의 owner를 organization으로 변경하고 싶다면
1. 본인이 변경하고 싶은 레포지토리의 settings로 이동한다.
2. General의 가장 아래로 내려가면 Danger zone이 있는데

그중 transfer ownership을 선택하여 본인이 방금 만든 organization을 선택한 다음 버튼을 누르면 변경에 성공하게 될 것이다.

만약 이전에 만들었던 레포지토리가 아닌 새로운 레포지토리라면 위에서 말했던 레포지토리 만드는 것과 마찬가지로 만들면 된다.

Collaborator 등록

위 지정한 레포지토리의 Settings -> Collaborators -> Add people 클릭하여
팀원들의 username이나 email로 추가할 수 있다.
(초대 수락을 해야한다.)

$ git clone

clone을 통해 코드를 복사해오는 명령어이다.
원하는 폴더를 열어준 다음 아래 명령어를 입력해주면된다.

git clone [github 주소] . 

맨 뒤에 점이 본인이 선택한 폴더의 하위로 들어가게 해주는 것이므로 빼먹지 않고 작성해야한다.

또한 이런식으로 clone을 해온 뒤에 코드를 수정하고 push를 하려할 때 아래와 같은 에러가 뜬다면

먼저 pull을 받고 push를 하라는 뜻이다.
이것은 바로 다른 사람이 이미 git push를 해놓은 상태에서 내가 push를 하려고 하면 발생하는 에러로 pull을 받고 push를 다시하면된다.

하지만 또 pull일 때 아래와 같은 경고문이 뜬다면?

터미널에 git config pull.rebase false 명령어를 입력한 뒤에 다시 pull을 받으면 문제없이 코드를 받을 수 있을 것이다.
만약 vim 에디터가 뜬다면
1. esc
2. :wq 작성 후 enter
를 하면 나올 수 있다.

충돌(Conflict)


이와 같이 뜨는 이유는 같은 파일의 같은 라인의 코드가 변경했을 경우이다.
이럴 때는 head부분과 중간 == 부분, 아래 >>> 부분을 삭제한 다음에 둘줄을 다 살릴거면 둘다 있는 상태로 원하는 코드로 수정하면된다.

이후 다시 add -> commit -> push를 통해 충돌을 해결할 수 있다.

이러한 충돌을 기존에 예방하는 방법이 있다!

branch

복사본~이라고 알고 있으면 좋다.

$ git branch [브랜치이름]

위 명령어를 통해 브랜치를 생성할 수 있으며, 만약 제대로 만들어졌는지 확인하고 싶다면 브랜치 이름을 뺀 git branch 를 통해 볼 수 있다.
초록색 글씨로 나온 부분이 지금 현재 branch이며, 키보드로 q를 눌러 해당 에디터에서 빠져나올 수 있다.

원하는 branch로 이동하기

2가지가 있지만 switch를 추천한다.

$ git switch [브랜치명]

---

$ git checkout [브랜치명]

귀찮게 만들고 이동하고 두가지 명령어를 작성하기 싫다면 하나로 끝낼 수도 있다.

브랜치 생성하고 이동하기

$ git switch -c 브랜치이름

--- 

$ git checkout -b 브랜치 이름

이런식으로 브랜치를 각자 만들어서 본인의 브랜치에서만 작업을 하게된다면 계속 push를 하는 중에 충돌이 나는 경우를 방지할 수 있다.

이후 main에 합치는 방법을 알아보자

합치기 : 1. merge

최종브랜치로 이동한 뒤에 (main / dev)
$ git merge [합칠브랜치이름]을 하면 된다.

합치기 : 2. pull request

github 온라인 저장소에서 바로 합치기!

이 처럼 상단에 compare & pull request라고 뜨게된다. 클릭하여 들어가면

베이스는 내가 default로 설정해놓은 branch로 자동으로 들어가게되고 내가 수정한 코드가 나오게 된다.
create pull request를 통해 pull request를 오픈할 수 있으며,

코멘트를 작성하는 윗부분이 코드 변경점을 확인할수 있는 코드리뷰 부분이다.
또한, 코드리뷰를 한 이후 합치고 싶다면
아래 merge버튼을 통해 해당 pull request를 close할 수 있으며

open이라고 되어있던 부분도 mergede된 것을 확인 할 수 있다.

합칠때 Main에 해야할까?

main이라는 뜻은 진짜 이 프로젝트의 Main 주요프로젝트부분이 될것이기 때문에 사실은 main으로 잘 합치지는 않는다.
배포용을 잘 못 건들였다가 큰일날 수도 있기 때문이다.
그렇기 때문에 develop용 브랜치를 만들게 되는데 그게 위에서 잠깐말한 dev 브랜치이다.
그렇기 때문에 Main은 진짜 찐! 최종과 같은 느낌이고 각자 다른 branch에서 만들다가 dev브랜치에 합치고 그 다음에 정기적으로 하는 merge때 dev -> main으로 가는 것이라고 생각하면 된다.


전체정리

실제 협업을 하게된다면 github에서 팀장과 팀원의 할일을 알아보자.

팀장

  1. 초기코드 작성 및 github업로드
  • 폴더 생성 및 초기코드 작성
  • git init, add, commit
  • github 레포지토리 생성 및 업로드(push)
  1. dev(develop) 브랜치 생성 및 dev브랜치에도 push

  2. dev 브랜치를 default로 설정

  • 이것은 해당 레포지토리의 settings-General의 중간에 Default branch가 있다. 이부분을 수정하면된다.
  1. 팀원들을 collaborator로 등록

팀원

  1. git clone하여 해당 파일 로컬에 복사해오기

기능 개발 시작

이부분은 팀장, 팀원 할 것 없이 해야하는 작업이다.
1. 기능 브랜치 생성 및 기능 개발

  1. pull request 생성

  2. 코드 작성자 : 리뷰요청

  3. 코드 리뷰어 : 리뷰하기

  4. 합치기 전 내 로컬에서 충돌 해결 및 테스트

  • 기능 브랜치에서 git pull origin dev를 하여 충돌이 나지않는지 테스트
  1. merge
  • 수정사항이 있는 경우 add -> commit -> push를 하여 pull request가 open되어있을 때 수정한 다음 merge버튼을 클릭하면된다.

이렇게 길고도 길었던 git, github의 여정을 떠나보았다..
정리하는 중에 내가 팀장이 되어 해당 작업을 해보았는데 익숙치않아 힘들었다.. 그과정은 05.02 TIL을 보면 더 자세한 나의 궁시렁을 볼 수 있을 것이다.. 😭

0개의 댓글