2016년 5월 23일 월요일

Git and GitHub

Git & GitHub

Git 공식사이트: https://git-scm.com/


Git 이란?
버전 관리 시스템
사용언어: UNIX

다운로드 & 설치
Git 공식사이트에서 다운로드 한 후 설치하고,
Git bash 로 들어가서,git --version 라고 치면, 해당 git의 버젼정보가 나온다

Git 사용하기전 기본으로 알아야 할 사항들
1. git의 구조 - 로컬영역
-작업 영역 (Working directory) - 실제 작업하는 곳
-준비 영역 (staging environment / index) - git이 지켜보도록 작업 영역의 파일들을 집어넣는곳
-최종 버전의 저장소(commit / HEAD) - 모든것이 완벽히 끝났을때 최종 버전을 만드는 곳

2. git의 구조 - 원격 서버
- 브랜치 (Branch)
  - master: 저장소의 기본 브랜치
  - 사용자 지정 브랜치: 여러개를 만들어서, 개발 후 나중에 master에 병합
    (기본 브랜치의 내용을 복사해와서 개별적으로 개발)

< 사용방법 - 로컬영역: 나만 볼수 있음>
-설치한 git bash 실행 > git을 적용한 폴더로 이동 (cd ~/디렉토리)

[1] 새 프로젝트에 Git 적용하기

0. 폴더 만들기 (pc에 새폴더 만들기)
    실습: 바탕화면에 폴더명 project으로 새폴더 생성함.

1. 저장소 만들기 (Initializing)
  < 명령어: git init >
    실습: git bash에서 새폴더로 이동해서 거기서 명령어씀
    cd ~/Desktop/project (엔터) > git init (엔터)
    -> desktop/project/.git 폴더가 생성됨

2. 준비영역에 파일 추가하기 (adding)
  < 명령어: git add 파일명>
    실습: project 폴더안에 index.html 파일을 저장후
    git bash에서 git add index.html (혹은 git add . 모든 파일 추가)
    -> git add명령어로 작업영역의 파일을 준비영영으로 추가해주므로써,
       git이 index.html 을 추적하기 시작하므로 모든 변화를 감지하게 됨.
 
3. 최종 확정짓기 (committing)
  < 명령어: git commit -m "이 최종 버전에 대한 메세지" >
    실습: git commit -m "add index.html"
    -> git commit을 통해, 준비 영역의 파일을 최종 버전으로 만들어 줌

  < 명령어: git log >
    -> 마지막으로 commit한 정보를 보여줌

*상태확인하기 (status)
  <명령어: git status>
  - 파일이 수정되었을 경우 : modified: 파일명 이라고 메세지가 뜸


--------------------------------------------------------------------
[2] 준비 영역에서 파일 수정

  준비영역에서 git이 추적 중인 파일을 수정 했을 때,
    실습: index.html 파일에 <h1>수정함</h1> 을 추가한다.

  경우1. 이 수정한 파일을 수정 전 상태로 되돌리겠다.
  <명령어 git checkout 파일명>
    실습: git bash 에서 git checkout index.html 치고 파일로 돌아가보면,
    수정하기전으로 돌아가 있음을 확인 가능 (결과: <h1>수정함</h1>이 없음)


  경우2. 수정한 사항을 그대로 준비영역에 저장하겠다.
  <명령어 git add 파일명 >
    실습: git add index.html (or git add .) 라고 치고 git status 를 해보면,
    준비 영역에 수정된 index.html이 추가 되어 commit 대기 중인것을 알수 있다.
    (결과: <h1>수정함</h1> 이 있음)

  경우3. 수정된 파일이 준비영역에 들어있지만, (수정1)
  그 파일을 재 수정하면 이 파일은 작업영역에 있는데 (수정2)
  수정2를 준비영역에 있는 수정1에 덮어 씌우고 싶은경우
  <명령어 git reset HEAD 파일명>
    실습: 경우2를 마친후(수정1), <h1>재수정함</h1>으로 변경하고 저장(수정2)
    git bash에서 git reset HEAD index.html을 한다
    (결과: 파일내용엔 <h1>재수정함</h1>이 있고,
    git status 해보면 이 파일이 준비영역에서 commit 대기중인것을 확인가능)
    -> 수정함이 사라지고 재수정함이 존재함

