개발을 하다보면 발생할 수 밖에 없는 수많은 버전의 코드들, 변경사항, 백업파일 등등.
이런 소스 코드들을 관리하기 위해 만들어진 대표적인 분산형 버전관리(VCS:Version Control System) 시스템이다.
리누즈 토발즈라는 리눅스 개발자가 2주만에 만들었다는데, 사실 리눅스도 대학생때 본인이 사용하는 컴퓨터에서 돌아갈 수 있는 운영체제를 심심해서 뚝딱 만든 것이라고 함. 그리고 리눅스는 현재 많은 컴퓨터 운영체제, 서버, android나 ios, 각종 임베디드 기기에서 돌아가는 운영체제이기도 하다. 여기서 맥은 리눅스의 먼 후손(?)같은 느낌이고, 윈도우는 노선이 좀 다른듯. (그래서 개발을 맥북으로 하는게 편하다는 걸까...?)
git은 버전을 관리하는 하나의 프로그램 일 뿐, 소스 코드를 저장하고 관리할 원격 저장소가 필요하다. 그 역할을 하는것이 바로 github 인 것.
외에 코드 저장소로서 비슷한 서비스를 제공하는 Bitbucket, GitLab 등 도 있다.
공식 사이트(https://git-scm.com/)에서 git을 다운로드(Download for Windows/Download for Mac) 하고

다음의 명령어로 설치된 깃 버전(-v, version)을 확인한다.
$ git -v
정상적으로 버전이 확인되면 다음의 명령어로 초기 환경설정을 해준다.
$ git config --global user.name "깃헙유저네임"
$ git config --global user.email "깃헙(계정)메일주소"
$ git config --global core.editor "vim"
$ git config --global core.pager "cat"
*잘 등록됐는지 확인하고 싶으면 $ git config --list 로 확인하기
$ vi ~/.gitconfig 에서 수정 가능하다.커맨드 라인 인터페이스(CLI)의 형식을 가진 명령어 처리기로, 우리가 키보드로 입력한 명령어를 운영체제로 전달하여 명령을 실행할 수 있도록 중간 다리 역할을 해주는 도구이다.
사전적 의미로는 Bourne Again Shell의 줄임말. Steve Bourne 이라는 사람이 개발한 최초의 유닉스 쉘 프로그램(sh)의 확장판 이라는 의미. (쉘은 커맨드 라인 인터페이스를 구현한 대표적인 프로그램)
*우리가 Git bash를 사용하는 이유
개발자는 마우스를 움직여 클릭하는 방식의 GUI인터페이스가 요청할 수 없는 작업(개발 환경이나 서버 관리 등)을 해야한다. 이를 위해 윈도우는 cmd, 리눅스와 맥은 terminal을 사용하는데 운영체제마다 명령어가 다르다는 문제가 있다. 이때 윈도우사용자는 리눅스 명령어를 사용할 수 있게 해주는 git bash를 사용하면 편리하다!
cd {Documents/} : {Documents} 디렉토리 안으로 이동mkdir {dirname} : (make directory) 디렉토리 생성cd .. : 상위 디렉토리로 이동pwd : 현재 디렉토리 경로를 루트 경로부터 보여줌ls : touch {readme.md} : 파일{readme.md} 생성mv {readme.md} {bin/} : (move) 파일을 특정 위치{bin/}로 옮기기mv {readme.md} {./README.txt} : 파일명{readme.md}을 변경{README.txt로}mv {dir1} {dir2} : 디렉토리{dir1}의 이름을 디렉토리{dir2}로 변경cp {readme.md} {bin/} : (copy) 파일 복사해서 디렉토리(bin/)에 붙여넣기rm {README.txt} : (remove) 파일(README.txt)을 삭제rm -rf {bin/} : {bin/} 폴더 삭제
cat {readme.md} : {readme.md} 파일 내용을 출력하기
*CLI에서 파일 내용을 단순 출력해서 확인할 때 사용되는 명령어.
vi readme.md : vim으로 파일(readme.md) 열기
*vim : CLI기반의 텍스트 편집기. 여러가지 모드와 플러그인 등을 통해 원하는 개발환경을 구성할 수 있음
i : insert modev : visual modeESC : normal mode로 돌아가기d : 삭제dd : 한 줄 삭제dd(지우고싶은줄수)j : (지우고 싶은 줄 수) 만큼 한번에 삭제:q : quit. 편집 그만하고 편집기 닫음:q! : 변경사항 저장 없이 강제 종료:w : 현재 내용 저장:wq : write and quit. 저장하고 종료:{number} : 해당 {number} 입력하고 엔터로 해당 위치로 커서이동git repo를 만드는 방법은 두가지가 있다.
new repository 로 repo를 만든다.
$ git clone {repo address}CLI 명령어로 만드는 것과 동시에 등록(push -u origin main)한다.
$ mkdir {repo} && cd {repo} 👉 {my-repo}폴더를 만들고 디렉토리 이동
$ git init 👉 git 저장소(repo)를 생성(초기화)
$ git remote add origin https://github.com/{username}/{reponame}.git 👉 깃헙 원격 저장소에 origin 등록하고 설정
$ touch README.md 👉 REDAME.md 파일 생성
$ git add README.md 👉 수정사항 add로 staging
$ git commit -m "docs: Create README.md" 👉 커밋 생성. -m 은 커밋 메세지를 바로 적용하는 옵션(이지만 사용은 추천하지X)
$ git push -u origin main 👉 원격 저장소 main에 push
repo를 만들고 열심히 코드를 적었다. 이것을 원격저장소에 저장하고 싶은데, 그전에 거치는 단계가 있다. 우리가 작업하는 로컬의 프로젝트 디렉토리를 Working Directory라고 한다면,
working directory(local)
⬇
Staging Area(index에 기록한다고 표현하기도 함)
⬇
Repository(remote, origin)
바로 Staging Area가 그것인데, 작성한 내용을 $git add 로 Staging 할 수 있다. 그렇게 Staging 된 상태의 파일들을 커밋$ git commit하고 난뒤 push하면 원격 저장소(repo)에 올라가는 것이다.
굳이 Staging 이라는 작업을 하는 이유가 뭘까 궁금해서 찾아봤는데, 다음과 같은 이유가 있다고 한다.
$ git add 후 $ git commit 해야 하는 것 잊지말자.
git이 추적할 필요 없는 파일을 명시한다.
로컬에서 나만 사용하는 환경설정 파일이나 중요한 데이터가 들어있는 파일 등은 git이 추적할 필요도 없고 다른 파일들과 같이 저장소에 업로드 되서도 안된다. git이 무시할 수 있도록 .gitignore 파일에 적어주자.
*.java
*.py
github에서 팀 프로젝트를 할 때, pull로 팀 repo를 끌어올 것 이다. 이때 파일별로 필터를 걸거나, 파일별로 merge 전략을 다르게 설정해서 환경설정 파일에 적용할 때 사용한다.
# Avoid conflicts in pbxproj files
*.pbxproj binary merge=union
# Always diff strings files as text
*.strings text diff
https://parkjh7764.tistory.com/39
https://www.liquidweb.com/kb/basic-bash-shell-commands-a-cli-tutorial/
https://pers0n4.io/github-remote-repository-and-upstream/
https://iseunghan.tistory.com/322#Staging%20Area