• 형상 관리 시스템 (Configuration Management Systems)
• 버전 관리 시스템 (Version Control Systems)
• Source Data + History이력을 관리하는 기능이 있어서 협업, 작업 추적, 특정 시점으로 복구 등이 가능
-> 최초에는 내 컴퓨터 안에서 버전 관리 local version control system
-> 이후에 중앙 서버에서 관리하는 centralized version control system (csv, svn..)
• 제한적인 협업이 가능해짐 (동시 수정이 안 됨, 오랜 시간 수정하면 바로 버전 업뎃이 안 됨)
• 서버로 commit 하는 순간 배포되어 다수에게 버그 유발
• 인터넷이 안되면 작업이 불가능
• 자신만의 version history 를 가질 수 없고
-> 현재는 서버를 통해 동기화하는 Distributed Version Control Systems 사용 (Mercurial, Git)
• Commit 하더라도 개인저장소 내에 적용됨
• 원하는 시점에 배포(Push) 가능
• 오프라인에서도 작업 가능
• 연결이 끊어져도 내 버전에거 작업 가능
• 자신만의 version history 가능
GIT : global information tracker
local에서 git 레파지토리 만들기
꼭 레파지토리 폴더로 먼저 들어간 후에 init으로 git 만들어주기
- '.git'으로 확인할 수 있음
- ls -all : 숨겨진 파일을 포함하여 모든 파일을 보여준다.
리눅스 기본 명령어 :
https://www.hanbit.co.kr/channel/category/category_view.html?cms_code=CMS6390061632
remote 저장소 local로 복제하기
-> 일단 github remote에서 'test_project2' 저장소 만들기
-> local에서 'test_project2' 사용할 때마다 일일이 계정 인증해야 하니까 token 발행해주기
위에서 git 에서 레파지토리 만들었음
BUT!!
git이 관리하고 있지는 않는 상태임.
--> test_project2가 untracked 상태이기 때문 (인지만 하고 관리 X)
--> tracked 상태에 들어와서 버전이 매겨져야 git에게 관리 대상이 되는 것임.
--> 레파지토리 내용 수정하게 되면 modified 상태
--> modified 상태도 staged 상태가 아님
- 수정 후에 버전 매기려면 staged 상태로 만들고 > 다시 commit 해서 버전 매기는 대상이 되어야 함.
--> 레파지토리 delete 하려면 unstaged 상태로 바꿔야 함.
🚨 🚨 🚨 🚨 🚨 🚨
git status
• Working Directory 와 Staging Area 의 상태를 표시
• stage 시킬 대상, commit 대상, modified 상태인 대상 확인 가능
• 파일의 상태를 확인할 때 사용
• git 적응을 위해 습관화 해주는 것이 좋음
git add <file name>
• Directory 에서 생성된 파일을 Staging Area (Index) 에 추가
• Modified 상태의 파일을 Staged 상태로 변경할 때
• commit 대상으로 올려놓는 명령어
🚨 메시지 포함 꼭 해줘야 함
🚨 -mgit commit -m <commit_message> git commit -a -m <commit_message>
• Directory 에서 생성된 파일을 Staging Area (Index) 에 추가
• Modified 상태의 파일을 Staged 상태로 변경
• ✍️ 의미 있는 문구로 이 파일은 어떤 파일인지 명시해주기 (영문 권장)
• -a 옵션 : add 와 동시에 commit 동시에 (Modified 상태에서 바로 Committed 상태로 변경)
• Git 에서 무시해야 하는 파일 패턴을 관리
# 확장자가 .a 인 파일 전부 무시 *.a # lib.a는 제외하고 전부 무시 !lib.a
# 현재 디렉토리에 있는 TODO파일은 무시하되 # subdir/TODO처럼 하위디렉토리에 있는 파일은 무시하지 않음 /TODO
# build/ 디렉토리에 있는 모든 파일은 무시 build/
# doc 폴더 하위에 있는 .txt 파일은 무시하되 다른 경로에 있는 doc/server/arch.txt 파일은 무시하지 않기 doc/*.txt
# doc 디렉토리 아래의 모든 .pdf 파일을 무시 doc/**/*.pdf
Git RM = remove
git rm <file_name>
• Git 에서 관리하는 파일 삭제 (untracked 상태 만들기)
• Staging Area 의 파일을 삭제하고 Commit
• Working Directory 에서도 삭제됨
Git MV = move
git mv <old_name> <new_name>
• Git 에서 파일이름 변경시 사용
• 파일을 경로 이동도 디렉토리에서 마음대로 하는 게 아니라 git에서 git 명령어로 해야 함
• 파일을 복사하고, 원본 파일을 삭제한 뒤 Git Add 하는 동작과 같다.cp <old_name> <new_name> git rm <old_name> git add <new_name>
cat : cat 을 쓰고 파일명을 붙이면 파일 내용을 출력하는 명령어
하지만 cat + '>'를 함께 쓰면
아래 내용으로 파일을 덮어쓰는 명령어
- 덮어쓸 내용 적고 ctr + d 로 저장하기
아직까지 modified 상태! -> unstaged 상태임
staged 상태로 만들기 위해서 add + commit 해주기
cat + '>>' 꺽새 두 번 : 내용 추가하기
-a 옵션 활용하기
-a 추가해서 commit 하면 바로 파일 staged 상태 만들 수 있음.
Git에서 무시할 파일 등록
touch로 .gitignore 파일 만들고 add 해주기
csv 파일 무시하라고 명령
주의
- status 확인해보면 .gitignore 파일이 두가지 상태를 가지고 있다고 나옴
< 변경사항이 두 개 >
add한 시점만 commit 하기 때문!
- 초기에 파일을 untracked > tracked로 변경하는 애들 시점에서 수정했을 때 이런 경우가 발생함
등록된 상태 & 수정한 상태 두 가지 상태가 있던 상황에서 commit 시도하면
- stage에 있던 등록된 상태만 commit이 되고
- unstaged 상태는 편집 스냅샷이 그대로 남아있어서 (add를 새로 해줘야 함)
이럴 때 당황 X
- staged 상태 먼저 해결하고
- 다시 unstaged > staged (-a 옵션) 해주면 됨
🚨 파일 삭제는 working directory에서 파일 삭제하면 안 됨.
🚨 git 에서 버전 관리를 하고 있기 때문에 git에서 삭제해야 함.
파일 삭제도 변경사항으로 인지하고 있음
삭제는 중요한 변경사항이니 메시지 기록해주기
< 주의 >
🚨 커맨드창에서 git (remote)이 아닌
working directory (local) 에서 파일 삭제하게 된다면?
< 해결 방법 >
🚨 실수로 git이 아닌 파일만 먼저 지워버렸어도 당황 X
먼저 test2.txt 파일 생성하고 텍스트 입력해주기
파일 add + commit 하기
파일 처음에 생성하면 -a 옵션 사용 안 됨
- 초기에는 무조건 add를 해줘야 함
< 주의 >
🚨 실수로 git이 아닌 디렉토리에서 mv로 경로를 이동시켰다면?
🚨 git이 src폴더로 이동시킨 test.txt 파일을 등록하지 않은 새로운 파일 취급함
- HelloGit 밑에 있던 test.txt가 deleted 삭제되었고
- src 폴더 밑에 새로운 untracked 파일이 생겼다고 나옴.
< 해결 방법 >
- ✍️ add할 때 'src/'로 어디에 있는 test.txt 파일인지 명시해주기
git status 확인해보면
- status 확인하면 git이 내가 하려는 게 파일 rename인 걸 알아차림.