관리 메뉴

SW

[Git] 버전관리 본문

대학교/etc

[Git] 버전관리

SWKo 2020. 2. 3. 18:34

0. Git

  • Git을 사용할 수 있는 여러 프로그램들이 있다.
  • SourceTree, TortoiseGit, Github Desktop 등이 있다. 
  • 그 중에 명령어를 이용해서 Git을 제어하는 방법에 대해서 알아보자.
  • 이 방법에 익숙해지면 복잡한 GUI 없이 간편하게 Git을 다룰 수 있다.
  • 명령어 특성상 한번에 명령해서 자동화가 가능하다.
  • GUI로 제어할 수 없는 서버에서도 제어할 수 있는 유일한 방법이기 때문에 많이 쓰인다.

1. 설치

 

Git

 

git-scm.com


2. 버전관리의 시작

  • 원하는 위치에 폴더를 만든다. 그 폴더로 이동한다.
  • git init : initialize repository
  • git init . 이라는 명령을 통하여 초기화시킨다.
  • 그러면 .git 이라는 디렉토리가 생성된다.
  • .git : git repository

3. 버전 만들기

  • 우리가 하려는 것은 파일의 변경사항들을 버전으로 만들어 관리 하는 것이다.
  • Working tree : 버전으로 만들어지기 전 단계
  • Staging Area : 예를들어 버전으로 만드려고 할 때 파일이 10개 있을 때 2개만 하나의 버전으로 만들고 싶다면 그 2개의 파일만 Staging Area에 올린다. 그 후 Git에게 버전을 만들라고 명령하면 Git 은 Staging Area에 있는 2개의 파일만 Repository에 저장한다.
  • Repository(저장소) : 버전이 저장되어 있는 곳
  • Working tree -> Staging Area -> Repository
  • 정리
    • git init : Initialize repository
    • .git : git repository
    • git status : working tree status
    • git add : add to staging area
    • git commit : create version
    • git log : show version

  • 위 이미지의 설명을 덧붙이자면,
    • nano hello1.txt : 새로운 파일 생성
    • cat hello1.txt : hello1.txt의 내용을 화면에 보여줌
    • git status : Working tree 상태를 보여줌
    • git add hello1.txt : hello1.txt 를 Staging Area에 추가함
    • git commit -m "Message 1" : 버전을 생성하고 "Message 1" 이라는 메세지를 기록함
    • git log : 버전을 보여주며 그 화면에서는 q를 누르고 나옴
  • hello1.txt에 내용을 추가해보겠다.(내용 추가 후 나올 때 Ctrl+x -> y -> Enter 순으로 누르면 됨)

  • 정리
    • Working tree는 수정한 내용이 들어있다. 수정한 내용들 중 commit 하고 싶은 것들을
    • Staging Area 에 올린다. Staging Area에서 commit을 하면 변경사항들이 
    • Repository에 저장된다.

4. 여러개의 파일을 버전으로 만들기

  • hello1.txt 파일을 수정하고 hello2.txt 파일을 하나 더 만들었다.
  • 두개의 파일 모두 stage area위에 있지 않다는 공통점이 있다.
  • 차이점은 다음과 같다. hello1.txt는 한번이라도 버전관리를 한적이 있기 때문에 기억하고 있다. hello2.txt의 존재는 알지 못한다. 백업하고 싶지 않은 파일은 Untracked files로 그냥 둘 수 있다.
  • git log 를 하면 버전별로 어떤 파일이 연관되어 있는지 모른다 -> git log --stat 이라는 명령어를 사용


5. 버전간의 차이점 비교

  • git diff : Show changes
  • hello1.txt에 four 라는 문자를 추가해보면 다음과 같이 변경 목록을 보여준다.
  • git diff는 add하기 전에 실행해야 결과를 볼 수 있다.

  • git reset --hard 전 버전으로 reset 해준다.
  • git log -p (patch) 바뀐 내용까지 보여줌.


6. checkout과 시간여행

  • 이전 버전으로 돌아가고 싶다면 HEAD가 가리키는 것을 바꿔야한다.
  • git log 를 실행하면 다음과 같은 화면이 뜬다.

  • 이전 버전으로 돌아가고 싶다면 을 통해 commit 뒤에 있는 문자열을 복사해서
  • git checkout [문자열]  을 실행하면 된다.

  • git log 을 실행시켜보면 다음과 같이 나타난다.

  • git checkout master 명령어를 실행시키면 가장 최신 상태로 다시 돌아온다.


