※공부 중인 학생이 프로젝트를 진행하며 깃을 사용한 경험을 토대로 작성합니다. 올바른 방법론이 아닐 수 있으며, 틀리거나 다른 내용을 포함할 수 있습니다. 발견 시, 추후에 수정하겠습니다.
실행환경 : MacOs
CLI(Shell) : Terminal (zsh)
1. 프로젝트를 저장할 git 저장소 만들기
저는 깃허브 사이트를 이용해서 저장소(Repository)를 생성하고 내용은 위와 같습니다.
1.owner : 프로젝트를 만든 사람입니다.
2.Repository name:저장소 이름으로 보통은 프로젝트의 이름과 같게 합니다.
3.Description: 프로젝트에 관한 설명이며, 생략 가능합니다.
4.public , private : 말 그대로 저장소 공개/비공개 여부이며 신중히 선택하셔야 합니다. 나중에 비공개 -> 공개는 어렵지 않지만, 공개 -> 비공개는 까다롭습니다.
5.read me:저장소 초기화 시 read me 파일을 생성하여 프로젝트의 주 사용 언어, 라이선스 등을 명시한 파일을 생성합니다.
내용을 작성한 후, 저장소를 만들면
제가 작성한 대로 저장소가 잘 만들어진 모습입니다.
저장소가 다 만들어졌다면 1번째 과정은 끝입니다.
2. 저장소 초기화하기
이제 원격 저장소가 다 만들어졌다면 저 저장소에 내가 만든 파일들을 작업, 병합하는 과정을 알아보겠습니다.
앞으로 설명하는 방법들은 CLI를 사용하거나 GUI 기반의 Source Tree 같은 프로그램을 사용하셔도 무방하지만 CLI를 기반으로 설명 진행하겠습니다.
우선 해야 할 것은 저장소 초기화입니다.
잘 만들어진 저장소 페이지에서 초록색 버튼을 누르면 위와 같은 이미지가 등장합니다.
(code 버튼이 아니라 clone로 등장할 수도 있습니다만, 방법은 동일합니다.)
이후, 해당 링크를 복사한 후, 방법론 이야기를 이어나가겠습니다.
※zsh 등 bash가 아닌 환경의 shell에서는 ctrl + v로 클립보드 붙여 넣기가 안될 수 있습니다.
커맨드 창에서 우클릭 -> paste 기능을 사용하시기 바랍니다.
초기화는 2가지 방법이 있는데,
1. git Clone URL
이 방법을 사용하면 내가 보고 있는 버전의 프로젝트를 다운로드할 수 있고 cd 명령어를 통해 해당 디렉터리로 이동 후,
작업을 완료할 수 있습니다.
이 방법의 장점은 아래 설명하는 방법의 3가지 명령어를 쓰지 않아도 된다는 장점이 있고, 초기화해서 원격 저장소 주소 알려주고 병합하고의 과정이 필요 없다는 장점이 있습니다.
그러나 단점은 내가 IDE에서 작업 중인 workspace와 다를 수 있기 때문에 파일을 덮어쓰거나 하는 과정이 추가적으로 발생할 수 있으며,
클론 한 파일을 워크스페이스에 덮어씌울경우 파일이 꼬이거나 IDE 툴을 재시작해야 할 수 있습니다.
2.
git init > 현재 위치를 git 저장소를 사용할 것을 선언, 초기화함. (로컬 저장소가 됨)
git remote add origin URL > 로컬 저장소는 현재 위치이고, 원격 저장소의 위치가 어디인지 명시함.
git pull origin master > 원격 저장소가 가지고 있는 최신의 버전을 내 워크스페이스에 병합함. (수정사항 깃이 자동 적용함)
1번째 줄에서 mkdir 명령어를 통해 폴더 생성 -> 해당 디렉터리로 이동
git init을 통해 로컬 저장소로 사용할 것임을 명시하고 그 아래줄에 초기화가 잘 되었음을 보여줌.
그다음 현재 디렉터리 뒤에 git:(master)가 표시가 나오면 잘 진행된 것입니다.
이 의미는 git을 실행할 수 있고, 현재 마스터 branch라는 의미입니다.
이후,
git pull origin master을 입력하면 master branch의 최신 작업 내용을 내 로컬 디렉터리에 병합하는 명령어입니다.
작업이 끝난 후, ls 명령어를 입력하면 최초 저장소 생성 시 만들었던 readme파일과 라이선스 파일이 존재함을 확인할 수 있다.
3. 브랜치 만들기
원격 저장소 초기화가 완료되었다면, 브랜치를 만들 차례입니다.
브랜치란?
나뭇가지라는 뜻으로 프로젝트를 진행함에 있어서 각자 맡은 분야가 있을 것입니다.
웹사이트를 예를 들면, 로그인 기능, 회원가입 기능, 뷰페이지 제작, 스크립트 등등,, 이와 같은 파트를 브랜치로 따로 나눠서 작업을 하게 되면 해당 브랜치는 하나의 기능을 전담하는 브랜치가 됩니다. 이런 브랜치들이 다수 생기면 기능도 많아짐을 의미하고 프로젝트의 규모가 커지게 되면서 master 브랜치로 합쳐나가는 과정을 진행하며 변경사항 및 추가사항을 쉽게 적용할 수 있고, 백업 또한 쉽습니다.
브랜치의 의미를 알았다면 한 번 만들어봐야겠죠?
앞서 말씀드렸다시피 괄호 안에 master은 브랜치를 의미합니다.
git branch (만들고자하는 브랜치 이름)
명령어를 실행하면 브랜치 생성이 됩니다
브랜치가 잘 생성되었는지 확인해보죠.
git branch
역시나 잘 생성되었습니다. 확인이 끝났으니
Q를 통해 나오도록 하죠.
그다음, master브랜치의 내용은 버전 관리 겸 백업 겸 놔두고 만들어놓은 브랜치로 이동하겠습니다.
git checkout (만든 브랜치 이름)
해당 명령어를 실행하자마자 브랜치가 바뀌었음을 알려주면서 괄호 안에 제가 만든 브랜치로 잘 바뀐 모습입니다.
여기서 파일을 만들어서 수정하고 원격 저장소에 올리는 과정을 보도록 하겠습니다.
nano text.txt
텍스트 파일 생성 / 편집을 위해 이미지와 같이 작성해주고
ctrl + x
y
enter를 통해 나오고 내용이 잘 써졌는지 확인해보죠
잘 작성되었습니다.
이제 변경사항을 적용하고 ㅈ원격 저장소에 올려보죠
내용이 조금 복잡하지만 별겨 없습니다.
git add . //백업해논 파일과 다른 변경 사항 모두 적용.
git add text.txt //변경사항을 특정 파일만 적용
----------------------------------------------- 변경사항 적용 방법 2가지
git commit -m "어떤 내용을 커밋했는지 텍스트를 적어줌"
-----------------------------------------------변경 사항에 대한 설명
git push //마스터 브랜치일 경우 바로 해당 명령어로 푸시가능
git push -u origin (내가만든 브랜치 이름) //해당 브랜치에서 작업한 내용을 원격 저장소에 올림
그러자 깃 허브에 해당 알림이 떴습니다.
저 알림은 무슨 의미냐면 master가 아닌 다른 브랜치에서 해당 작업을 다 완료하고 master브랜치에게 병합(merge)을 요구하는 과정입니다.
저 ~~~~기능 완료했으니 확인 부탁드립니다.
저 과정에서 프로젝트의 리더는 변경 사항을 체크할 수도 있고, 해당 작업에 대해 코멘트를 남길 수도 있습니다.
해당 변경사항을 수락해보겠습니다.
초록 버튼을 클릭하면 브랜치의 요청 내용이 나옵니다.
아까 브랜치에서 설정한 커밋 메시지가 위에 잘 출력되었고
create pull request 클릭
클릭하면 위와 같이 페이지가 나오는데 대화도 가능하고, 어떤 커밋을 어떻게 했고, 해당 버전에서 Files changed를 누르면 어떤 파일을 수정했는지 알 수 있습니다.
다시 conversation 탭으로 돌아와서 merge pull request탭을 클릭하고 merge confirm을 누르면
잘 merge가 되었고 누가 언제 했는지 어떤 브랜치에서 어떤 브랜치로 병합했는지도 뜬다
병합된 과정이 master브랜치에 잘 커밋되었다.
이 과정처럼 여러 개의 기능이 프로젝트에 붙을 것이다.
그러면 master브랜치에 위와 같이 계속 커밋이 쌓이고 A 기능만 맡은 사원이 ABCD기능이 붙은 최신화 프로젝트를 받으려면
git checkout master //마스터 브랜치로 이동
git pull origin master//master브랜치의 가장 최근의 프로젝트를 내가 가진 프로젝트와 병합함
어떤 저장소로부터 어떤 파일이 수정되었는지 알려주는 모습.
해당 파일을 열어보자.
잘 적용된 모습이다.
이처럼 프로젝트를 쌓아 나가면서 버전 관리 등 협업을 진행하면 됩니다.
만약 혼자 진행하는 프로젝트라면 브랜치를 만들어 add > commit > push 과정을 거친 후
git checkout master로 이동후
git merge (내가 만든 브랜치 이름)을 적용하면 GUI방식이 아닌 CLI환경에서도 병합이 가능합니다.
'IT 정보' 카테고리의 다른 글
RESTful API (0) | 2020.08.17 |
---|---|
리눅스] 파일에 대한 권한 체계 (0) | 2020.07.15 |
리눅스]파일 압축하기 (1) | 2020.07.08 |
error]맥북과 아이폰 연결 안될 때, (0) | 2020.07.02 |
디자인패턴 MVC에 대해서 (0) | 2020.06.30 |
댓글