<checkout vs. git reset HEAD 파일명 차이>
checkout은 준비영역에서 그대로이고,
reset Head는 준비영역에서 빠짐 (upstaging)

<준비 영역에서의 모든 수정사항을 한번에 커밋하기>
git add --all


--------------------------------------------------------------------
[3] 파일 삭제하기

  준비영역에서 git이 추적 중인 파일을 삭제 했을 때,
    실습: index.html 파일을 삭제한다.

  방법1. <명령어 git rm 파일명> - 방법2를 한번에 적용함.
    실습: git rm index.html
    (결과: index.html 파일이 폴더에서 삭제되고, 준비영역에서 삭제된것을 기록됨)

  방법2. 폴더에서 delete 키로 index.html을 삭제한 후 >
  git add index.html 을 해줌으로써 준비영역에 삭제 내용을 기록함.

삭제된 파일 되돌리기
  방법 1. <명령어 git checkout 파일명>
    실습: 폴더에서 직접 파일을 삭제한 후
    git bash에서 git status 치면 deleted: 파일명이 나타나고
    git checkout index.html 치면 삭제된 파일이 다시 폴더에 생성됨을 확인 가능

  방법 2. <명령어: git reset HEAD 파일명>
    실습: git bash에서 git rm index.html 로 파일을 삭제후,
    git checkout index.html 로 파일을 재 생성되고 준비영역에서도 추적함

--------------------------------------------------------------------
[4] 원격 서버로 최종 버전의 저장소(commit / HEAD)의 내용을 전송하기
  <명령어: git push origin master or 다른 브랜치명>

다른 원격 서버로 내용 전송하기
<명령어: git remote add origin 원격 서버 주소>



< 사용방법 - 원격 서버 영역: 공동 작업구역으로 여러사람이 볼수 있음>
-브랜치 사용방법
[1] 사용자 브랜치 생성하기
  <명령어: git branch 브랜치명>: 현위치에서 새로운 브랜치 생성하기 (이동은 안함)
  <명령어: git checkout -b 브랜치명> : 브랜치 생성과 동시에 이동하기

[참고]로컬 저장소의 master 브랜치에서 버전(commit한것들)중 하나를 브랜치로 만들기
  방법: 마스터에서 git log 로 버전정보를 확인한다 (이제껏 commit한 내용들)
  그 중 원하는 버전으로 이동하기 위하여, commit 다음의 해쉬태그(긴 이름)을 복사한후
  git checkout 복사한 이름 > 엔터를 치면,
  HEAD is now at 복사한 이름이 나오고 이동된것을 확인 할 수 있다.
  에디터에서 파일을 열어보면, 내용이 바뀌어있는것을 확인가능하고
  수정과 add commit 모두 할 수 있고 여기에서 또 새로운 버전이 생성될 수 있다.
  but, git log를 쳐보면 이 버전에 해당하는 HEAD내용만 나오고
  이는 마스터에서는 보이지 않는다.
  이 버전에 긴 이름대신 브랜치명을 주어 브랜치로 만든다.
  <명령어: git branch 원하는 이름 긴이름>
  원래 최신 버전으로 돌아가기 위해서는 git checkout master이라고 쳐주면 된다.


[2] 브랜치 이름 변경하기
  < 명령어: git branch -m 변경할브랜치명 새로운브랜치명>

[3] 원하는 브랜치로 이동하기
  <명령어: git checkout 브랜치명>

[4] 브랜치 삭제하기
  < 명령어: git branch -d 브랜치명>

[5] 브랜치 위치 확인하기
  <명령어: git branch >
  -> *붙어 있는 곳이 현재위치


[6] 브랜치 합치기
  <명령어: git merge 마스터에 덮어씌울 브랜치명>
  ->마스터에서 이 명령어 실행



댓글 없음:

댓글 쓰기