본문 바로가기
ETC

Git / Github

by softserve 2021. 5. 17.
반응형

Git은 소프트웨어 개발 과정에서 사용하는 버전 관리 시스템이며,

 

Github은 git이라는 툴을 이용한 웹호스팅 서비스이다.

 

즉, github는 일종의 창고이다.

 

개발자는 github로부터 고유의 공간, 저장소(Repository)를 대여할 수 있다.

 

그리고 git이라는 트럭을 이용하여 자신이 만든 소스코드를 repository 에 적재한다.

 

동시다발적으로 여러 명의 개발자들이 이 한 repository 에 있는 프로그램을 수정, 개발할 수 있다.

 

누군가가 수정한 부분이 문제가 되더라도 변경이력이 남기 때문에 이를 되돌리거나 고칠 수 있다.

 

1. ubuntu desktop에 git 설치하기. 및 github에 가입한 후 새로운 repository 생성하기.

$ sudo apt-get install git


2. 자신의 repository를 컴퓨터에 내려받는다.

$ git clone https://github.com/userid/name.git

 

3. repository로 이동하여 새로운 파일을 생성한다.

$ vi index.html

** vi 편집기 사용법

i를 누르면 insert 모드로 변경되며 문서를 편집할 수 있다.

esc를 누르면 다시 명령 모드로 돌아갈 수 있고 q+enter를 입력하면 종료된다.

( :q! 변경을 무시하고 강제종료 / :wq 저장후 종료 )

 

4. 작업이 끝나면 add를 수행한다.

$ git add index.html

add는 작업 내역을 스테이징 영역에 추가하는 것으로 commit에 앞서 수행된다.

[OPTION] add --all : 디렉토리내 모든 파일을 추가

 

5. repository에 작업내역을 저장하기 위해서 commit을 수행한다.

$ git commit -m "fix the problem"

[OPTION] -m 작업내역을 입력

             -am 변경된 모든 파일을 add함과 동시에 commit

 

** Please tell me who you are. 네가 누구냐 라고 묻는다면 이메일과 이름을 입력해준다.
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

 

2021.8.13 부터 비밀번호 인증 대신 personal access token을 사용하라고 한다.

https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token

 

6. 상태 확인

$ git status

hello.html 파일이 수정되었음을 알려준다.

 

7. 로컬 저장소의 내용을 원격 저장소에 반영

$ git push

github에 내 컴퓨터에 저장된 repository의 내용을 업로드한다.

8. 원격저장소에 있는 최신 프로그램을 가져오기

$ git pull

7과 반대로 github의 내용을 내 컴퓨터로 가져온다.

 

9. 기타 유용한 기능들

 

  • 가지치기

개발 중 새로운 기능을 추가할 필요가 있을 때 branch 를 이용하면 편리하다.

 

branch는 서로 영향을 미치지 않기 때문에 새로운 기능을 추가하여 테스트해 본 뒤 원래의 프로그램에 병합하는 식으로 개발할 수 있다.

 

$ git branch

현재 branch의 상태를 확인할 수 있다.

최초에는 master branch 만이 존재한다.

$ git checkout -b newbranch

 

head는 현재 작업중인 브랜치를 가리키고 있다.

checkout은 head를 변경하는 명령어인데,

위와 같이 입력할 경우 브랜치가 존재하지 않아 새로 생성된다.

이 상태에서 작업을 마친 후 commit을 수행한다.

$ git checkout master

다시 master branch로 이동한다.

$ git merge newbranch

지금 head가 가리키고 있는 master branch에 newbranch의 내용을 병합한다.

 

** 이 때 master와 newbranch가 동일한 코드를 수정하였을 경우 merge conflict 오류가 발생한다.

 

예를 들어, welcome 이라는 문장을 newbranch에서 Welcome으로 수정하고

 

master에서는 welcome!으로 변경한 경우 merge를 할 수 없다.

 

파일을 다시 열어보면 다음과 같이 표시되는데,

 

<<<<<<< HEAD 
                <h1> Welcome </h1> <!--내가 수정한 버전-->
=======  <!--경계선-->
                <h1> welcome! </h1>  <!--충돌된 버전-->
>>>>>>> 9102c38f2c2ef637ecbdd940c1d4fc2cf358ec91 <!--해시값-->

아래와 같이 수정하고

<h1> Welcome! </h1>

다시 commit을 하면 된다.

 

  • 로그
$ git log
    지금까지 commit 한 내역을 확인할 수 있다.
  • 리셋

git log를 통해 commit의 해시값을 알 수가 있는데,

① $ git reset --hard 39ea5f3.....
② $ git reset --hard origin/master

위 ①과 같이 commit의 해시값을 입력할 경우 해당 commit으로 돌아가게 되며

그 이후의 기록은 모두 사라진다. (--hard)

 

②의 경우 origin/master는 원격 저장소의 master branch를 의미하며,

지역저장소에서의 작업내역을 모두 초기화하게 된다.

 

  • 다른 원격저장소의 복사본 만들기 : fork

 

  • github pages

① username.github.io 로 새 repository를 만들고, 

② index.html 파일을 생성한 후

③ github repository - setting - pages 에서 username.github.io 를 클릭하면 자기만의 웹사이트가 만들어진다.

반응형

댓글