[git] 지옥에서 온 GIT – two

git config
협업을 위해 (전역)사용자명/이메일 구성할 때 사용한다.
git config – -global user.name “Your name”
git config – -global user.email “Your email address”

git init
git 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다.
이것을 입력한 후에(.git 파일이 생성) 추가적인 git 명령어들을 줄 수 있다.

git add 파일명
untracked files의 파일들을 git가 추적하도록 하거나 파일은 수정했지만 아직 스테이징 영역에 올라가지 않은(Changed but not updated) 파일들을 스테이징 영역에 올린다.

git commit
– parent: 이전 커밋 내용을 의미한다.
– blob : 파일의 이름과 파일의 정보를 의미한다.
– tree : 커밋이 일어난 시점에 작업 디렉토리에 있는 파일의 이름과 파일의 이름이 담고있는 내용 사이의 정보. 그래서 각각의 버전마다 서로 다른 tree를 가지고 있고 그 tree는 파일의 이름과 파일의 정보를 담고 있기 때문에 그 버전이 만들어진 시점의 프로젝트 폴더의 상태를 알 수 있다. 이를 다른말로 “snapshot을 찍다”라고도 한다.

어떤 변경사항이라도 만든 후, 저장소의 “스냅샷”을 찍기 위해 commit을 입력한다. 결과는 object 파일로 저장된다.
커밋하면, 그 시점의 당신의 저장소의 “스냅샷”을 찍어, 프로젝트를 이전의 어떠한 상태로든 재평가하거나 복원할 수 있는 체크포인트를 가질 수 있다.

git status
저장소 상태를 확인 할 수 있다.
어떤 파일이 저장소 안에 있고, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업하고 있는지 등을 볼 수 있다.
– working directory
– staging area
– cache – repository
인강을 들으면서 이 부분을 가장 잘 설명된 이미지를 찾다가 아래 이미지를 찾았다.

출처 : https://git-scm.com/book/ko/v1/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EA%B8%B0%EC%B4%88

gistory
git을 분석하기 위한 도구로 명령을 내렸을 때 git의 내부에서는 어떤 일이 일어나는가를 분석하면서 git이 어떻게 동작하는가를 스스로 공부하는데 도움을 준다.
gistory 설치 방법

git의 특성 중 하나! 파일이 같은 내용이면 파일의 이름도 같다.
이 원리는 아래 사이트에서 확인 가능하다.
sha1 online

[git] 지옥에서 온 GIT – one

지옥에서 온 GIT 이라는 인강은 총 51개의 강의로 구성이 되어있다.
나중에 내가 또 다시 검색을 할 것 같아 강의 내용을 간단히 정리했다.
GIT은 어렵다!!

하지만 강사 이고잉님의 강의 시작전에 말씀하셨다..
GIT을 배우는게 어렵고 복잡하다고 하더라도 우리의 현실은 그것보다 더 복잡하기 때문에 배울만 하다고..ㅜ ㅜ………

