SW공학_2
asd
SW 공학 - GIT
🌀Git
- 분산 버전 관리 시스템으로서, 소스 코드의 변경사항을 추적하는데 사용
- 로컬 시스템과 원격 시스템을 두어, 로컬에서 작업 후 원격공간과 동기화
- 주요 명령어에는 add, commit, push, merge, branch, checkout 등
- 브랜치(branch) 기능을 통해 여러 개발자가 동시에 개발하면서도 충돌 없이 작업
- git은 리눅스 토르발즈에 의해 개발된 이후 오픈소스프로젝트에서 관리
🌀Github
- Github 소스코드가 온라인에서 관리되고 협업할 수 있는 플랫폼
- 즉, Github은 Git의 리포지토리를 온라인상에서 관리하기 위한 플랫폼
- Github -> 마이크로소프트에서 인수
- oauth 토근 + 클론 (private repo)
- git clone https://토큰정보:x-oauth-basic@git주소
Git 프로젝트 생성 및 수정절차
- 신규 프로젝트 생성시
- 방법1
- git clone 레포주소
해당 폴더로 이동해서 작업 시작
- 방법2
- 로컬 컴퓨터에서부터 이미 개발된 프로젝트가 존재시
- git init
- .git 컴파일 생성
- .git 폴더가 위치한 곳에서 git config –list를 통해 컨피그 정보 조회
- git remote add origin 레포주소
- origin이란, 깃허브 저장소 주소를 의미(원격저장소)
- git remote set url origin
- url변경후 main에 push하면 main의 커밋 이력과 함께 업로드
- git remote remove origin
- 방법1
- 모든 이력 push
- git push -all origin
- 모든 브렌치의 커밋이력 push
- git push -all origin
github 사용자 지정
- 사용자 지정은 사용자 인증과 상관없이 자유롭게 가능
- 전역적 선언
- git config –global user.name 깃허브아이디
- git config –global user.email 깃허브이메일
- 홈 디렉터리 .gitconfig 저장
- 지역적 선언
- git config –local 으로 선언
- .git/config 저장
git 기본 명령어
- git status
- 현재 작업 디텍터리와 스테이징 에어리어 상태를 보여줌
- git add
- staging area로 업로드
- git status로 확인
- git commit -m “first commit”
- local repo 업로드 및 커밋이력 생성
- git commit -m “제목” -m “내용”
- git log로 이력 확인
- git commit만 치면 메시지 입력모드로 전환되고, 첫줄 제목 + 두번째 줄 부터 내용
- git commit -am “메시지”
- add와 커밋을 동시에
git pull 과 충돌
- 수정후 수정사항 업로드
- add, commit, push
- origin이 수정되어 로컬과의 차이 발생시
- origin의 변경사항은 로컬에서는 추적 불가능 -> 소스 컨트롤의 변경사항 인지는 로컬 레포지토리에 대한 변경인지
- git pull origin main
- origin을 기준으로 로컬을 업데이트
- pull은 working 디덱터리까지 반영
- 별도의 브랜치명 명시 안하면 현재 체크아웃 된 브랜치에서 pull
- git pull origin main(브랜치명)
- 만약 로컬의 변경파일과 origin의 변경파일이 같이 변경되면 충돌발생 가능성
git 취소 상황
- 특정 스탭까지의 저장 사항을 취소
- woring dir 수정사항 취소
- add 후 취소
- commit 이후 취소
- push 후 origin까지 배포된 사항 취소
- working dir 의 수정사항 취소
- git checkout
- 파일 수정사항의 취소
- git clean -fdx
- 파일을 신규추가 한 경우의 취소
- git checkout . && git clean -fdx
- 수정 및 추가 모두 취소
- 개발IDE 사용시 쉽게 수정사항 취소 가능
- add 이후 취소
- text2.txt 신규 생성
- git status -> untracked file
- git add . -> git status -> Changes to be commited
- git add 취소
- git reset 또는 git restore -staged
- commit 이후 취소
- git reset HEAD^
- unstged 상태로 만듬
- git reset –soft HEAD~1
- stged 상태 유지
- git reset HEAD^
- push 후 origin까지 배포된 사항 취소
- git revert 커밋id
- 특정 커밋버전을 취소시키는 새로운 commit을 생성 후에 다시 push
- git checkout
git diff 와 fetch
- git diff
- 현재 작업 디텍터리와 스테이징 영역 사이의 차이점
- git diff commmit1 commmit2
- 두 커밋간 차이점 비교
- commmit1 기준으로 commit2와의 비교시 차이점 출력
- git diff main origin/main
- 로컬 레포지터리의 메인과 오리진 메인과의 비교
- git fetch origin main
- 현재 체크아웃 되어있는 main과 origin main과의 차이가 있을 경우 차이점을 담은 참조데이터 fetch_head라는 곳에 생성
- 차이점을 참고하여 일단 merge 후에 파일수정하고 다시 push
git stash
- 작업 중단 변경사항을 임시로 저장하고 나중에 다시 적용할 수 있게 해주는 명령어
- git stash init
- 작업저장 목록
- git stash show 인덱스
- 복사본 내용 조회
- git stash pop
- 작업목록에서 제거하면서 저장사항 적용
- git stash apply
- 작업목록에서 유지하면서 적용
git tag
- mian브랜치에서 tag를 붙여 버전을 명시하고, release 할 때 아래와 같이 tag를 붙인뒤 push
- release에는 소스코드가 압축파일로 생성
- 관련 명령어
- git tag 버전명
- git push origin 버전명
- add, commit, push 와는 별도로 진행
feature branch 작업
- 실제 현업에서 branch1, branch1, dev, main 등 여러 브랜치로 관리
- 브랜치란 버전과는 다르게 개발의 경로를 의미
- 일반적으로 production 관련 브랜치는 main, 개발용 브랜치는 dev
- 나머지는 task별로 기능별로 개별적으로 만들어 사용 -> feature브랜치라 정함
- feature 브랜치에서 작업 후 origin/feature로 푸쉬
- Pull Request를 통해 dev까지 merge
- dev에서 main으로 최종 merge
- 주요 명령어
- git fetch origin
- 모든 브랜치 정보 fetch
- git branch
- 현재 저장소에 있는 모든 브랜치 목록
- git branch 브랜치명
- 브랜치명으로 새로운 브랜치를 생성하는 명령어
- 기존에 checkout 되어 있는 브랜치를 기준으로
- git fetch origin
merge 전략
브랜치에서 dev로 PR을 만든 뒤 merge하는 상황
merge / rebase / squash
- merge
- merge 두 브랜치의 변경 사항을 통합하는 기본적인 방법
- branch1에서 넘어온 커밋ID와 신규 머지 커밋ID가 dev에 남게 됨
- rebase
- 한 브랜치의 커밋을 다른 브랜치의 최신 커밋에 “재적용”하는 방식
- 이때에는 브랜치에서 넘어온 커밋ID가 아닌, 새로운 커밋ID가 발급되어 dev브랜치 생성
- merge 커밋ID 남지 않게 되어, 깔끔한 커밋관리가 되나 이후에 branch1에서 다시 merge를 할 때 충돌이 발생하므로, 사용하던 branch1은 더이상 사용이 어려움.
- squash
- squash는 여러 커밋을 하나의 커밋으로 합치는 과정
- local repository에서 여러 커밋을 발생시켰을 때 해당 커밋ID를 통합하여 하나의 커밋ID만들어 dev에는 하나의 커밋ID로만 이력 생성
- rebase, squash는 feachre에서 dev브랜치로 merge할때에는 선택에 따라 가능하나, dev에서 main에 merge할때는 부적절
- merge
This post is licensed under CC BY 4.0 by the author.