<Git >
버전관리, 백업, 협업의 기능을 제공하는 깃
간단하게 텍스트 파일을 저장소에 등록하는 실습을 해보겠습니다
이 실습은
크게 git init (초기설정) -> git add 파일명 (파일을 커밋 대기 상태에 등록) ->git commit ( 커밋 = 버전등록 = 저장소에 등록)
순서입니다
최종목표는 깃허브에 파일을 올리고, 백업과 버전관리 및 협업을 하는 것입니다
나중에 깃허브를 다룰 때
이 과정에 나의 깃허브 주소를 remote하는 단계와
git push 명령어를 사용하여 파일을 등록하는 단계를 추가하면
최종적으로 나의 깃허브 저장소( 원격 저장소)에 파일을 올릴 수 있습니다
실습환경을 위해 Git을 다운로드
Git - Downloads
Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp
git-scm.com
설치 완료 후 윈도우검색창에 Git bash 검색 및 실행
C:\Users\(자신의사용자폴더)\Documents 경로로 들어가 gitfth 폴더를 새로 만들고
git bash 에서
cd C:\Users\(자신의사용자폴더)\Documents\gitfth 입력 (방금 만든 gitfth 디렉토리로 이동)
아래의 명령어를 순서대로 입력
0. vim f1.txt 입력하여 현재 디렉토리에 f1.txt 생성 내용은 아무거나!
1. git init(initialized) (초기화)
: 현재 디렉토리에 작업을 진행하겠다는 것을 깃에 알려주는것
현재 디렉토리의 파일을 확인하는 ls -al을 해보면
drwxr-xr-x 1 zhun0 197609 0 Dec 20 16:42 .git/
=> .git 이 생성됨
이걸지우면 마지막 코드는 남아있지만 그동안의 버전정보가 삭제되기 때문에 중요한 디렉토리이다
2. git status 를 해보면 vim f1.txt로 만들어놓은 파일이 Untracked,추적되지 않고 있는 것을 알 수 있다. 이 파일을 깃에 커밋할 수 있도록 정확히 짚어서 추적하게 한다 => add사용
3. git add f1.txt
=>f1.txt 가 '커밋 대기 상태'로 올라감
4. 다시 git status해보면 잘올라감(이제 커밋 가능)
5. git commit 하면 vim이 뜨고 버전 메세지(커밋메세지) 입력하고 :wq
6. git log 로 확인해보면 잘 커밋된걸 볼 수 있음
(내부 저장소, repository로 저장됨)
Q : 왜 깃은 add의과정을 포함하는가? 그냥 커밋하면 되잖아 |
A : 만약 많은 코드가 있다 가정하면 커밋하는 시기를 놓칠때가 많다 커밋 하나는 하나의 작업을 담고있는것이 가장 이상적인데 커밋의 시기를 놓치면 많은 작업들을 하나의 커밋에 넣어야 할 수 있다. 이때, 깃은 add라는 과정을 통해 우리가 커밋하고 싶은 파일만 커밋할 수 있다. 즉 선택적으로 파일을 커밋할 수 있다. |
< 버전 추가하기>
1. 방금 커밋한 파일을 vim f1.txt 명령어로 다시 열고, 아무 내용을 추가
파일이 변경 되었으니 다시 add -> commit 단계진행
2. git add f1.txt
3. git commit -m "버전 2"
4. git log로 확인 => 두개의 버전이 생성됨
commit 명령어 git commit --help : 메뉴얼 보기 git commit -a : 수정하거나 삭제한 파일을 자동으로 add시켜준다. 근데, 처음만든파일은 -a로 바로 할 수 없고 git add f1.txt 를 해줘야 함 git commit -m 메세지 : 에디터를 띄우지않고 바로 메세지 입력 git commit -am "메세지" : add하는 동시에 메세지 추가하여 커밋 git commit --amend(개정하다) : commit 메세지를 수정할 수 있다 하지만 원격저장소로 올리기 전에 해야함 push올리곤 수정하지 말 것 |
< 변경사항 확인하기>
Git Bash에서 복사, 붙여넣기 단축키
구분 | 단축키 |
복사하기 | Ctrl + Insert |
붙여넣기 | Shifth + Insert |
1. git log
2. git log -p : 각각 커밋 사이 소스 상의 차이를 알 수 있음.
3. git log 1b846efe002d2586b49f41c452f64974c0c15f98 : 이 아이디 포함 이전버전으로 보여줌
4. git diff (아이디)..(아이디)
5. 수정 후 git diff
vim f1.txt 로 수정 -> git diff 입력: 바로 이전 내용과의 차이를 볼 수 있음 (검토가능)
< 과거의 버전으로 돌아가기>
-reset과 revert
-reset이 좀 어렵게 느껴질 거고 롤백은 조심해서 다뤄야 한다
1. git reset 0932e86eee44fabb36996c9ab6595a218593aad3 --hard
=> 선택한 ID버전으로 돌아감 (선택한 ID는 삭제되지 않고 , head가 됨)
=> hard는 간단,위험 soft 도 있음 이정도만 알아두자
2. revert 는 선택한 id의 커밋을 취소하면서 새로운 버전을 만드는 것.
이정도만 알아두자
cf.
- 깃에서는 웬만하면 어떠한 정보도 삭제하지 않는다.
지금도 이전 버전을 버린 것 처럼 보이지만 남아 있다. 원리를 이해하면 복구 가능
- 나중에 원격저장소를 이용해 협업을 하고 나의 버전을 공유한 이후에는 절대로 reset을 하면 안됨.
- reset은 공유하기 전에 나의 컴퓨터에 있는 버전에 대해서만 reset 작업을 해야함.
< 참고>
cf.
- git 명령의 빈도
cf. git의 원리 중 개미발톱
git은 파일의 내용이 같으면 같은 오브젝트를 가르킨다. (id가 동일)
이것 덕분에 git은 매우 효율적으로 중복 데이터를 저장할 수 있다