🖇 Git과 GitHub
🖇 마크다운
이 글을 보고 있는 우리들에게 Git과 GitHub은 가까이할 수밖에 없는 사이일 것이다.
버전 관리를 깔끔하게 하기 위해, 여러 명이 함께 작업할 때는 협업 도구로서 필수적으로 사용된다.
따라서 이곳 Git 생태계에서 헤매지 않기 위해
Git과 GitHub의 기본 개념과 명령어,
그리고 우분투 환경에서 Git을 처음 설정하고 GitHub와 연동해 repository를 관리하는 방법을 정리했다.
이어서 README 파일 등 여러 문서를 작성할 때 자주 사용되는 마크다운 문법도 알아보았다.
이후에는 팀 단위 작업을 하면서 겪게 될 다양한 이슈들과 효율적인 Git 브랜치 전략, 협업 시 Pull Request 관리, 충돌(conflict) 해결 과정 등도 하나씩 다뤄볼 예정이다.
[모두의 연구소] 초보자를 위한 git과 Github 시작하기
Git 공식 문서
Git 학습 참고
Git
GitHub
init 새로운 Git 저장소 만들기
status Git이 추적하고 있는 로컬 저장소의 변화 확인
add 수정한 파일을 staging area에 추가
commit staging된 파일들을 하나의 버전으로 저장
push 로컬 저장소의 commit 내용을 원격 저장소에 반영
clone 원격 저장소를 복사해서 로컬 저장소로 가져오기
pull 원격 저장소에 있는 최신 내용을 로컬 저장소로 가져오기
# Git 버전 확인
$ git --version
# Git과 GitHub 연결
$ git config --global user.email "my-email@gmail.com"
$ git config --global user.name "my-username"
# 현재 Git 설정 정보 목록 출력
$ git config -l
# 참고
# .ipynb_checkpoints -> Jupyter Notebook이 자동으로 생성하는 백업 폴더
$ cd ~
$ cd aiffel
$ mkdir workplace
$ cd workplace
# 새로운 Git 저장소 만들기
# .git 디렉토리 생성됨 -> 모든 로컬 저장소는 .git 디렉토리를 가진다
$ git init
[주의] git clone 시에는 git init 사용 X -> .git이 중첩되어 충돌 가능성이 있음
# 출력 스트림을 지정하는 >>을 통해 출력 타겟을 README.md 파일로 지정
$ echo "# first-repository" >> README.md
# -> README.md 파일을 생성함과 동시에 그 파일 내에
# -> # first-repository라는 한 줄이 입력된다
# .gitignore 생성 (.DS_Store 추가)
$ echo .DS_Store >> .gitignore
add commit# Git이 추적하고 있는 로컬 저장소의 변화 확인
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
README.md
nothing added to commit but untracked files present (use "git add" to track)
# add: working directory에서 변경된 파일을 staging area에 추가
$ git add README.md
$ git add . # 변경된 전체 파일 반영
# commit: staging된 파일들을 하나의 버전으로 저장(스냅샷)
$ git commit -m "commit message"
# commit 내역 확인
$ git log
# master -> main 브랜치 이름 변경하기
$ git branch
* master
$ git branch -m master main
$ git branch
* main
$ git status
On branch main
nothing to commit, working tree clean
origin 원격 저장소를 지칭# 로컬 저장소의 Git과 원격 저장소의 repository 연결
$ git remote add origin https://github.com/username/first-repository.git
push# 로컬 저장소의 commit 내용을 원격 저장소에 반영
$ git push origin main
Username for 'https://github.com': [계정에 사용된 닉네임을 입력하세요]
Password for 'https://[이메일]@github.com': [비밀번호(토큰)를 입력하세요]
git conle GitHub의 repository를 통째로 가져오는 명령어# 새 디렉토리 생성
$ mkdir project
$ cd project
# 원격 저장소의 레포지토리를 복사해서 로컬 저장소로 가져오기
$ git clone https://github.com/username/first-repository.git
# 로컬로 가져온 원격 저장소를 수정해서 다시 push
$ echo "add new contents" >> README.md
$ git add README.md
$ git commit -m "new contents"
$ git push origin main
pull 원격 저장소에 있는 최신 내용을 로컬 저장소로 가져오는 명령어# workplace를 확인해 보면
# project에서 수정한 내용이 자동으로 반영되어 있지 않음
# 이때 사용하는 것이 pull
$ git pull origin main
🧐 Q. 지금까지는 collaborator로서 repository에 접근하여 협업했었는데
문득, fork하여 내 GitHub 계정으로 복사하여 접근하는 것과 어떤 차이가 있는지 궁금해졌다
그렇다면 clone과 fork는 각각 사용상의 어떤 차이가 있는 것인가
clone vs fork
| 구분 | clone | fork |
|---|---|---|
| 대상 | GitHub에 있는 저장소 | GitHub에 있는 다른 사람의 저장소 |
| 위치 | 내 로컬 컴퓨터로 복사 | 내 GitHub 계정으로 복사 |
| 권한 | 원본 저장소에 직접 push 불가 | 복사된 내 저장소에는 자유롭게 push 가능 |
| 목적 | 단순히 받아보기, 로컬 테스트 | 프로젝트 수정 후 Pull Request 하기 위함 |
collaborator라면 clone 후 바로 작업하면 된다
| 항목 | fork 방식 | collaborator 방식 |
|---|---|---|
| push 대상 | 내 GitHub 저장소 | 팀 저장소 (원본) |
| PR 대상 | 원본 저장소 | 같은 저장소의 다른 브랜치 |
| 권한 필요 | 없음 (공개 저장소면 누구나 가능) | 반드시 초대되어야 함 |
| 용도 | 외부 기여자용 | 팀/조직 내 협업 |
마크다운(Markdown)
주요 마크다운 문법
# 큰 제목 H1
## 작은 제목 H2
### 더 작은 제목 H3
**굵은 글씨**
__굵은 글씨__
*기울임 글씨*
_기울임 글씨_
***굵음 + 기울임 글씨***
___굵음 + 기울임 글씨___
~~취소선~~
문장 1␣␣↵ # 문장 뒤에 스페이스 2칸 + Enter
문장 2 # 문장 줄바꿈 (Enter만으로는 줄바꿈이 되지 않는다)
--- # 구분선
1. 내용 # 순서 있는 목록 (어떤 번호를 입력해도 내림차순으로 정의)
2. 내용
- 내용 # 순서 없는 목록 (혼합 사용 가능)
+ 내용
* 내용
- [ ] # 빈 체크 박스
- [x] # 체크된 체크박스
> 내용 # 인용
`코드` # 코드 한 줄
\``` # 코드 블록 (언어 지정 가능) (``` ```)
코드
\```
[텍스트](URL) # 링크 삽입
 # 이미지 삽입