하나의 예시를 들어보자.
만약 내가 디스코드를 하다가 갑자기 봇이 혼자 뻗어서 화나서 그 봇을 만든 개발자의 깃허브를 가봤다고 치자. 그러면 엄청난 폴더들과 함께 영어들이 가득한 코드 뭉치들이 있는데 이걸 보관해주는 것을 도와주는 한 도구 같은게 바로 "GIT" 이라는 놈이다.사실 이 이전에 이미 개발자는 자기의 봇이 뻗은 걸 알고 긴급점검을 하고 있을테지만 무시하고 우리의 상황으로만 보자.
물론 아래의 사진인 사이트인 깃허브와는 다른 친구다.
위에서 설몀했다시피, 깃허브나 다른 코드를 보관하거나 열람할 수 있는 곳에서 파일을 보관하는 것을 도와주는 아이인데, 생각보다 이게 협업에서도 많이 쓰이고 코드를 한번에 불러오고 저장하는데 간편한 도구라서 은근히 한번 쓰고나면 탈출은 영원히 불가능한 도구이다. 물론 후술할 여러 문제에 대해서 직면하고 나면 버리고 싶은 도구인 것은 변하지 않는다.
뭐 사실 터미널에서 들이박치기로 그냥 써넣어도 된다;
git clone (레포 주소)
이런 식으로만 써도 이미 반 이상 성공한거다. 놀랍게도.
이 코드를 터미널에 쓰면 레포지토리에 있는 모든 파일들이 자신의 컴퓨터로 옮겨진다. 말 그대로 "clone", 복사해온다는 이야기다.
아예 이런 방식이 싫다면 GIT GUI(Graphic User Interface)
를 쓰면 더 편하다. 마치 소스트리나 포크 같은 친구들이 이에 속한다.
아래의 사진은 포크라는 아이이다.
하지만 이런 GUI를 자주 쓰면 터미널과 급격하게 멀어지게 되어 마치 필자처럼 GIT 자체를 다시 공부해야 할 수도 있으니 둘다 섞어가면서 쓰는게 더 이득이라는 것을 일러둔다.
똑같이 예시를 들어보자.
우리가 듀랑고의 개발자라고 해보자. 사실 망한 게임이지만 내 인생겜이니까 봐주세요 ,,,
이제 서버 오픈을 앞두고 점검을 다 마친뒤에 오픈을 했는데 과부화로 인해 서버가 죽었다고 해보자. 이럴때 우리의 깃허브 브랜치에 있는 물론 실화
main
브랜치에 들이박을 것인가 ? 그러면 대참사다 ,,, 그래서 그런걸 해결하기 위해서 이런 Flow가 존재하는건데, 주로 5개인 이런 워딩이 맞는지 모르지만, 무려 진짜 그러면 욕 뒤지게 먹는다 ,,,,
main, delevop, feature, relese, hotfix
가 있다고는 하지만 늘어나기도 하고, 줄어들진 않는다. 왜냐면 저 5개가 필수사항이기 때문이다.
main
브랜치는 버전을 올린다는 생각을 하면 된다.
저기에 릴리스 버전인 vX.X가 올라가는 느낌인거다.
delevop
브랜치는 main
브랜치에서 클론해온 하나의 메인 브랜치 같은 친구이다.
이 브랜치를 통해서 아래의 브랜치들을 만들고 머지하는 방식으로 진행한다.
feature
브랜치는 기능 추가를 할때 만드는 브랜치인데 주로 쓰이는 방식이 다음과 같다;
로그인 기능을 만든다고 했을때 feature/login
나, feat/login
으로 사용되고는 한다.
relese
브랜치는 공식 출시 전에 테스트하는 브랜치라고 생각하면 쉽다고 한거 같다.
근데 필자는 아직 사용해본적이 없다 ,,, 언젠가 쓸거라고 생각이 드므로 일단 작성 ,, 해본다.
hotfix
브랜치는 급한 버그나 오류가 생겼을때나 위에서 서술한 문제가 생기면 급하게 delevop
아래로 만들어다가 버그를 해결하는 브랜치라고 한다.
만약 로그인에 문제가 생기면 hotfix/login
같이 만든다고 생각하면 된다.
git branch feature/login
으로 먼저 브랜치를 만들고,
코딩을 하다가 커밋할 내용이 생기면,
git commit -m '[FEAT] : ⚙️ 로그인 기능 구현'
과 같이 커밋을 날리고,
git push
까지 하는 것으로 끝난다.
이러면 Pull Request에는 feature/login
에서 Push헀으니 변경점을 확인한 다음에, delevop
에 merge하면 된다.
근데 이런 도구에도 치명적인 단점이 있다. 바로, conflict다.
이게 알고보면 단순한 문제인데, 여러명이 동시에 작업하는 깃 특성상 내가 이 라인에 이 코드를 넣었는데 다른 사람이 같은 이 라인에 코드를 작성한다면 당연히 컴퓨터의 입장에서는 뭘 먼저해야 할지 모르는 난관에 빠진다.
그걸 수정하기 위해서 코드 상에서 안내를 해준다. 마치 밑에처럼;
import UIKit
import SnapKit
class TypingMemoViewcontroller: Viewcontroller {
let typingMemoField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
<<<<<< main
view.backgroundColor = .white
======
view.backgroundColor = .orange
<<<<<< feature/Memo
// 아래에 이어지는 코드 생략 ...
}
}
이런 경우에는 내가 만들려고 했던 것에 맞춰서 꺽쇠를 지우고 수정해주면 된다.
마치 아래와 같이 말이다;
import UIKit
import SnapKit
class TypingMemoViewcontroller: Viewcontroller {
let typingMemoField = UITextField()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .orange
// 아래에 이어지는 코드 생략 ...
}
}
좀 이렇게 정리하고 보니까 GIT도 공부가 필요한 주제임을 알았다.
이제 내일의 내가 할일을 정리하는 것으로 끝내보겠다.
- 내일의 내가 할일
- GIT 컨벤션 익히기
- 커밋 컨벤션 익히기
- 두가지를 실제로 사용해보기 위한 레포를 파서 컨벤션 지켜보기
- GUI 말고도 터미널로도 GIT 사용해보기