본문 바로가기

협업툴/git(hub)

[git/git hub] 깃으로 버전 관리하기

728x90
반응형
1. 깃 저장소 만들기

(1) cd ~
(2) mkdir hello-git
(3) cd hello-git
(4) ls -al
(5) pwd : hello-git 경로에 있는지 확인
(6) git init : 현재 디렉토리를 git으로 사용하겠다(초기화) _ 무조건 실행해야 하는 것
(7) ls -al : .git이라는 디렉토리가 생깁니다. 
   → .git : 버전이 저장될 저장소(repository)

 

◎ 깃에서 버전이란?

버전은 문서를 수정하고 저장할 때마다 생기는 것

예를 들어 보고서를 작성할 때 '초안'이라는 이름을 저장함
이미 만든 보고서를 수정하면서 수정 전 내용을 보관해야할 경우 '수정'으로 파일 이름 번경 후 저장
만약 1,000개가 넘는 문서의 수정 내용을 이런 방식으로 저장한다면 몇 개의 파일 이름은 기억해도 후에는 파일마다 수정사항을 기억할 수 없습니다.

파일을 다른 이름으로 저장해 버전을 만드는 방법보다 버전 관리 시스템을 이용해 훨씬 쉽게 버전을 만들고, 만든 시간과 수정 내용까지 기록할 수 있도록 합니다.

깃에서 버전을 관리하면 원래 파일 이름은 그대로 유지하면서 파일의 변경사항을 변경시점마다 저장할 수 있습니다. 또한, 버전마다 작업한 내용을 확인할 수 있고 해당 버전으로 되돌릴 수도 있습니다.

 

 

◎ 스테이지와 커밋 이해하기

   ▷ 작업 트리

      ▶ 파일 수정, 저장 등을 작업하는 디텍토리(작업 디렉토리라고도 함.)

      ▶ 앞에서 만들었던 hello-git 디렉토리가 작업 트리(눈에 보이는 디렉토리)

   ▷ 스테이지

      ▶ 버전으로 만들 파일이 대기하는 곳

      ▶ 스테이징 영역(staging area)이라고도 합니다.

      ▶ 작업 트리 파일 10개를 수정했지만 4개만 버전으로 만드려면 이 파일 4개만 스테이지로 넘겨주면 됩니다.

   ▷ 저장소

      ▶ 리포지토리(repository)는 스테이지에서 대기하고 있던 파일들을 버전으로 만들어 저장하는 곳

      ▶ 예를 들어 hello.txt 파일 문서를 수정하고 저장하면 그 파일은 작업 트리에 있게됩니다.

          수정한 hello.txt 파일을 스테이지에 넣고 다른 파일도 수정한 뒤 스테이지에 넣습니다.(add)

          파일 수정을 끝내고 스테이지에 다 넣었으면 버전을 만들기 위해 깃에게 커밋(commit) 명령을 내립니다.

          그러면 새로운 버전이 생성되면서 스테이지에 대기하던 파일이 모두 저장소에 저장됩니다.

 

쉽게 설명해 보겠습니다.

1. vim을 통해 파일을 생성하고 저장하면 작업 트리에 저장됩니다.
2. git add를 통해 작업 트리에 있는 파일을 스테이지에도 저장합니다.
3. git commit을 통해 해당 파일을 저장소에도 저장합니다.
4. 세 개의 파일이 모두 동일하면 git status를 확인했을 때 아무 것도 없는 것처럼 나타납니다.

 

 

git status : 깃의 상태 보기
on branch main : 현재 main 브랜치에 있다, 저장소에 들어있는 디렉토리와 비슷한 것
no commits yet : 아직 커밋한 파일 없음
nothing to commit : 현재 커밋할 파일이 없다.

 

 

◎ 깃이 버전을 만드는 과정

(1) 작업 트리에서 문서를 수정
(2) 수정한 파일 가운데 버전으로 만들고 싶은 것을 스테이징 영역, 즉 스테이지에 저장
(3) 스테이지에 있던 파일을 저장소로 커밋하면 버전이 만들어짐

 

◎ 작업 영역 → 스테이지 → 저장소로 이동하는 방법

(1) vim hello.txt : 작업 영역으로 txt 파일 생성
(2) git add hello.txt : 작업 영역에 있는 파일을 스테이지에 등록
(3) git status : 깃의 상태 확인
(4) git commit -m "message1" : 스테이지의 파일을 저장소로 보내면서 message1의 문구를 남김
(5) git log : 버전이 제대로 만들어졌는지 확인(저장소에 저장된 버전, 커밋을 만든 사람과 시간, 커밋 메세지 확인)

 

여러개를 작업 영역(트리)으로 만들어 스테이지에 등록하고 싶다면 'git add .' 사용

 

만들어 놓은 txt 파일을 스테이지로 보냄

 

스테이지에서 저장소로 보내며 문구를 남김, log로 현재 상태를 나타냄

 

이미 커밋되어 있는 것에서 또 커밋하면 수정기록이 남습니다.

 

작업 영역 → 스테이지 → 저장소로 한 번에 이동하기 위해서는 git commit -am "message2"를 사용하면 됩니다.

여기서 한 번에 이동하려면 기존에 commit이 있어야합니다. 없으면 진행되지 않습니다.

 

 

vim대신 vi를 사용해도 됩니다.
cat hello.txt를 사용하면 작성했던 내용을 다 확인할 수 있습니다.
여기서 git log를 하면 앞에서 저장했던 message1, add num2에 이어서 message2가 나타납니다.

 

 

내용에서 숫자 2를 two로 변경하고 저장한 후 아래와 같이 status와 git diff를 확인하면 수정된 부분이 나타납니다.

 

hello에 3을 추가하고 hello2 파일을 생성합니다.

