우선 나는 Visual Studio Code, Gitkraken,cmd(iterm2) 환경에서 하였다.
간단히 커밋과 푸시를 넘어서서 브랜치라는 개념과 merge, fetch라는 개념이 나오면서 상당히 초반에는 이해를 하기 힘들어서
정리를 해두려한다.
깃허브에 원하는 repository를 만든 뒤, setting에서 Manage access->colaborator를 설정한다.
Colaborator와 Contributor라는 개념이 있는데, 같이 협업을 하는 동료의 경우에는 Colaborator으로 설정해야한다.
Contributor의 경우에는 OSS, 즉 오픈소스에 기여를 하기 위해 설정하는 것이다.
추후 나오겠지만 pull request를 통해 master branch에게 허락받아 기여하는 것,
repository 생성 후 visual code studio에서 해당 깃허브의 repository를 clone 하여 작업하게 되는데, clone하게 되면
로컬(본인의 컴퓨터)에 설정한 디렉토리에 해당 레포지터리를 저장하게 된다.
이후 깃크라켄에서 open folder를 통해 방금 저장한 디렉토리를 열면 깃허브의 레포지토리와 연결이 가능하다.
(깃크라켄이 학생무료 정책도 있고 GUI가 직관적이여서 이용하기편해서 추천한다.)
잠시 저장소의 개념에 대해서 정리하고 가자면,
중앙 원격 저장소, 자신의 원격 저장소, 로컬 저장소로 나뉠 수 있다.
중앙 원격(remote) 저장소
다수가 참여하는 프로젝트를 관리하는 데 사용하는 그룹 계정의 원격 저장소
Organization을 만드는 방법은 GitHub 페이지 오른쪽 위에 있는 “+” 아이콘을 클릭하고 메뉴에서 “New organization”을 선택.
Organizatoin의 사용자와 저장소는 팀으로 관리되고 저장소의 권한 설정도 팀으로 관리한다.
자신의 원격(remote) 저장소
remote repository 라고 불림
파일이 GitHub 전용 서버에서 관리되는 원격 저장소
로컬(local) 저장소
local repository 라고 불린다.
내 PC에 파일이 저장되는 개인 전용 저장소
참고로 terminal창에서 git clone 명령으로 중앙 원격 저장소(remote repository)를 복제하여 자신의 로컬 저장소(local repository)를 만들 수 있다. 프로젝트 참여자는 이 로컬 저장소에서 작업을 수행한다.
$ git clone [중앙 remote repository URL]
//해당 디렉터리를 빈 Git 저장소로 만드는 작업
$ git init
// 현재 작업 중인 Git 저장소에 팀의 중앙 원격 저장소를 추가한다. 이름을 origin으로 짓고 긴 서버 주소(URL) 대신 사용한다.
$ git remote add origin [중앙 remote repository URL]
// 중앙 원격 저장소(origin)의 master 브랜치 데이터를 로컬에 가져오기만 하는 작업
$ git fetch origin master
fetch와 pull 차이
fetch
remote 저장소에서 단순히 데이터만 들고옴.
pull
데이터를 들고와 병합(merge)까지 실행
Pull=fetch+merge 인 것이다.
자 이제 브랜치에 대해서 알아보자.
브랜치는 가지라는 뜻으로 새로운 기능 개발을 위해 격리된 branch를 이용하는 것이다.
만일 하나의 프로젝트를 모두 다 같이 수정, 병합의 과정을 무작위 적으로 한다면 같은 부분의 코드를 동시에 수정하거나
이미 수정이 완료된 상태인데 그 전부터 작업 중이여서 후에 다시 덮어쓴다던지 이러한 문제점이 발생할 것이다.
이를 예방하기 위해 브랜치라는 새로운 가지를 만들어 리모트의 master 브랜치에게 pull request를 보내어 허락을 받고
안정적으로 관리를 하는것이다.
다시 돌아가서.
현재 중앙 remote에는 orign이라는 이름의 리모트가 자동 추가 되어있을것이다.
그 안에 master branch가 있고 (혹은 main branch) 내 로컬 영역에도 master branch가 있다.
여기에서 만약 내가 새로운 브랜치를 만들고 싶다면
아래의 코드를 터미널에 입력한다. 물론 현재 터미널에서의 위치는 로컬 레포지터리이다.
$ git checkout -b [branch name]
//위의 명령어는 아래의 두 명령어를 합한 것
$ git branch [branch name]
$ git checkout [branch name]
이를 통해 만들어지는 브랜치는 로컬 영역에만 존재하여 다른 협업자의 눈에는 보이지 않는다.
왜냐하면 remote repository에는 존재하지 않기 때문이다.
로컬에서 만들어진 브랜치를 통해 소스코드 개발을 한 뒤, 아래의 코드를 통해 커밋한다.
$ git commit -a -m "Write commit message"
위의 명령어는 아래의 두 명령어를 합한 것
$ git add . # 변경된 모든 파일을 스테이징 영역에 추가
$ git add [some-file] # 스테이징 영역에 some-file 추가
$ git commit -m "Write commit message" # local 작업폴더에 history 하나를 쌓는 것
커밋을 완료했다면, 내가 작업한 내용을 포함한 브랜치(feature/login branch)를 중앙 원격 저장소에 올린다.
이는 로컬 저장소의 백업 역할을 할 뿐만 아니라, 다른 contributor들이 나의 작업 내용과 진도를 확인할 수도 있어 좋은 습관이라 할 수 있다.
// 로컬의 기능 브랜치를 중앙 원격 저장소 (origin)에 올린다.
$ git push -u origin feature/login branch
// -u 옵션으로 한 번 연결한 후에는 옵션 없이 아래의 명령만으로 기능 브랜치를 올릴 수 있다.
$ git push -origin feature/login branch
이제 프로젝트 관리자에게 자신의 기여분을 반영해 달라는 풀 리퀘스트를 던지면 된다.
프로젝트 관리자에게 자신의 코드를 중앙 원격 코드 베이스에 반영해 달라고 요청해야하는데 새로 만든 기능 개발용 브랜치도 중앙 저장소에 올려서 팀 구성원들과 개발 내용에 대한 의견(코드리뷰)을 나눌 수 있다.
프로젝트 관리자는 변경 내용을 확인한 후 중앙 원격 코드 베이스에 병합(merge)한다.(이는 깃허브홈페이지에서 이뤄진다.)
마지막으로 그렇다면 로컬영역에서 master branch는 언제 사용하는가?
중앙 원격 저장소와 자신의 로컬 저장소를 동기화하기 위해 로컬 저장소의 branch를 master branch로 이동후 pull하여 자신의 로컬레포지토리를
업데이트한다.
// 로컬 저장소의 branch를 master branch로 이동
$ git checkout master
//중앙 원격 저장소(origin)의 메인 코드 베이스가 변경되었으므로, 프로젝트 참여하는 모든 개발자가 자신의 로컬 저장소를 동기화해서 최신 상태로
//만들어야 한다.
$ git pull origin master
이제 위와 같은 방법으로 새로운 기능을 추가하기 위해 그 작업에 대한 branch를 생성하여 작업한다.
중앙 원격 저장소와 동기화된 로컬 저장소의 master branch에서 새로운 작업에 대한 branch를 생성하여 작업을 시작한다.
로컬에서 이전 작업에서 완료한 브랜치를 삭제하여도 remote에는 남아있다.
깃크라켄에서는 브랜치들의 병합, 커밋 등의 과정을 매우 직관적으로 확인할 수 있어 중간중간에 확인하면서 실행하면 헷갈리지 않는다.
'Computer > Error' 카테고리의 다른 글
Wamp 설치 후 서버 동작확인 문제 (0) | 2021.04.06 |
---|---|
[Github] binary file conflict problem (0) | 2021.04.03 |
[zsh설정] zsh-syntax-highlighting, history-substring-search 설정 Error 해결방법 (0) | 2021.03.22 |
[Mac] terminal's PATH Setting problem (0) | 2021.03.04 |
PS를 할 때 시간 단축을 위한 입출력 설명 (0) | 2021.03.03 |