협업에 가장 중요한 git 사용법에 대해 알아볼 것이다.
이전 프로젝트 할 때 굉장히 복잡하고 어려웠다.. 겨우 커밋 푸쉬 정도만 이해한 수준... 하지만 이번에 확실히 정리가 됐다!! 그림으로 설명하니 이해가 훨씬 쉬워졌다. 앞으로는 그림을 많이많이 활용하는 것이 좋겠다😘
1. 개발 방법론
1) Waterfall (폭포수 모형)
- 순차적으로 개발
- 체계화된 문서로 안정적인 진행
- 프로젝트 진행 상황을 명확하게 파악 가능
- 완료된 단계는 다시 되돌리기 어렵다.
2) Agile

- 짧은 주기로 개발 단위를 반복해 큰 프로젝트를 완성해 나간다.
- 즉, 짧은 주기로 설계, 개발, 테스트, 배포 과정을 반복한다.
- 요구 사항을 작은 단위로 나눠 솔루션을 만들고, 빠르게 보여줌으로써 요구사항 검증을 한다.
- 협력과 피드백의 과정을 반복한다.
- 유연한 일 진행과 빠른 대응이 가능
3) Scrum(스크럼)

- 상호 점진적 개발방법론
1. 개발자-고객간에 지속적인 소통을 통해 요구사항 수용
2. 고객이 결정한 사항을 우선적으로 시행
3. 팀원과 주기적인 미팅을 통해 프로젝트 점검
4. 주기적으로 제품 시현하고 고객으로부터 피드백 수용
- SPRINT : 작은 기능에 대해 계획,개발,테스트,기능완료 하는 것.
- 일반적인 스프린트 주기는 1~2주
4) Kanban(칸반)

- 단계별 작업 현황을 열(Column)형식의 보드형태로 시각화하는 프로젝트 관리 방법
- 업무 흐름의 시각화
- 진행 중 업무에 대한 제한
- 명시적 프로세스 정책 수립
- 업무흐름의 측정과 관리
2. git
- 소스코드를 효율적으로 관리하기 위해 만들어진 분산형 버전관리 시스템
- 소스코드의 변경 이력을 쉽게 확인할 수 있다.
- 특정 시점에 저장된 버전이나 특정 시점으로 돌아가기 위해 사용한다.
1) branch(브랜치)
- 독립적으로 어떤 작업을 수행하기 위해 필요한 개념

-> A라는 사람이 로그인 기능을 맡고 B라는 사람이 버그수정을 할 때 최초 브랜치에서 파생한 브랜치를 만들어 작업을 진행하고, 최초 브랜치에 merge하여 각자가 작업한 것을 합칠 수 있다.
2) 명령어
git branch
git branch "브랜치명"
git branch "전환 브랜치명"
git -d "브랜치명"
- branch 삭제
- 단, 삭제할 브랜치가 현재 브랜치에 합쳐져 있을 경우에만
git checkout -b "만들 브랜치명"
- 한번에 새로운 브랜치 생성하고 그 브랜치로 이동한다.
3) Merge
- git 브랜치를 다른 브랜치로 합치는 과정

- 서로 같은 파일의 같은 부분을 수정했을 때 -> 충돌!
-> 수동으로 해결해야 한다.

3. 추가 지식
1) branch 종류

main
- 제품으로 서비스 될 수 있는 브랜치
- 배포 이력을 관리하기 위해 사용
- 배포 가능한 상태만을 관리하는 브랜치
- 이전엔 master 브랜치로 사용했었음.
develop
- 다음 출시 버전을 개발하는 브랜치
- 기능 개발을 위한 브랜치들을 병합하기 위해 사용
- 평소 개발을 진행하는 브랜치
- dev, devel으로 사용함
feature
- 기능 개발을 진행하는 브랜치
- 새로운 기능 개발 및 버그수정 할때마다 develop에서 분기
- 공유할 필요가 없어서 로컬에서 진행 후 dev에 merge
- 이름 : feature/ 또는 feat/
release
- 출시 버전을 준비하는 브랜치
- 배포를 위한 전용 브랜치
- 이름 : release-0.0
hotfix
- 출시 버전에서 발생한 버그 수정 브랜치
- 배포한 버전에 긴급하게 사용해야 할 때 사용
- Main에서 분기
- hotfix-0.0
2) git 과정

- 작업공간에서 리무트로 옮기는 작업은 이미 이전에 배웠어서, 리무트에서 작업공간으로 옮기는 작업을 유의해서 볼 것!
- git reset : 가장 최근 커밋을 취소하고, 변경 내용을 보존
- git reset -hard : 커밋 취소와 동시에 변경 내용을 삭제
- git fetch : 원격(리무트)의 변경사항을 로컬로 가져옴
- git pull : 원격의 최신 변경사항을 가져와서 현재 작업중인 브랜치에 병합
- git clone : 원격 저장소의 복제본을 로컬에 생성하는 작업 수행
3) pull request
- push 권한이 없는 오픈 소스 프로젝트에 기여할 때 많이 사용
- "내가 수정한 코드가 있으니 내 branch를 가져가 병합(merge)해주세요."
- 즉, 포크(Fork)한 뒤, 포크한 저장소에서 변경 사항을 가지고 원래 저장소의 소유자에게 병합(merge)해달라고 요청하는 것이다!
- 당황스러운 코드 충돌을 줄일 수 있고, 효율적으로 코드 관리를 할 수 있다.


4) .gitignore
- git 관리에서 제외할 파일을 지정하는 파일
- 특정 파일을 제외하기 위해서는 git에 올리기 전, gitignore에 파일목록을 미리 추가해야 한다.
*.txt
!test.txt
test/
/test
4. 기타 고려사항
1) nomalize.css
2) reset.css