[ 목차 ] 1. git이란? 2. git 설치 3.github에 로컬 프로젝트 올리기 4. github에 있는 프로젝트 내 로컬에 가져오기 5. 프로젝트 중간에 github에 있는걸 내 로컬에 가져오기 6. 사용하고 있는 git 관련 프로그램들 정리
1. git이란?
📌git
오픈 소스 버전 관리 시스템(VCS: Version Control System)
로컬에서 버전 관리되어 자체로 구축해야함
소프트웨어 개발 및 소스 코드 관리에 사용
문서 작업할 때면 이전 내용으로 다시 돌아가서 작업해야할 때가 있다. 이를 해결하기 위해 백업용 복사본을 만들기도 하지만 관리하기 번거롭다. Git이란 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'이다. git을 이용해서 소스코드가 변경된 이력을 확인할 수 있고, 특정 시점에 저장된 버전과 비교하거나 해당 시점으로 되돌아갈 수도 있다.
git을 통해 로컬에서 프로젝트의 기록을 스스로 관리할 수 있으며, 브랜치(branch)를 생성하여 이전 브랜치(branch)로 복구, 삭제, 병합이 가능하다. git은 로컬 저장소를 사용하기 때문에 다른 개발자와 실시간으로 작업을 공유할 수는 없다. 혼자 작업하거나 폐쇄적인 범위 내에서의 협업이라면 Git만 사용해도 무방하다.
이력을 관리하는 저장소
📌github
Git Repository를 위한 웹 기반 호스팅 서비스
클라우드 서버를 사용(원격)해서 로컬에서 버전 관리한 소스코드를 업로드하여 공유 가능
자체 구축이 아닌 빌려쓰는 클라우드 개념
분산 버전 제어, 액세스 제어, 소스 코드 관리, 버그 추적, 기능 요청 및 작업 관리를 제공
github는 원격저장소로, 개인이 사용하는 용도라기 보다는 많은 사람들이 공유하는 저장소로 사용되는 경우가 많다. 로컬 파일을 깃허브 클라우드에 업로드(push) 하여 서로 다른 위치에 있는 여러 사용자가 함께 작업할 수 있다. 여러 사람들이 함께 협업하여 개발하는 경우, 프로젝트가 진행되는 메인 폴더를 기준으로 여러 개발자들이 각자의 폴더와 파일을 맡아 진행하는데 이 때에 각자의 작업 진행사항을 서로간에 공유하기 위해 github로 버전 관리를 진행한다.
Git으로 로컬 저장소에 작업한 내용을 저장한 뒤 해당 내용을 Github에 업로드하는 형식으로 사용한다. 파일 -> 로컬저장소 -> 원격저장소
⛅원격 저장소와 🏠로컬 저장소
Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.
⛅ 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소
🏠 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소
평소에는 내 PC의 로컬 저장소에서 작업하다가 작업한 내용을 공개하고 싶을 때에 원격 저장소에 업로드 한다. 물론 원격 저장소에서 다른 사람이 작업한 파일을 로컬 저장소로 가져올 수도 있다.
평소에는 로컬에서, 공유할 때에는 원격에다가
🚩Commit(저장)
내 컴퓨터 어느 한 구석에서 열심히 코딩을 해서 만들었다. 이 파일과 폴더들의 수정 내용을 저장소에 기록한다. 이전 커밋 상태부터 현재까지의 변경 이력을 저장한 리비전을 만드는 것을 커밋(Commit)이라고 한다. 각 커밋은 영문/숫자로 이루어진 40자리의 고유의 이름이 붙는다. 하지만 40자리 이름으로 우리가 구분할 수 없을테니 반드시 커밋 메시지를 필수로 입력해야 한다.
📄work-flow : 동작 방법
git은 3가지 컴포넌트를 가지고 있다.
git의 컴포넌트
기능
work-tree📁
work-tree는 working diredtory라고도 불리며 현재 작업중인 디렉토리에 들어있는 수정가능하며 읽을 수 있는 모든 파일이 들어있는 컴포넌트라고 생각하시면 됩니다.
index🗑
index는 staging area라고 불리며 commit 되기전 준비단계가 보존되는 컴포넌트입니다. index는 work-tree에 있는 file중 변경되어져 commit 되어질 파일들이 모여있는 컴포넌트입니다.
work-tree에 있는 file중 한 파일을 변경 한다면 index 컴포넌트에서 수정되었다는 마크처리를 해둡니다.
repository📖
레포지토리는 컨테이너라고도 불립니다. 해당 컴포넌트는 프로젝트 파일들의 변화를 축적합니다.
모든 커밋의 history를 snapshot의 형태로 가지고 있습니다.
git log명령어를 통해서 commit history를 확인할 수 있습니다.
Git 에서는 우리가 흔히 말하는 폴더를 '작업 트리'(Work Tree)라고 부른다. 그리고 커밋을 실행하기 전의 저장소와 작업 트리 사이에 존재하는 공간을 '인덱스(Index)'라고 한다. 인덱스(Index) 공간에 파일 상태를 기록하는 것을 스테이징(stage)이라고도 한다. 스테이징 해놓고 커밋하기 원치 않은 것들은 반영을 안할수도 있다. 인덱스(index)에 있는 파일들은 commit을 통해 레포지토리(repository)로 넣을 수 있다. 각 단계는 reset을 통해 거꾸로 돌릴 수도 있다.
commit 시 index를 에 있는 파일이 저장소(repository)에 저장됨(반대는 reset)eclipse 예제 ) git에 반영하기 위해 스테이징한다.
원격저장소에 있는걸 먼저 로컬에 반영해야한다. 원격저장소에 존재하는 항목이 있을 수 있으니까!
git pull origin main --allow-unrelated-histories
main이 브랜치명인거 필수로 체크! 히스토리를 땡겨오자.
readme.md 내용이 당겨져왔다
레포 설정할 때 readme.md에 내용을 설정했더니 그게 병합되서 땡겨졌다. 병합도 하고 다 반영해보자.
8) 드디어 원격저장소에 push 하기
이제 로컬에 있는 병합내용 + 변경된 수정사항들을 원격저장소(remote repository) 에 반영해보자.
☝ staging 영역에 추가
git add . //현재 디렉토리에 있는 업데이트 된 파일을 전부 스테이징 영역으로 추가합니다.
git add -A //수정된 파일 전부를 스테이징 영역에 추가합니다.
git status //현재 add 내역을 확인할 수 있습니다.
추가해줬고
✌Repository에 commit
메시지 포함해서 저장해주자.
git commit -m "커밋메시지"
커밋
🤟Remote Repository에 push
아까 remote로 연결해준 원격 저장소에 push 해주자.
git push origin main
로컬 main에서 원격 main에 잘 저장되었다.
🖐 반영 확인
잘 저장되서 메시지도 잘 나온다.잔디도 잘 심어졌음
+ 9) git bash로 해보기
Git Bash로도 올려보자.
프로젝트 우클릭
github에 레포지토리를 생성하고 git bash에서 아래를 순서대로 진행한다.(요약 정리)
#초기설정
git config --global user.name "유저이름"
git config --global user.email "유저 이메일"
#파일 준비
git init #.git 파일 생성
git add . #선택한 프로젝트 폴더 내의 모든 파일 관리
git status #상태확인
git commit -m "주석" #커밋
#업로드
git remote add origin 깃허브 저장소 주소
git push -u origin main
참고로 git bash는 Ctrl + V가 안된다. 복사 후 Shift + Insert 버튼으로 붙여넣자.
4. github에 있는 프로젝트 내 로컬에 가져오기
다른 사람이 업데이트 한 내용 내려받기
1) pull
또한 다른 사람이 원격 저장소(Remote repository)에 업데이트한 파일이 있을 때, 원격저장소와 내 로컬저장소의 상태를 동일하게 만들기 위해 pull을 이용한다.
git pull
remote repository에 저장된 파일을 가져와 local repository의 내용을 갱신한다.
병합( merge ) 과정이 발생한다.
해당 remote repository에 권한이 있어야 pull 명령어를 실행할 수 있다.
2) clone
.git 폴더까지 포함해서 소스를 받는다.
3) zip 파일
.git 폴더가 없는 채로 소스만 다운받기 때문에 로컬에서 git을 설정하려면 새롭게 해야한다.
5. 프로젝트 중간에 github에 있는걸 내 로컬에 가져오기
저장소를 통째로 가져온다.
clone 명령어는 처음 프로젝트에 투입되거나, 책에서 제공하는 예제 소스를 가져올 때, 중간에 git이 꼬였을 때 사용할 수 있다.
git clone 원격 저장소 URL
#특정 브랜치를 clone 하고 싶다면
git clone -b { 브랜치명 } { 원격 저장소 URL }
6. 사용하고 있는 git 관련 프로그램들 정리
1) fork
보통 개발 시 기본 default branch(master) 에서 작업 후 이를 바로 반영하는게 아니라 dev(개발)에 반영해 테스트 한 뒤 이를 aws(운영)에 반영한다.
master -> dev -> aws
Git Fork는 Git을 더 편하게 쓰기 위한 GUI 프로그램이다. Source Tree라는 앱이 비슷한 GUI 프로그램이다.
선으로 branch를 볼 수 있는 GUI 프로그램
위 사진처럼 Fork 프로그램을 통해 각각의 branch들의 변경 내용들을 커밋할 때마다 선으로 직관적으로 확인이 가능하다.
만약 노란색이 master branch라면 dev 반영을 하면 연두색과 같이 따로 반영되는 것을 꺾은선으로 표시하는 것이다.
더블클릭하면 V 표시가 생기면서 해당 브랜치에 접근하게 되고, 각각의 브랜치의 pull과 push는 상단의 버튼을 통해( 위아래 화살표가 직관적이다 ), 머지는 우클릭 항목에서 선택하여 가능하다.
스테이지 버튼
스테이징 내용도 github에서 잔디 클릭하면 보이듯이 삭제된 정보는 빨간 영역, 추가된 내용은 초록색 영역 등으로 보인다.
git add 작업을 안해도 stage 버튼으로 스테이징이 가능하다.
반영된 내용을 Tree 형태로 직관적인 표시로 볼 수 있다는 것이 장점이다.
2) gitlab
gitlab은 개인 또는 조직이 Git repository의 내부 관리를 할 수 있는 기능을 제공하는 비공개된 github이다.
중앙 서버에서 git 저장소를 관리할 수 있다. 무료로 공개/바공개 여부를 설정할 수 있어 좋다.
둘 다 Git Repositorty 를 이용하여 형상관리를 하기 때문에 기능은 큰 차이가 없다.
보통 github, gitlab 등의 소스관리 프로그램들을 회사에서 이용할 때에는 라이선스에 따라 비용이 발생한다.
비용은 기능마다 달라 어느것이 낫다 판단할 수 없으나, 우리나라 회사는 대부분 설치형(Self-Managed)를 선호한다.
github는 기본적으로 SaaS(Software as a Service) 형태로, 클라우딩 시스템을 설치 없이 원격으로 사용하는 구조이기 때문에 대부분 구독형으로 매달 요금을 내는 식이며, 설치 버전은 비용이 더 든다. 반면 gitlab은 모든 버전에서 SaaS형과 설치형을 선택적으로 사용할 수 있으니 설치형을 선호한다면 gitlab을 선택하게 된다.
또한 gitlab은 관리부터 이슈 트래킹하고 모니터링하는 등의 여러 기능을 gitlab 이라는 하나의 툴을 통해 할 수 있다. 이는 각각의 정보를 한곳에서 관리해 재사용성이 높아 업무 효율이 높다. (나의 경우 이슈 트래킹 목적으로 사용하며, 필요한 정보가 있을 경우 한 사이트에서 각각의 repo 를왔다갔다 하며 정보를 확인할 때 용이하다.)