Git

Local repositorysitory

  • working directory : 로컬에서 실제 작업하는 공간
    • git add
    • (gitignore : stage영역에 올라가지 않도록 자동으로 관리)
  • staging area (index) : 변경 이력을 임시 저장하는 공간 (일종의 준비구역, 대기공간 ), 히스토리에 남길 코멘트 작성
    • git commit (하나의 작업 단위마다 하는 것이 좋음)
  • .git directory (repositorysitory) : 변경 이력을 저장한 저장소, 여기 부터는 무조건 히스토리가 남음 (수정한 내용도 히스토리가 남음)
    • git push > Remote repositorysitory

Remote repositorysitory

Github는 Git이라는 (버전 관리)소프트웨어를 사용하기 위한 Remote repository를 제공하는 업체

Local repository와 Remote repository를 분리한 이유

  1. 오프라인에서도 버전관리 가능
  2. repository 둘중 하나가 망가져도 유지가능

staging area가 필요한 이유

  • 원하는 파일만 히스토리를 남기기 위해 (목적이 다른 일을 병렬적으로 수행할 경우 홀딩된 작업은 두고 진행한 작업만 commit)
  • 의존성 파일을 제외하고 히스토리를 남기기 위해 (cache/*, source/*, 등)

git 구조

  • pull : Remote repository > working directory
  • fetch (Remote repository > Local repository) + merge (Local repository > working directory) = pull

내 하드디스크 세상 밖으로 소통하는 방법은 ‘fetch’, ‘pull’, ‘push’밖에 없다.

source tree 설치 및 실습

working directory

  • 로컬에 git > first_git 폴더 생성
  • first.txt 파일 생성 (띄어쓰기, 한글, 특수문자 사용하지 않고 파일 생성)
  • new repositorysitory > create local repositorysitory > destination path에 만든 폴더 경로(git > first_git) 설정 > create

작업 > staging

  • first.txt 파일 작성
  • workspace > staged files 로 이동
  • message 작성
  • commit (실행 후 절대 되돌릴 수 없으므로 주의!)

Local repository에 Remote repository 연결

  • github 로그인 > new repositorysitory > repositorysitory name 입력 후 create repositorysitory
  • source tree에서 repositorysitory > settings > remotes > remote name/url 입력
  • push

origin/master

  • 원격 저장소에 제공되는 기본 이름이 origin
  • 저장소가 처음 만들어지면서 생기는 브렌치가 origin/master
  • 큰론할 때 받게 될 커밋의 위치가 origin/HEAD
  • 로컬 저장소의 기본 브렌치인 master

reverse commit

특정 commit만 취소

commit reset

과거의 특정 상태로 돌아가는 것이다. reset 명령은 가급적 사용하지 않는 것이 좋다. 충분히 공부 후 사용한다.

  • soft : local repository만
  • mixed : stage area까지
  • hard : working directory 파일까지 특정시점으로 돌아감 (흔적도 없이 사라짐=복구불가능상태가 됨)

이미 Remote repository에 push 한 상태에서 reset하면 confilct이 발생한다. 옵션을 주어 강제로 push해야 한다.

conflict

confilct이 발생하지 않을 수는 없다. 발생했을 때, 해결하는 방법을 익히는 것이 중요하다. conflict 발생이 발생한 소스코드는 다음과 같은 구조로 되어 있다.

<<<<<<< HEAD
충돌테스트
=======

테스트를 무사히 마쳤습니다.
>>>>>>> hotdog

원하는 부분만 남겨 저장한다. 그 후 다시 commit 한다.

branch

git을 생성하면, master를 기본생성해준다.

  • Branch > New Branch 이름 입력/ checkout new branch(체크) > 브랜치를 새로 만들고 그 브랜치에서 작업하겠다는 의미
  • 사이드 바의 Branches에서 브랜치 이름을 더블클릭하면 브랜치 변경 가능하다. 그 후 파일을 직접 열어보면 작업 상태를 확인할 수 있다.

내 repositorysitory의 수정권한을 다른 사람에게 주어 공동으로 작업할 수 있다.

  • https://github.com/pinstinct/first_git/settings/collaboration

다른 사람의 repositorysitory에서 작업할 때는

  • 클론 : New repositorysitory > Clone from URL

과제

  • 다른 사람과 conflict을 발생시키고 해결하기
  • 자심이 관심있는 분야의 내용을 정리할 저장소 만들기 > 자동차, 음식, 맛집, …
    • readme.md 파일을 생성하여 관심있는 분야에 대해 markdown 문법으로 정리
    • 다른 사람 저장소 내용에 pull request 하기