본문 바로가기

개발 이야기/Git

Git 요약 2. Git 저장소(Repository) 만들기, 수정하고 저장소에 저장하기

반응형

 Git 저장소 만들기

 

원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소

로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소

 

내 컴퓨터에 로컬 저장소를 만드는 방법

  1. 아예 저장소를 새로 만들거나,
    • mkdir <new folder name> 폴더 생성
    • cd <new folder name> 프로젝트 디렉토리로 들어갑니다. 
    • git init 새 repository 생성. git 폴더를 만듦.
  2. 이미 만들어져 있는 원격 저장소를 로컬 저장소로 복사
    • git clone <url>
      • ex) git clone https://github.com/libgit/libgit2
        • libgit2라는 이름의 "로컬 폴더" 생성 후 그 안에 내용을 복제.
        • 이미 같은 이름의 폴더가 있으면 오류 발생.
    • git clone <url>  <name>
      • url 폴더 이름이 아닌 다른 이름으로 "로컬 폴더" 생성
      • ex) git clone https://github.com/libgit/libgit2 git_test
      • libgit2가 아닌 git_test 폴더가 생상되고 그 안에 내용이 복제된다.
    • git clone <url> -o <name>
      • origin이 아닌 <name>으로 "리모트 이름"을 생성
  • Subversion과 다른 가장 큰 차이점은 서버에 있는 거의 모든 데이터를 복사한다는 것.
    • 프로젝트 히스토리를 전부 받아온다.
    • 실제로 서버의 디스크가 망가져도 클라이언트 저장소 중에서 아무거나 하나 가져다가 복구하면 된다.
    • (서버에만 적용했던 설정은 복구하지 못하지만 모든 데이터는 복구된다.)
  • url 프로토콜
    • https:// 
    • git://
    • SSH (ex. user@server:path/to/repo.git)
 

수정하고 저장소에 저장하기

  • Tracked vs Untracked Files
    • Tracked 이미 스냅샷에 포함돼 있던 파일
      • Unmodified ex)clone한 직후 파일의 상태는 tracked이면서 unmodified
      • Modified
      • Staged
    • 나머지 파일은 모두 Untracked 파일
      • 워킹 디렉토리에 있는 파일 중 스냅샷에도 Staging Area에도 포함되지 않은 파일
    • 어떤 파일을 수정하면 Git은 그 파일을 Modified 상태로 인식
    • 실제로 커밋을 하기 위해서는 이 수정한 파일을 Staged 상태로 만들고,
    • Staged 상태의 파일을 커밋
    • 이런 라이프사이클을 계속 반복~
  • 연습 파일 만들기
    • vim editor 설치 필요
    • vim <file> -> 파일을 생성, 확장자 상관 없음
      • vim f1.txt
      • vim README
      • vim CONTRIBUTING.md  
      • i -> 내용을 입력(Insert)
      • esc -> 편집 모드 종료
      • :wq -> 저장하고 종료(write and quit)
    • 파일 목록 확인 
      • ls
      • ls -l
      • ls -al
    • echo 'new content' > file -> 파일에 내용 채우기, 파일 없으면 만듦.
    • echo 'content' >> file -> 파일에 내용 추가하기, 파일 없으면 만듦.
    • 파일 내용 확인 -> cat <file>
    • 화면 지우기 clear
  • git status -> 프로젝트 폴더의 상태를 확인
  • git add <file>
    • 1. 파일을 새로 추적할 때
    • 2. 수정한 파일을 Staged 상태로 만들 때
    • 3. Merge할 때 충돌난 상태의 파일을 Resolve 상태로 만들 때
    • $ git add *.c
    • $ git add LICENSE
    • “Changes to be committed” 에 들어 있는 파일은 Staged 상태
    • ! 한 파일이 Staged 상태이면서 동시에 Unstaged 상태일 수 있다. 
      • git add 명령을 실행한 후에 또 파일을 수정하면 git add 명령을 다시 실행해서 최신 버전을 Staged 상태로 만들어야한다.
  • git diff -> Staged와 Unstaged 상태의 변경 내용을 보기. staging하기 전 점검
  • git diff --staged or --cached -> Commit한 것과 Staged 된 것 비교. commit 전 점검
  • git diff 'commitID1'..'commitID2' -> commit 사이 비교
  • 외부 diff tool 사용하기
    • git difftool --tool=winmerge or vimdiff -> Staged와 Unstaged 상태의 변경 내용을 보기.
    • git difftool --cached --tool=winmerge -> Commit한 것과 Staged 된 것 비교.
    • git difftool --tool-help -> 도움말 보기
  • git commit -> 파일 및 폴더의 추가/변경 사항을 로컬 저장소에 기록
  • 에디터에 commit message 필수 입력
    • 1번째 줄 : 변경 내용 요약
    • 2번째 줄 : 빈 칸
    • 3번째 줄 : 변경한 이유
  • git commit -m 'initial project version' -> 에디터 열지 않고 commit message 입력
  • git commit -a -m 'added new benchmarks'
    • Tracked 상태의 파일(이전에 한번이라도 add된 파일)을 자동으로 Staging Area에 넣는다.
  • git rm <file> -> Staging Area에서 파일 삭제, 하드디스크에서도 삭제
    • 그냥 Working Directory에서 지우면 Unstaged됨. 파일이 지워졌다는 내용을 다시 stage하고 commit해야 함.
    • git rm으로 하면 지웠다는 내용이 Staged 됨. commit만 하면 됨.
    • $ git rm log/\*.log -> log/ 디렉토리에 있는 .log 파일을 모두 삭제 (file-glob 패턴)
    • $ git rm \*~ -> ~ 로 끝나는 파일을 모두 삭제
    • 이미 파일을 수정했거나 Staging Area에 추가했다면 -f 옵션을 주어 강제로 삭제
  • git rm --cached <file> --> 하드디스크에 파일 남기고 Git 추적만 안하도록
  • 프로젝트 폴더를 아예 삭제하려면? -> Working Tree에서 프로젝트 폴더를 통채로 삭제. gir rm은 git 디렉토리가 있는 폴더에서만 동작하므로 프로젝트 폴더내의 파일/디렉토리만 지울 수 있다.
  • git mv file_from file_to 파일이름을 변경
반응형