status를 사용하면 아래와 같이 hello2는 untrack 되었다고 나타납니다.(add 되어 있지 않기 때문입니다.)

 

 

 

git log --stat를 하면 상태 및 변경 사항들을 상세하게 확인할 수 있습니다.

 

ls -la : 현재 폴더에 있는 txt의 리스트들이 나타납니다.

 

모든 파일이 커밋되었다면 아래와 같이 나타납니다.

 

방금 커밋한 메시지는 수정이 가능합니다.

git commit --amend → 편집기가 뜹니다.

그러면 아래와 같이 메세지를 수정할 수 있습니다.

 

 

 

◎ restore : git restore을 사용하면 스테이지에 올라가기 전의 상태로 되돌아 갑니다.

 

get restore hello.txt를 사용하기 위해서는 한 번도 커밋되면 안됩니다.

커밋된 후 작업 트리로 되돌리고 싶다면

git restore --staged : 모든 스테이지의 파일을 되돌리기 _ 파일이 하나면 실행되지 않습니다.
git restore --staged hello2.txt : 스테이지 안에 hello2.txt만 되돌리기

add 되어있는 것(스테이지에 올라가 있는 것)을 되돌린다.(add 전으로 되돌린다.)
comit을 해야 저장소로 저장되는 것이기 때문입니다.

 

위의 문구는 restore에 실패했다는 문구입니다.

 

 

reset

 

git reset HEAD^ : 최신 커밋을 이전 커밋 상태로 되돌아 갑니다.

git reset 명령
git reset --soft HEAD^ : 커밋만 취소하고 파일을 staged로 작업 디렉토리에 보관(스테이지와 작업 트리에 보관)
git reset --mixed HEAD^ : 커밋을 취소하고 파일을 unstaged로 작업 디렉토리에 보관(작업 트리에만 보관)
git reset HEAD^ --mixed : 옵션을 사용할 때와 같이 커밋을 취소하고 파일을 staged 상태로 작업 디렉토리에 보관

특정 커밋으로 되돌리기 : 특정 시점으로 되돌아 가기
git reset 해시
git reset --hard 복사한커밋해시(R2로 되돌아 가기 → git reset --hard 218d31e6f65e787397664fa523bf52c94b379c47)

--hard : 특정 시점으로 되돌아가나 시점 이후에 있는 파일들은 삭제
--soft : 특정 시점으로 되돌아가나 시점 이후에 있는 파일이 남아 있음.

 

reset 예시)

vim으로 파일을 하나씩 만들고 add, commit을 통해 저장을 시켜줍니다.
총 4번 반복해 R1~R4까지 revision을 수행한 후 git reset --hard R2 해쉬를 넣어주면 R4에서 R2로 변경됩니다. 
따라서, R2의 결과 값이 저장되어 있게 됩니다.

 

 

◎ revert

 

커밋 변경 이력 취소하기 - 커밋을 취소를 하나 변경된 내용을 남겨주는 것(git revert 해쉬)

git reset 해쉬(R2) 값 : R2 상태로 되돌아가고 R5가 사라진다.
git revert 해쉬(R5) 값 : 커밋이 취소가 되어서 R5 상태에서 R2 상태로 변경 되고 R5가 사라지지 않는다.
                                      커밋이 취소가 되고 R2 상태로 되돌아 가고 R5에 대한 이력은 남겨 두는 것.(R3, R4 삭제)

 

 

◎ ignore : 개인적으로 필요한 파일들은 숨김파일로 올립니다.

   ↔ 깃은 협업 목적, 저장소에 올리는건 모두가 알아야 하는 것을 주로 올립니다.

 

◎ .gitignore(파일 명은 변경되면 안됩니다.)

(1) 사용목적 : GIT과는 다르게 개인적으로 폴더를 저장하고 싶을 때 숨김 폴더로 지정합니다.

(2) 사용 방법
   ▷ .gitignore 파일을 만들어서 커밋까지 완료합니다.
   ▷ .gitignore 파일 내부에는 숨기고 싶은 텍스트 파일을 지정합니다.(이미 커밋되어 있는 파일을 이용)
       예시) hello2.txt
   ▷ 다음에 hello2.txt 파일을 수정하게 되면 add가 불가능하고 본인만 볼 수 있습니다.


.gitignore 파일로 버전 관리에서 제외하기
파일명, 디렉토리명, 확장자명
vi .gitignore
hello3.txt
temp/
.swp

.gitignore 적용 안될 시
git rm -r --cached .    => git 캐시 문제가 있어 캐시 파일 삭제
git add .                    => 현재 디렉토리에 있는 모든 파일을 스테이지에 올리기
git commit -m "apply .gitignore"   =>  커밋   

ignore파일 생성 후 커밋까지 진행합니다.

 

 

 

 

rm -rf .git : git 삭제, 커밋도 삭제 됨

 

reset : 로컬 저장소

revert : 허브 저장소(커밋 되돌리기), 해쉬값(자기자신)

 

 

깃은 리눅스 기반입니다. 한 번도 배워본 적이 없어서 한 번에 이해하기에는 좀 까다롭지만 여러번 반복을 하다보면 어떻게 사용되고 저장이 되는지 확인할 수 있을 것 같습니다!

 

깃도 꼭 이해해서 제 것으로 만들어 보겠습니다!!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

728x90
반응형

'협업툴 > git(hub)' 카테고리의 다른 글

[git/git hub] SSH 원격 접속이란?  (0) 2023.01.03
[git/git hub] 깃허브 시작하기  (0) 2023.01.03
[git/git hub] 브랜치 사용하기  (0) 2023.01.03
[git/git hub] 깃과 브랜치  (0) 2023.01.03
[git/git hub] 깃이란?  (0) 2023.01.02