GIT : 버전 관리 시스템(Version Control System) 중에 하나이다.
우리가 이전에는 파일을 수정할때마다 파일 이름에 _final, _real_final, … 을 붙여가며 사용하던 것을 이제는 파일 이름을 수정하지 않고도 버전관리를 할 수 있다.

  • git init
    git을 처음 시작할때 사용하는 명령어이다.
    이 명령어를 사용하면 .git이라는 이름으로 버전 정보가 담긴(담기게 될) 파일이 생긴다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth
    $ git init
    Initialized empty Git repository in C:/Users/YEBEEN/Documents/gitfth/.git/
    
  • git status
    현재 파일의 상태를 확인 할 수 있다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git status
    On branch master
    
    No commits yet
    
    Untracked files:
      (use "git add ..." to include in what will be committed)
    
            f1.txt
    
    nothing added to commit but untracked files present (use "git add" to track)
    
    

    위 샘플 코드에서 Untracked files 를 확인 할 수 있는데
    git은 버전 관리를 하라고 하기 전까지는 새 작업을 무시하기 때문이다. 즉, 파일이 Tracked 상태가 되기 전까지는 Git은 절대 그 파일을 커밋하지 않을 것이라는 이야기이다.

  • git add
    이 명령어는 파일이 추가되거나 내용이 수정되어 버전관리 목록에 추가하기 위해 사용한다.(위에서 언급했던! Tracked 상태가 되기 위해 사용 해야하는 명령어이다.)

    예를 들어! 프로젝트를 진행하다보면 핵심적인 파일이 있고 테스트성으로 임시적인 파일이 있을 텐데 테스트성 파일까지 관리할 필요는 없지 않을까.
    그래서 우리는 어떤 파일들을 추적해야(관리해야)하는지 git에게 알려 줘야 한다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git add f1.txt
    warning: LF will be replaced by CRLF in f1.txt.
    The file will have its original line endings in your working directory
    
  • git commit
    버전들을 기록하기 위해서는 commit을 해야 하는데 하기 위해서 꼭 add를 해야하며 commit 메세지를 입력해야한다. 이 커밋 메세지는 다른 사람들과 업무내용을 공유하거나 스스로 업무내용을 기억하기 위한 것이니 꼼꼼히 작성하는 것이 좋다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git commit
    [master (root-commit) 924be54] 1
     1 file changed, 1 insertion(+)
     create mode 100644 f1.txt
    
  • git config
    git을 설치하고 나서 가장 먼저 해야 하는 것은 사용자 이름과 이메일 주소를 설정하는 것이다. git은 커밋할 때마다 이 정보를 사용하는데 –global 옵션을 사용하여 설정한다면 한 번 커밋한 후에는 정보를 변경할 수 없다.
    만약 프로젝트마다 다른 이름과 이메일 주소를 사용하고 싶으면 –global 옵션을 빼고 명령을 실행한다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git config --global user.name yebeen
    
    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git config --global user.email 안알랴줌@gmail.com
    
  • git log
    지금까지의 커밋 history를 볼 수 있으며 이때 중요한건 커밋 메시지!!

    – git log (commit id)
    그 커밋 id 이후의 로그를 확인 할 수 있다.
    – git log -p
    커밋 history를 각 커밋별로 직전 버전과의 차이점을 확인 할 수 있다.
  • git diff (AcommitId)..(BcommitId)
    A와 B 소스 코드 사이 내용의 차이점을 확인 할 수 있다.
* stage(커밋 대기중인 파일들이 있는 곳)
* repository(커밋 된 파일들이 있는 곳)
reset VS revert

커밋 취소하는 명령어들이다.
하지만 명심하자. GIT에서는 왠만하면 어떠한 정보도 삭제하지 않는다.
커밋을 취소한다는 것 자체가 위험한 명령어들이기 때문에 알아만 두고 되도록이면 사용하지는 말자!
협업(공유)하는데 있어서는 절대 사용 금지!
사용해야만 한다면 그땐 정말, 꼭, 완전 주의해서 사용하자!!
  • git reset
    이 명령어는 커밋을 취소 하여 커밋 내용이 삭제된 것처럼 보여도 우리 눈에만 보이지 않을 뿐 삭제된 것이 아니고 남아있다.
  • git revert
    reset처럼 날려버리는 것이 아니라 새로운 버전을 만든다.
  • 아래는 커밋 내용 중에 335e로 시작하는 커밋 ID를 가진 커밋을 최신으로 두고 싶을 때에 실행한 예제이다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git reset 335e70e43268d58d93bc275425f5b65a466c01f0 --hard
    HEAD is now at 335e70e 3
    

    그 결과 git log를 사용하여 히스토리를 보면 335e로 시작하는 커밋 ID를 가진 내용이 최신 커밋 내용이라는걸 확인 할 수 있다.

    YEBEEN@YEBEEN MINGW64 ~/Documents/gitfth (master)
    $ git log
    commit 335e70e43268d58d93bc275425f5b65a466c01f0 (HEAD -> master)
    Author: yebeen <안알랴줌@gmail.com>
    Date:   Sat Nov 17 20:44:40 2018 +0900
    
        3
    
    commit 0d5351d2b11dfa58a2096f0ea0d7a15b1f4dc7b5
    Author: yebeen <안알랴줌@gmail.com>
    Date:   Sat Nov 17 20:32:35 2018 +0900
    
        2
    
    commit 924be54139c37ff730444e76a675e91db39b7b35
    Author: yebeen <안알랴줌@gmail.com>
    Date:   Sat Nov 17 20:26:51 2018 +0900
    
        1