버전관리?
협업 프로젝트에서는 버전관리가 필요하다. 시간이 지날수록 어느 파일이 최종 업데이트 파일인지 분간하기 어려워지기 때문이다.
Git은 소스코드 버전관리 시스템이다. 개발 과정에서 원하는 시점을 저장하고 자유롭게 이동하여 소스코드를 추가, 삭제 할 수 있게 해준다,
오류가 일어나도 저장된 시점으로 되돌아가면 되기 때문에 유용하다.
이를 사용하지 않고 시점마다 프로젝트를 압축해서 저장한다면 압축파일이 무한 증식 하겠지?
이럴 때 사용하는 기술이 git(깃)이다.
다양한 타이밍에 코드상태를 기록할 수 있고 다양한 사람들에게 공유할 수 있다.
git init
Git을 사용하기 위해선 Xcode Project가 포함된 경로에 Git을 설정한다.
Repository(저장소)
git init을 사용하여 경로에 Git을 설정하면 Xcode Project가 포함된 경로는 Repository라고 불리게된다.
버전을 관리할 파일들이 보관된 저장소라는 의미이다.
이 Repository는 상태별로 파일을 압축하거나 저장하진 않는다.
Git은 상태마다의 파일을 갖고 있는게 아니라 그 상태의 파일 코드를 기억한다.
이 Repository는 우리가 init을 활용하여 개설할수도, 다운로드할수도 있다.
merge
a작업자가 작업한 파일과, b작업자가 작업한 파일 또는 각각 다른 작업자들이 하나의 프로젝트를 작업할 때, 작업자들이 작업한 파일들을 하나의 프로젝트로 합칠 때 사용한다.
공유하고 싶지 않은 파일은?(.gitignore)
.gitignore파일에서 공유하지 않을 파일을 설정할 수 있다.
git에서 완전히 무시해야 하는 파일의 확장자나 이름을 적어놓으면 Repository에서 완전히 투명인간 취급된다.
용어정리.
1. Repository(저장소): 파일을 저장해두는 곳
- Remote Repository: GitHub, GitLab등으로 공유되는 온라인상 위치
- Local Repository: 맥북 내의 경로로 존재
2. Clone(클론): Remote Repository를 Local로 가져오는 행위
3. Branch: 저장소에서의 작업 공간
한개의 작업공간에서 두 명의 개발자가 하나의 화면을 개발할 경우 빌드가 안되거나 다양한 문제가 생길 수 있다.
그래서 하나의 파일을 각자의 작업공간(Branch)를 만들어서 한 화면에서 한 명은 TableView를 만들고, 한 명은 Navigation Bar를 만든다던지..
이런 작업을 수행해야한다.
가지를 치는것처럼 공동의 작업공간(Branch)을 개설하고, 작업공간(Branch)에서 또 개인의 작업공간(Branch)을 각자 만드는 식으로 사용된다.
또한 각자의 Branch를 생성하고 공동Branch로 합치는 것도 가능하다.
보통 작업을 시작한다거나 새로운 화면을 만들 때는 새로운 브랜치를 만들어서 시작한다.
4. Commit
Branch에서 작업을 하고 완성을 했으면 작업물을 Repository가 기억하고 있어야한다. 이런 특정한 시점의 파일 상태를 기록하는 행위를 Commit이라고 한다.
Commit은 파일의 상태에 따라 원하는 시점의 파일의 상태를 기록할 수 있다.
화면이 하나씩 완성 될 때 마다 파일의 상태를 Commit(기록)할 수 있다.
Commit의 시점은 개발자가 정하면 된다.
이런 Commit을 구분하고 알아보기 쉽게하기위해 Commit message를 함께 등록한다.
5. Push
Local Repository에 계속 파일의 상태 Commit들이 쌓이게 되면 다른사람들에게 공유되지 못한다.
이렇게 Local에만 쌓여있는 Commit들을 Remote Repository로 공유시키는 행위를 Push라고 한다.
6. Pull
타인이 업로드한 Remote Repository에 존재하는 Commit들을 확인해야한다면 Pull이라는 행위로 Local로 가져올 수 있다.
git checkout -b <브랜치이름> // Git Branch 생성
//보통 작업을 시작한다거나 새로운 화면을 만들 때는 새로운 브랜치를 만들어서 시작한다.
//보통 feature/uploadViewController처럼 feature로 시작한다?
// git checkout -b feature/refactoring
git checkout <브랜치이름> // 특정한 이름의 Git Branch 이동
git status // 새로 추가된, 수정된 파일을 확인
git diff <status에서 나온 경로> // 파일 내에 상세하게 어느 부분에서 변경이 일어났는지 알 수 있다.
git add . // 전체 파일 수정을 추가
git add <파일> // 특정한 파일 수정을 추가
git commit -m "커밋메세지" //추가한 수정으로 Commit 생성
git pull origin 브랜치이름 // Remote Branch의 최신 내용을 가져옴
git push origin 브랜치이름 // Local Branch의 최신 내용을 업로드
보통 작업을 시작한다거나 새로운 화면을 만들 때는 새로운 브랜치를 만들어서 시작한다.