■GIT■
●필수 리눅스 명령어●
(터미널: git bash(윈도우), terminal, iterm(맥os), vscode)
TIP. 데스크탑의 폴더를 더블 클릭해서 들어간 것과 같은 효과.
pwd(prind working directory)
a. directory는 쉽게 말해 folder 즉, ‘저장소’라 보면 된다.
b. “현재 내가 작업하고 있는 폴더를 보여줘”
c. ~표시: Home경로. Desktop(바탕화면)이라는 디렉토리 보다 더 상위에 있는 폴더.
/ Users/shy 와 같은 것으로 생각하면 됨.
ls(list)
a. "현재 위치 해 있는 디렉토리 안에 있는 폴더 & 파일 내역을 보여줘.“
ls -a(list -all)
a. ”숨겨진 파일(보통 .으로 시작)도 모두 보여 줘.”
b. 일반인들은 볼 필요가 없는 컴퓨터 자체 설정파일, 폴더 등.
cd 폴더명(change directory)
a. "(ls 명령어에서 확인된)폴더로 이동"
b. cd만 치면 다시 home directory로 되돌아가 진다.
c. cd.. : "한 단계 위의 폴더로 이동해줘"
d. cd 폴더명/폴더명 : “한 번에 더 깊이 들어가기”
mkdir 폴더명 (make directory)
a. "현재 경로에서 “폴더”를 생성해줘"
touch 파일명
a. "현재 경로에서 “파일” 생성해줘"
b. 정확히는 파일의 생성뿐만 아니라, 날짜와 시간을 변경하는 명령어
TIP. Clear : 터미널이 전부 지워진다.
●Git&Github의 개념●
●Git 필수 명령어●
※ Please tell who you are 에러 발생
1. git config --global user.name 유저네임
2. git config --global user.email 유저이메일
그냥 git push 명령어는 main에 곧바로 연결된다는 것에 주의하라.
기능브랜치에 한하여만 가능하고, 바로 윗단계의 브랜치에 push할 수는 없다.
만약 그렇게 할 경우, 이런 경고문이 뜬다.
fatal: The current branch modify has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin modify
To have this happen automatically for branches without a tracking
upstream, see 'push.autoSetupRemote' in 'git help config'.
※ 처음할 때 나오는 경고문
git config pull.rebase false #merge > 일단 이것만 복붙하면 된다. rebase 지금은 글쎄?
git config pu..rebase true #rebase
git config pull.ff only #fast-forward only
※ vim 에디터가 뜰 경우
esc -> : -> wq -> enter
TIP. push, pull은 팀원간의 협의하에 최소한의 기능단위에서 해주는 것이 좋다.
또한, 충돌을 막기 위해 수시로 pull하며 미리 테스트해두는 것이 좋다.
git log 후 commit ID 복사 -> git reset --hard ID : 이전 커밋상태로 이동
push -f :강제 푸쉬
: bb가 커밋된 상태에서 이를 지우고 싶어 리셋하여 이전 커밋상태로 이동 후, 로컬에서 바로 푸쉬(cc)를 할 경우, 깃허브 상에 이미 다른 커밋 기록(bb)이 남아있기 때문에 커밋이 겹쳐서(bb&cc) 바록 푸쉬가 안된다. 이경우, 강제로(force) 푸쉬해 덮어 씌울 수 있지만, 이전 기록(bb)이 아예 사라진다는 단점이 있다.
git reflog
: 위와 같은 과정을 통해 로그상 사라진 커밋까지도 보여 주는 더욱 구체적인 커밋 로그창을 띄어준다. 이를 다시 복사한 후 reset 해준다.
※ push & pull request
push는 ‘로컬’의 기능 브랜치를 깃허브에 올리는 것이며, pull request는 깃허브상에서‘만’ 그 올려진 것들을 그 상위 브랜치인 dev브랜치 혹은 main 브랜치에 합치는 것이다.
다시말해, push는 단순히 깃허브에 올리는 것이고 곧바로 상위 브랜치에 합쳐지지는 않는다. pull request는 push된 코드를 상위 브랜치와 머지하는 것이다.
그렇기에, push를 눌렀을 때 pull 하라고 경고문이 뜨는 것은 자신이 만든 기능branch에 한하여만 뜨는 것이고, dev branch는 애초에 push가 되지도 않는다. 한단계 건너뛰어서 바로 dev로 push하여 합치는 것은 안되고 코드 리뷰를 통해 깃허브상에서 merget되는 것이다. 물론 dev내용을 pull해오는 것은 가능하다.
※ pull request: 깃허브 내 merge 기능 (base기준으로 merge됨)
※ 실전 응용
* 일반적으로 main 브랜치는 배포용으로 활용된다. 만약 이 main 브랜치에 곧바로 합칠경우 다음과 같은 문제가 발생한다. 우선, 완벽하게 기능을 개발해야 머지가 가능하다. 그러나 이 경우 다 만드는데 오래 걸리며 또한, 다른 사람들끼리 각각 만들고 머지했을 때, 버그가 생겼을 경우, 버그가 발생한 지점이 정확히 어디인지 확인하기가 힘들 수 있다.
* 이를 해결하기 위해, 일반적으로 개발용 branch 즉, dev branch를 따로 만들어 놓는다.
그리하여, 기능 브랜치에서 기능을 만든 후, main에 바로 합치지 않고, develop에서 합쳐 테스트를 한 후 완성된 결과물을 배포용에 합친다.
Main branch: 배포용
develop branch: 테스트용
기능 branch: 기능 개발용
*두번째로, 각각은 깃허브 코드리뷰상 문제가 없어도 막상 합치게 되었을 때는 충돌이 발생할 수 있다. 층돌된 걸 배포했을 경우, 이 오류있는 코드를 협력자들이 pull하게 될 수도 있다. (사실, 실제로 이를 막기 위해 github상에서 충돌날경우 merge pull request 가 활성화가 안된다.)
* 이를 해결하기 위해, dev브랜치에 있는 타인의 코드를 내 로컬 브랜치에 pull하여 로컬에서 먼저 테스트하여 충돌을 미리 해결해 놓는다.
※ feature 단위에서 백업용으로 hotfix브랜치에 merge해주는 것도 좋다. 스토리보드로 코드를 연결하게 되면 빌드시 xml 코드로 바뀌어서 조금만 잘못건드리면 충돌이 생겨서 이를 방지하기 위해 백업을 만들어 두면 좋다.
※ 단계
1. 팀장: 초기 코드 작성 및 gitgub 업로드
: 폴더 생성 및 초기 코드 작성 -> git init, add, commit -> git repository 생성
-> git push(github에 업로드)
2. 팀장: dev 브랜치 생성
: git switch -c dev(로컬에서 dev 브랜치 생성) -> git push origin dev 하여 git hub에 반영(github에서 바로 만들 수도 있음) -
3. 팀장: dev 브랜치를 default로 생성하여 최종브랜치 변경
: settings -> default branch -> 변경
4. 팀원들 collaborator로 등록
5. 팀원: git clone하기
6. 전체: 기능 브랜치 생성 및 기능 개발 후 업로드
: git branch -c feature/signup -> git push origin feature/signup
(이때, dev branch는 pull request를 받은 기능 브랜치가 합쳐지는 장소이기 때문에, dev에 바로 push하는 것이 아니다. 또한 main과 dev는 그 브랜치를 최초로 만든 팀장에게만 권한이 있기에, 마음대로 push할 수도 없다.)
7. 전체: pull request 생성 (dev에 합쳐도 될까요?)
8. 전체: 리뷰 요청하기
9. 전체: 코드 리뷰어는 file changed 항목에서 코드 리뷰해주기
: + 버튼 눌러 start review & finish review
10. 전체: 합치기 전 내 로컬에서 충돌 해결 및 테스트
: 기능브랜치에서 git pull origin dev -> 수정 후, 다시 push하고 깃허브에서 merge
11. 전체: 추가기능구현
: dev 브랜치로 이동 후 pull 하여 내 로컬의 dev에도 변경사항 반영
12. 반복..