이번에는 깃과 연결된 내프로젝트를 gitlab에 올리는 작업을 할 예정입니다
사용할 기능은 fetch, checkout ,branch , commit , push ,merge 입니다.
각 기능별 사용 방법을 작성해볼 예정입니다
일단 git은 다음과 같은 구조로 되어있습니다.
master branch만 있다고 가정하고 설명하자면 , 서버에있는 GITBAB (repository ) 은 origin/master 입니다.
그리고 로컬GITLAB은 master 라고 할 수 있습니다.
우리가 웹으로 우리 깃을 들어가 clone을 선택한후 다운받으면 master/origin의 정보를 다운 받는것 입니다.
그리고 IDE에서 코드를 작성하다가 commit을 하면 로컬 GITLAB에 적용되고 , push를 하면 서버 GITLAb에 업로드하는 것 입니다.
1. fetch = fetch는 내가 작업을 하는 동안 누구간 서버GITLAB에 push한 내용이있는지를 체크하는 기능입니다.
저는 git push 나 merge를 하기전 반드시 fetch 를 통해 업데이트내용을 받습니다.
2. branch : 브런치는 master에서 어떤 작업이 있을경우 master에는 영향을 주지않고 작업을 진행할수 있는 공간이라고 할 수있습니다. A라는 서비스 A' 기능을 추가할때 master에서 진행할 수도 있지만 , 코드를 작성하고 수정하는 부분에서 서비스 코드에 안전성 등을 고려하여 영향을 주지않고 진행하고싶은 경우 branch를 만들어서 작업할 수 있습니다. 그리고 코드의 테스트가 끝난 후 안정성이 확보되었다면 master 와 branch를 merge하여 코드를 합칠수도 있습니다.
branch를 만드는 과정은 아래와 같습니다
위 그림처럼 브런치를 만들고 checkout new branch를 선택하면 생성한 브런치로 바로 변경됩니다.
3. checkout : 체크아웃은 브런치간 이동을 하는 기능입니다. master 브런치에서 k_main이란 브런치로 이동할 경우 체크아웃이라고 표현하며 기능은 team -> switch to 에 있습니다.
4. commit & push : GITLAb에서 커밋은 IDE에있는 코드를 로컬GITLAB으로 업로드하는 작업을 의미합니다. 그리고 로컬 GITLAB 에서 서버GITLAB 으로 이동하는것을 푸시라고 합니다.
커밋을 누를 경우 stagedChanges 에 있는 파일들이 실제로 commit됨.
만약 unstaged Changes 에 있는 파일을 추가 stageChage로 추가하고싶다면 + 표시나 , 해당 파일을 우클릭하여 index to add 해주면 됩니다.
5. merge : merge는 서버 GITLAB에 있는 코드와 내 로컬 GITLAB과 합치는 작업을 의미합니다.
내가 작업을 하는 동안 누군가 서버에 코드를 작성하고 push 를 한 경우 저는 코드와 동기화를 하기 위해 merge를 할 필요 가 있습니다.
merge의 경우 rebase로 비슷하면서 다른 기능이 있습니다. rebase를 사용할 일이 아직없어서 따로 사용은 하지않았지만
원리는 git history를 간편화 시켜준다는 느낌입니다.
저는 이 자료가 이해에 도움이 되더라고요.
B 에서 브런치를 만들어 작업을 하고있습니다. 제 작업은 아직 merge를 하지않앗고 , X,Y까지 커밋이되었습니다. 이제 merge를 하려고 하는데 누군가 master에서 C,D 를 커밋한 상황입니다.
이때 그냥 merge를 한다면 그림 1과 같이 되고 , rebase를 한다면 그림 2 처럼 됩니다
backlog.com/git-tutorial/kr/stepup/stepup1_4.html
이거 말고도 stash 라는 기능이있는데 아직 사용 해보지못해서 추후에 사용해보고 알려드리도록 하겟습니다.
마지막으로 제가 보통 commit하는 순서를 기록해보겟습니다.
1. checkout branch ( 작업할 브런치로 이동 )
2. merge to origin/master ( 최신 origin/master 다운로드 )
3. 코드 작업 / 테스트 / 작업완료
4. fetch ( 작업하는동안 origin/master에 다른 push가 있는지 확인 )
5. merge to origin/master
6. commit and push ( 서버 GITLAB 내 브런치에 upload )
7. checkout master ( 마스터 브런치로 이동 )
8. merge to mybranch ( 서버GITLAB에 내 브런치와 동기화 )
9. synchronize workspace ( master 브런치상태의 IDE와 비교 )
10. commit and push
더 좋은 방법이있다면 피드백해주시면 감사하겠습니다.