GitHub
- Github은 소프트웨어 개발에서 코드를 효과적으로 공유, 관리할 수 있도록 무료 오픈소스 소프트웨어이다.
- 프로그램의 버전 관리도 github의 중요한 역할중 하나이다.
- Git, Github 다양하게 있는데 오늘은 Github 실질적 사용법에 대해서 공부했다.
- Github에서 중요한 개념은 로컬 vs github 인것 같다.
- 로컬은 말그대로 내 컴퓨터안에 있는 폴더, 파일을 칭하고
- github은 이미 올라간 데이터들을 말한다(?)
git init
git init
- 해당 로컬 폴더를 git 으로 초기화 하는 명령어다.
- 실제로 폴더에서는 .git 파일이 생기고, 해당 폴더가 이제 git으로 사용이 가능하게끔 초기화 된것이다. (Git 저장소 생성)
- 이 방법은 뒤에 나오는 git remote와 함께 사용하는 것이다.
git remote add origin (주소)
git remote add origin https://github.com/xxxxxx/xxxxx
- git remote add origin 는 git 저장소를 github repository와 연결해주는 명령어다.
- git 저장소를 만들어도 github repository와 연결이 되어 있는것이 아니기 때문에, 연결을 해줘야지만 준비가 끝난것이다.
- 그럼 Git clone과 는 어떻게 다를까?
git clone (주소)
git clone https://github.com/xxxxxx/xxxxx
- git remote add origin은 로컬에 있는 git 저장소와 repository와 연결을 해준것이라면, git clone은 repository의 있는 내용도 같이 로컬에 저장을 하고, 해당 로컬 저장소를 해당 repository git 저장소로 만든다.
- 즉 git clone을 할때는 git init를 할 필요가 없다.
git add (데이터)
git add .
git add text.txt
- git add 는 로컬 저장소의 변경 내용을 스테이징 영역 (Staging area)에 추기하기 위한 명령어다.
- 스테이징 영역은 비유를 하자면 git repository로 올리기전에 어떤걸 올리지 포장을 한다고 생각하면 된다. 바로 보내는것이 아니라 어떤 데이터를 포장해서 올리지를 정하고 준비하는 영역이라고 생각하면 된다.
- git add . 은 해당 로컬 저장소에 모든 변경사항을 add 하는 명령어다.
git commit -m "Commit message"
git commit -m "test.txt 변경"
- git add에서는 어떤 데이터를 포장할지 정한거라고 한다면, git commit은 어떤 메세지로 저장할지 정하는 명령어라고 생각하면 된다.
- 이미 git add에서 스테이징 영역으로 넘어온 데이터들을 해당 메세지를 위에 붙여서 github repository에 올릴 준비를 마친다고 생각하면 된다.
- commit message는 주로 어떤 변경사항이 있는지의 대한 내용을 쓴다.
git push origin (branch 이름)
git push origin main
git push <remote> <branch>
- git add 를 통해 어떤 데이터를 올리지 정했고, git commit으로 어떤 메세지(변경사항)을 적을지 정했다면, 이제는 실제로 github repository에 올리는게 git push 명령어다.
- git push를 하면 (remote) 와 (branch)를 정해서 보내야 한다.
- 지금 단계에서는 remote는 github 원격 저장소다. origin을 사용한다.
- branch는 아래에서 자세히 설명할 예정이다.
git pull origin (branch 이름)
- git pull 은 로컬 저장소를 repository의 상태로 동기화하는 과정이다.
- 만약 push 하는데 아래와 같은 에러가 뜬다면 pull을 하면된다.
- 아래 에러는 현재 로컬 저장소가 github repository보다 업데이트가 안되어 있기 때문이다.
branch
- branch는 독립적으로 어떤 작업을 진행하기 위한 개념이다.
- 예를 들어서 한 회사에서 10명이 같은 github repository를 사용해서 코드를 올려야한다고 가정하자. 만약 같은 파일을 동시에 작업을 한다면, 오류가 생길수도 있고, 아니면 잘못해서 코드를 다 지우던가? 이런문제가 생길수도 있다. 그래서 나온 개념이 branch다.
- 기본적으로 repository를 새로 만들면, master branch가 하나 생긴다. 따라서 branch를 추가해서 독립적으로 사용하는것이다.
git checkout -b branch1 // branch1 branch를 생성하고 해당 branch로 체크아웃
git branch // 전체 branch 및 현재 branch 확인
git branch -m branch1 branch2 // branch1을 branch2로 이름 변경
git switch main // main으로 branch 변경
- 이런 경우가 있다. 나는 branch1에서 작업을 하고 있는데, default branch랑 나의 branch1에 차이가 생기는데, 나는 branch1도 default branch랑 똑같이 만들고 싶을때가 있다. 그럴때는 pull을 쓰면 될꺼 같지만 아래와 같이 해야한다.
// default branch 가 main
git branch // 현재 branch1
git checkout main // main branch로 변경
git pull origin main // 로컬 main branch를 최신상태로 업데이트
git checkout branch1 // 다시 branch1 으로 변경
git merge main // merge
git add .
git commit -m "branch1 merge with main"
git push origin branch1
.gitignore
- .gitignore 파일은 github에 올리는데 제외 시키는 데이터들을 나열하는 파일이다.
- 예를 들면 중요한 개인정보 파일이 있을 수 있는데, git add . 을 해버리면 문제가 생길 수 있으니, 개인정보를 .gitignore에 기입하면 된다.
- 맥북에 경우 .DS_Store 파일을 .gitignore에 저장해야 한다.
- .DS_Store은 맥북 저장소에 자동으로 생성되는 파일인데, 각 저장소마다, 각 컴퓨터마다 생성되는거기 때문에, 올리면 계속 오류가 생긴다.