** 목차 : Git? / Github? / Git 명령어 모음 (🌟 = 헷갈려서..)
1. Git ?
- 버전 관리 시스템 중 하나. (http://git-scm.com/)
- 특징 : 분산 시스템 방식을 지원함. (Distributed)
** 버전 관리?
=> 버전이 바뀔 때마다 기존의 파일 복제 -> (버저닝 문제점 발생) -> 버전 바뀔 때 기존 파일 복제하되 차이점만 비교
** 버전 관리 방법 (2가지)
(1) 혼자서 버전 관리 : Local 환경에서 관리. (로컬 = 내 앞에 있는 PC)
(2) 다른 사람과 버전 관리 : 직접 서버 구성 (내 PC를 하나의 서버이자 저장소로 사용) / SaaS 서비스 (=Remote 서버)
** Git 학습 방식 (2가지)
(1) 명령어 기반 (CLI; CommandLine User Interface)
- 장점 : 반영구적으로 일관되게 사용 가능 (GUI도 결국 내부적으로는 명령어로 동작.)
- 단점 : GUI에 비해 학습 시간 필요 (학습 난이도가 다소 높음)
(2) UI 기반 (GUI; Graphic User Interface)
- 장점 : 직관적인 UI 지원. (초심자에게 Good)
- 단점 : SW 버전 업데이트에 따라 버튼 레이아웃 위치 변경으로 혼란이 올 수 있음.
(GUI Tool; SourceTree, Gir Kraken, Github Desktop)
** Git 파일 상태 (4가지)
(1) Tracked : .git이 추적 중인 파일 (Commit O)
(2) Untracked : .git이 추적 중이지 않은 파일 (Commit X)
(3) modified : 변경 내역이 발생한 파일 (Commit O)
(4) unmodified : 변경 내역이 발생하지 않은 파일 (Commit X)
(3, 4번은 Tracked 상태일 때 일어나는 상태)
2. Github ?
- 원격 저장소 호스팅 서비스 (etc. gitlab, bitbucket)
(원격 저장소 (Remote Repository) : 내 PC가 아닌 다른 서버 컴퓨터에 작업 내역 백업 및 공유 O
* 역할 - 로컬 환경의 작업 내역 백업 (Backup) / 다른 사람들에게 작업 내역 공유 및 협업 (Co-work))
** 원격 저장소 생성 시 참고
(1) 첫 Repository 생성 후 (...or create a new repository on the command line 칸)
echo "# <Repository Name> >> README.md => README.md 파일 생성
git init => 저장소 초기화
git add README.md => README.md 파일 스테이징
git commit -m "first commit" => 작업 내역 커밋
git branch -M main => 브랜치 이름 main으로 변경
git remote add origin <Repository 주소> => 로컬 - 원격 저장소 연결 🌟
git pus -u origin main => 원격 저장소로 작업 내역 백업 🌟
(🌟외의 다른 명령어는 로컬 환경에 작업 내역이 존재하면 단계 생략 가능)
(2) 브랜치 (Branch)
- 1개 이상의 Commit들로 구성된 작업 내역들이 하나의 브랜치에 속해있음.
- 기존 코드에 영향을 주지 않으면서 독립적으로 시험해보고 싶은 코드가 있거나 별도 분리 작업을 할 때 사용
- 언제든지 자유롭게 작업 내역을 복사해서 다양한 테스트를 수행해볼 수 있다는 Git의 장점이자 특징!
- 서로 다른 커밋에서 동일한 부분이 변경됨에 따라 충돌이 발생. -> 직접 코드 라인 수정 필요
** 충돌 해결 방법 (3가지)
- 기존에 있던 내용만 유지해서 충돌 해결 / 새롭게 적용될 내용으로 충돌 해결 / 양 쪽의 작업 내역 모두 반영
(git commit -am "Commit Message" : add와 commit 한 번에 수행)
3. Git 명령어 모음
1. $ git init
- 로컬 저장소 생성 및 초기화 (실행 시 .git 숨김 폴더 생성. (절대 삭제 금지!!, initalize))
2. $ git config
- git 환경 설정 및 사용자 정보 등록 (PC 세팅 시 한 번만 설정.)
** git config --list : 현재 등록된 정보 조회 (key=value 형태로 관리)
** git config --global user.email / git config --global user.name : git 가입 시 사용한 이메일 주소, username 입력
3. $ git status
- 현재 작업중인 디렉토리 상태 확인 (작업중인 내역, 경로 내 변경되거나 생성된 파일 조회)
4. $ git add
- 새롭게 생성한 파일을 git에게 추적 및 관리하도록 지정 (새로 생성된 파일 변경 사항을 git이 추적)
** EX) touch ~~~.txt : ~~~.txt 파일 생성 후 생성 여부 확인 (-> status -> add)
- 기존 추적 파일 변경 사항 커밋하기 위해 스테이징 영역을 추가 (기존 관리 파일 스테이징 영역으로 이)
** 명령어 수행 시 파일에 대한 메타 정보가 스테이징 영역으로 이동하고 그 이후 커밋 수행 O
** 스테이징 영역? (Staging Area) : git에서 변경 사항을 커밋하기 위해 커밋할 대상인 작업 파일들을 잠시 이동 시켜두는 장소.
5. $ git commit
- 현재까지의 작업 내역을 하나의 기록으로 저장 (하나의 스냅샷 형태로 기록해두는 용)
** Git Bash 터미널에서 진행 시 : i 버튼 (INSERT 모드) -> 내용 작성 -> ESC 버튼 (모드 벗어남) -> :wq (vi 에디터 종료)
** git commit -m : Commit 제목만 간단하게 작성 후 Commit 생성.
6. $ git log
- 현재까지 수행된 과거 모든 Commit 기록 확인 (지금까지 저장된 작업 내역들 확인)
** git log --oneline : 커밋 내역 한 라인으로 요약 후 조회
** git log --graph : 커밋 내역을 그래프 형태로 조회력
7. $ git restore
- 스테이징 영역에 추가된 파일 취소 (실수로 커밋과 관련 없는 파일 추가 했을 때 스테이징 영역에서 제외 O)
** git restore --staged <file> : <file>을 unstage 할 수 있음.
** rm <file> : <file> 제거 (rm; remove / restore 다음 진행 할 수 있음)
8. $ git diff
- 커밋 내역끼리 차이점 비교 (변경 사항 비교하고 싶을 때)
** git diff <커밋해시값1>..<커밋해시값N> : 커밋 간 차이점 확인 (해시값은 랜덤값으로 고유함.)
** git log -p -2 : 최근 2개의 커밋 결과들을 비교하여 확인할 수도 있음
9. $ git checkout
- 특정 시점으로 이동하여 그 시점에서의 작업 상태 확인 (해당 커밋 시점 이동 -> 현재 작업 영역 상태도 그 시점으로 변경)
** git checkout <이동할 시점의 커밋 해시값> or <Branch> (git log --online으로 커밋 정보 간단하게 조회 후)
10. $ git remote
- 로컬 저장소와 원격 저장소를 서로 연결 (로컬-저장소 간 서로 데이터 통신이 가능해짐)
** git remote -v : 현재 연결된 원격 저장소 목록 조회
** git remote add <변수명><원격 저장소 url> : 원격 저장소 주소를 임시 변수에 할당
** git remote rm <변수명> : 해당 변수에 할당된 원격 저장소 정보 제거
11. $ git push
- 로컬 저장소의 작업 내역을 원격 저장소에 백업 (remote 명령어는 자동 백업되지 않기 때문에 push로 백업, 갱신 필수)
** git push -u <remote 변수명> <브랜치명 > : ex. git push -u origin dev (-u: upstream) => github 가서 새로고침!
12. $ git clone
- 원격 저장소 복제 (내 저장소 혹은 다른 사람의 원격 저장소 복제)
** git clone <복제할 원격 저장소의 주소> : 주소는 Repository <> Code 버튼 누르면 나옴
13. $ git fetch 🌟
- 원격 저장소에 업데이트 된 내용 확인 (로컬-원격 변경 사항 확인 시)
** git fetch -a : 원격 저장소의 변경사항을 로컬 저장소 원격 브랜치에 갱신 (-a; all)
14. $ git merge 🌟
- 원격 저장소에 업데이트 된 내용 확인 (병합 전 변경 사항 반영되지 않은 main 브랜치로 먼저 이동해서 수행해야 함.)
** git switch <브랜치> : 브랜치로 이동
** git branch : 현재 HEAD가 가리키고 있는 브랜치가 <브랜치>인지 확인
** git merge <변경사항 적용된 대상 브랜치> : <브랜치>의 변경사항을 병합 (merge)
- 다른 브랜치 작업 내용을 현재 브랜치에 반영 (서로 다른 커밋들 간의 변경 사항을 합칠 때 사용)
** git merge <커밋을 가져올 대상 브랜치>
** 병합 수행 시 확인할 점 : 현재 위치한 내 브랜치가 어디? / 어떤 브랜치에서 작업 내역 가져올 것?
15. $ git pull
- fetch + merge 기능을 한 번에 수행
** fetch 기능 : 원격 저장소의 최신 변경 사항을 가져와서 origin/으로 시작하는 추적 브랜치에 반영
** merge 기능 : 현재 브랜치에 작업 내역 병합
16. $ git branch
- 브랜치 생성 (생성 전에 현재 내가 어떤 브랜치에 위치하고 있는지 확인 필수)
** git branch -a : 현재 내 저장소의 모든 브랜치 조회
** git branch <브랜치명> : <브랜치명>이라는 이름의 브랜치 생성
** git branch -M <변경할 브랜치 이름> : 현재 브랜치명을 다른 이름으로 변경
출처 및 참고자료 : 우리 FISA 유정호 강사님 수업 내용
'Study' 카테고리의 다른 글
| 0. 우리 FISA 4기 클라우드 서비스 개발 과정 합격 후기 (0) | 2025.01.08 |
|---|