7. 추가 설명

  • git add . : 현재 디렉토리에 있는 모든 파일을 add 시켜준다. 파일하나하나 지정해줄필요 없다.
  • git commit -am "Message" : add와 commit을 한번에 실시한다. 그러나 어떤 파일에 대해서 최초로 add할 때는 git add명령어를 실시해줘야한다.
  • git commit 을 실행하면 에디터가 나오면서 메세지를 추가하면된다.
  • 에디터를 바꾸고 싶다면 바꿀수 있다. 검색해서 해결 가능. 
  • git config --global core.editor "nano" : nano 로 바꿈
  • git config --global core.editor "vim" : vim 으로 바꿈

8. 삭제 - git reset

  • git reset --hard [버전문자열] : "[버전]을 reset 하겠다"가 아니라 "[버전]으로 reset 하겠다" 이다.

  • --hard 는 가장 강력하게 지우는 것이다. 버전과 수정하던 것까지 다 지우는 것이다.
  • --soft 는 버전은 지우고 수정하던 것은 두는 것이다.

9. 되돌리기 - git revert

  • hello1.txt에 R3을 추가 하고 commit 후 R4 추가 하고 commit 한후 작업해보겠다.

  • R4를 지우고 R3이 되고 싶다면, 
  • git reset [버전]을 하면 [버전]으로 간다.
  • R4를 되돌려야지만 R3로 갈 수 있다. R3로 가려면 R4가 필요하다.
  • git revert [R4의 버전스트링] 을 하면 다시 R3로 다시 돌아온다.
  • 반드시 역순으로 revert 를 해야한다. 그래야 충돌이 일어나지 않는다.
  • git revert 는 그 전버전의 변화만을 되돌리는 것이기 때문이다. 역순을 건너뛰어서 실행시키면 충돌이 일어난다.
  • 결론적으로 reset은 시계를 다시 맞추듯 이력을 그 당시로 되돌리는 것이고, revert는 이전 이력은 그대로 두고, 되돌릴 커밋의 코드만 원복시킨다.
  • 아래 사이트는 reset과 revert의 차이를 잘 나타낸 만화이다.
  • http://www.devpools.kr/2017/01/31/%EA%B0%9C%EB%B0%9C%EB%B0%94%EB%B3%B4%EB%93%A4-1%ED%99%94-git-back-to-the-future/
 

개발바보들 1화 - git "Back to the Future"

  이 내용에 대한 자세한 기술적인 설명이 듣고 싶나요? 연속되는 다음글을 참조하세요    

www.devpools.kr


10. 추가로 알면 좋을 것들

  • 버전관리의 핵심은 비교이다.
  • diff tool 이라는 것을 검색해보면 좋은 도구들이 많다. 차이점을 보다 정교하게 비교할 수 있다.
  • 버전관리를 안할 파일에 대해서는 .gitignore이라는 파일을 만들어서 무시하고 싶은 파일들의 이름을 적으면 된다.
  • branch는 우리의 저장소를 여러가지 상태로 공존할 수 있게 해준다. 예를 들어, 보고서를 작성하고 보고서를 기반으로 각각회사마다 수정해서 제공해야 한다면 저장소 전체를 복사해서 디렉토리를 만든 후 각각 작업하려 할것이다. 그러나 branch 를 사용하면 저장소의 이름을 더럽히지 않고 하나의 저장소에서 다양한 작업을 진행할 수 있다.
  • 각각의 버전을 식별하는 식별자로 commit id 가 사용되는데 이것은 기억하기 쉽지 않다. 그럴때는 tag를 이용하여 이해하기 쉬운 이름을 붙인다.
  • git은 backup도 가능하다. backup 을 할 줄 알면 협업이라는 기능도 알게 될 것이다.

11. Github

'대학교 > etc' 카테고리의 다른 글

VSCode HTML 태그 자동완성이 안될 때  (32) 2020.02.06
스마트폰 앱 만들기  (0) 2020.02.05
웹사이트 만든 후 인터넷에 공개하는 방법  (0) 2020.02.05
Anaconda [zsh]  (0) 2020.02.02
기술 정리  (0) 2020.02.01
Comments