#
git : 버전관리하는 프로그램
github : git 으로 관리하는 프로젝트를 올려둘 수 있는 사이트
# git 설치 > homebrew 로 설치
chaeyeon@bagchaecBookPro ~ % brew install git
Error: Cannot install under Rosetta 2 in ARM default prefix (/opt/homebrew)!
To rerun under ARM use:
// 에러 발생
해결방법 : brew 명령어 앞에 arch -arm64 추가
$ arch -arm64 brew install <패키지>
# homebrew
// 버전 확인
brew -v
// update
brew update // 자동 업데이트 안되기 때문에 한번씩 입력해줘야함
# documents\MathTool 에 git bash // windows 설치
# untrackted
- 깃에 의해 아직 추적되지 않고 있음
- 버전 관리의 대상 아님
# add
- 커밋할 파일을 미리 지정해줘야 함
- 수정된 파일의 모습이 커밋에 포함될 것이라 지정하는 것
$ git add [커밋에 반영할 파일 이름]
$ git add.
# 현재 프로젝트 디렉토리 내에서 변경사항이 생긴 모든 파일들을 staging area에 추가하라
# commit
- 프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위 & 결과물
- 레포지토리(repository) : 커밋이 저장되는 곳
- 처음으로 커밋을 하기 전 사용자 이름, 이메일 주소 설정
$ git commit user.name "이름"
$ git commit user.email "이메일"
- 커밋할 파일을 git add로 지정해주기
- 커밋 메시지 남기기 (옵션 -m)
$ git commit -m "커밋 메시지"
# Git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작
1. working directory [working tree] : 작업을 하는 프로젝트 디렉토리
2. staging area [index] : git add를 한 파일들이 존재하는 영역
커밋을 하게되면 staging area 에 있는 파일들만 커밋에 반영됨
3. repository : working directory 의 변경 이력들이 저장되어 있는 영역 (커밋들이 저장되는 영역)
- working directory 에서 뭔가 작업을 하고,
- 작업한 파일들을 git add 해주고,
- 커밋을 하면 staging area 에 있던 파일들의 모습이 마치 영화의 한 장면, 스냅샷(snapshot)처럼 이 repository 에 저장
실제로는 MathTool 디렉토리 안에 숨겨져 있던 .git 디렉토리가 repository
다음과 같은 작업을 한 상태를 나타내는 그림
- working directory에서 A.txt 파일과 B.txt 파일을 작성
- git add A.txt 와 git add B.txt 를 실행해서 A.txt, B.txt 둘다 staging area 에 올림
- 그 다음 git commit -m "Ver_1"를 실행해서 staging area 에 있는 파일들을 가져와 커밋으로 남김
다음과 같은 작업을 추가적으로 수행
- working directory 에서 A.txt 파일 내용에 Python~ 이라는 단어를 추가, B.txt 파일 내용에 Morning! 이라는 단어 추가
- (이전 그림과 다른 점) git add B.txt 만 실행해서 B.txt 파일만 staging area 에 올림
- 그 다음 git commit -m "Ver_2" 로 두 번째 커밋
이전 그림과 다른 점
A.txt는 staging area 에 올리지 않고, B.txt만 staging area 에 올림
지금 repository 에서 그 결과 : Ver_2 커밋을 보면
- A.txt는 staging area에 있던 모습, 그러니까 수정하기 이전의 모습이 Ver_2 커밋에 반영
- B.txt도 staging area에 있던 모습, 하지만 A.txt와는 달리 수정한 이후의 모습이 Ver_2 커밋에 반영
A.txt, B.txt 둘다 working directory 에서 수정했다는 사실은 같지만, staging area 에 올렸는지 여부에 따라 그 최신 모습이 커밋에 반영되는지가 달라짐 --> Git을 사용할 때 이 부분 주의
# staging area가 굳이 필요한 이유
- working directory 에서 작업을 하고 git add 할 필요없이 바로 커밋해버리는 구조가 더 편할 것 같지만 꼭 그렇지는 않음
- 방금처럼 A.txt 와 B.txt 파일을 둘다 수정했더라도 두 파일 모두 그 최신 모습을 다음 커밋에 반영하고 싶지 않을 수도 있음
- 방금처럼 B.txt 의 최신 모습만 그 다음 커밋에 반영하고 싶을 수도 있음 (이런 상황은 실제로 꽤 자주 있음)
- 만약 staging area 가 없다면 원하는 것들만 선별적으로 커밋에 반영할 수 없게 됨 --> 좀더 세밀한 버전 관리를 할 수 없게 됨
# Git에서 파일들의 상태
1) Untracked 상태
2) Tracked 상태
- Staged 상태
- Unmodified 상태
- Modified 상태
1) Untracked 상태
- Untracked : 추적되지 않고 있는
- 파일이 Git에 의해서 그 변동사항이 전혀 추적되고 있지 않는 상태
- ex) 파일을 새로 생성하고 그 파일을 한 번도 git add 해주지 않았다면 Untracked 상태
2) Tracked 상태
1. Staged 상태
- 파일의 내용이 수정되고나서, staging area 에 올라와있는 상태를 Staged(스테이징된, stage area에 올려진) 상태
- 새로 생성한 파일에 내용을 쓰고 git add 를 해주거나
- 한 번이라도 커밋에 포함됐었던 파일이라도 내용을 수정하고 git add 를 해주면 이 상태
2. Unmodified 상태
- 현재 파일의 내용이 최신 커밋의 모습과 비교했을 때 전혀 바뀐 게 없는 상태면 그 파일은 Unmodified(수정되지 않은, 변한 게 없는) 상태
- 커밋을 하고 난 직후에는 working directory 안의 모든 파일들이 이 상태가 됨
3. Modified 상태
- 최신 커밋의 모습과 비교했을 때 조금이라도 바뀐 내용이 있는 상태면 그 파일은 Modified(수정된) 상태
각 경우 설명
- Add the file : Untracked 상태의 파일을 처음으로 git add 해주면 Staged 상태
- Edit the file : 최신 커밋과 비교했을 때 차이가 없는 Unmodified 상태의 파일의 내용을 수정하면 Modified 상태
- Stage the file : Modified 상태의 파일을 git add 해주면 Staged 상태
- Remove the file : 파일을 삭제하면 당연히 Git에서 더이상 인식하지 않음
- Commit : 커밋을 하면 staging area에 있던 파일들이 커밋에 반영되고, 이제 모든 파일들은 최신 커밋과 차이가 없게 되니까 Unmodified 상태
$ git reset 파일 이름 # staging area에서 파일 제거
nothing to commit, working tree clean
# clean = 이전 커밋 이후로 변경사항 없음
$ git help [알고 싶은 커맨드의 이름] # 커맨드의 의미나 사용법 알고 싶을 때 사용
$ man git-[알고 싶은 커맨드의 이름] # 커맨드의 의미나 사용법 알고 싶을 때 사용
공식 메뉴얼 화면에서 나가기 : $q
요약
$ git init : 현재 디렉토리를 Git이 관리하는 프로젝트 디렉토리(=working directory)로 설정하고 그 안에 레포지토리(.git 디렉토리) 생성
$ git config user.name 'p3chaeyeon' : 현재 사용자의 아이디를 'p3chaeyeon'으로 설정(커밋할 때 필요한 정보)
$ git config user.email 'p3chaeyeon@gmail.com' : 현재 사용자의 이메일 주소를 'p3chaeyeon@gmail.com'로 설정(커밋할 때 필요한 정보
$ git add [파일 이름] : 수정사항이 있는 특정 파일을 staging area에 올리기
$ git add [디렉토리명] : 해당 디렉토리 내에서 수정사항이 있는 모든 파일들을 staging area에 올리기
$ git add . : working directory 내의 수정사항이 있는 모든 파일들을 staging area에 올리기
$ git reset [파일 이름] : staging area에 올렸던 파일 다시 내리기
$ git status : Git이 현재 인식하고 있는 프로젝트 관련 내용들 출력(문제 상황이 발생했을 때 현재 상태를 파악하기 위해 활용하면 좋음)
$ git commit -m "커밋 메시지" : 현재 staging area에 있는 것들 커밋으로 남기기
$ git help [커맨드 이름] : 사용법이 궁금한 Git 커맨드의 공식 메뉴얼 내용 출력
'UNIX > Git' 카테고리의 다른 글
버르장머리 없는 요즘 git remote 연결 (0) | 2024.08.30 |
---|---|
Git - Intro. (0) | 2024.08.06 |