git은 버전 관리 시스템(version - control system)이다.
작업을 하는 기록을 남기기도 하고 이전 기록으로 돌아갈 수 있기 때문에 협력 및 버전을 관리에 매우 유용하다고 할 수 있다. 여러 명이 branch를 만들어서 merge하는 것이 가능하기 때문에 동시다발적인 개발이 가능하다.
특히 변경사항과 여러 기능들이 필요한 개발 분야에서 변경 이력들과 기록들을 쉽게 추적하고 파악할 수 있도록 해주기 때문에 매우 유용하며 코딩을할 때 익혀야하는 필수 기술 중 하나이다.
이러한 git을 활용한 원격 서버가 그 유명한 github라고 할 수 있다.
git은 브랜치를 생성하고 삭제하는 것이 쉬운 편이다. 이러한 브랜치를 활용하는 방법에 일정한 절차가 있느데 이 방법론을 git-flow라고 한다.
Git-flow는 Git이 새롭게 활성화되기 시작하는 10년전 쯤에 Vincent Driessen이라는 사람의 블로그 글에 의해 널리 퍼지기 시작했고 현재는 Git으로 개발할 때 거의 표준과 같이 사용되는 방법론이다.
즉, Git-flow는 기능이 아니고 깃을 사용하는 사람들간의 약속인, 방법론이다.
Snapshot
Checksum
⭐️ Section
USER_HOME/.gitconfig
)라는 이름으로 된 파일이 있다. /###/.git/config
이것이 working directory가 된다. 설정정보가 저장이 된다.우선순위는 3), 2), 1) 순서이다.
만약 사용자가 1번을 조작해서 새롭게 설정한다고 해도 3번에 이메일 주소를 설정하게 되면 3번의 이메일 주소를 우선으로 커밋작업을 한다.
터미널에 ls -al | grep .gitconfig
을 입력하면 git 설치 후 입력한 사용자 정보가 나온다.
git commit이나 push를 하기 우해서는 사용자 정보가 반드시 입력되어야 한다.
git config --global user.name yunsu
git config -- user.email hayellee@gmail/com
os에서 자동으로 생성한 파일이나 log 파일등은 같이 커밋이 되면 안되기 때문에 프로젝트를 생성할 때는 ignore 파일을 추가 및 설정하고 시작하는 것이 좋다.
Mac의 경우 DS_Store라는 파일이 자동으로 생성되는데 이 파일은 설정 파일이므로 커밋이 되어버리면 곤란할 수 있다. 따라서 Ignore 파일들을 따로 만들어서 관리할 필요가 없는 파일들을 따로 관리하는 것이다.
❓ 그렇다면 반대로 관리를 해야하는 파일은 무엇일까?
🍏 프로젝트와 관련된 모든 파일은 버전 관리가 이루어져야 한다. 관련이 있는 파일이 변경될 때 같이 변경되어 업데이트를 해줘야 하는 것이다.
🍏 $ touch .DS_Store
DS_Store라는 파일을 만드는 것인데 온점이 앞에 붙는 파일은 숨김파일들이라서 ls
로 확인했을 때 나타나지 않는다. 숨긴 파일들까지 보려면 1s -al
을 입력해주어야 한다.
참고 블로그
참고하면 좋은 책: 누구나 쉽게 배우는 git&github (권오성)
로컬에서 깃에 작업한 내용들을 원격 레포지토리에 올려 코드를 공유할 때 가장 많이, 대중적으로 사용되는 곳이 Github이다.
깃과 깃허브는 별개의 것으로 생각해주어야한다!
깃허브에서 공식적으로 집필한 사용법은 아래의 링크와 같다.
깃을 사용하여 깃허브를 통해 여러명과 합작하는 것은 아래의 그림처럼 나타낼 수 있다.
여러 명이 합작을 하는 것은 아래처럼 나타낼 수 있다.
이미지 출처
깃헙에서 생성된 레포들은 각각 주소가 달려있다.
보통은 아래처럼 주소가 주어진다.
https://github.com/{유저 이름}/{레포 이름}
https://github.com/{유저 이름}/{레포 이름}
혹은 https://github.com/{유저 이름}/{레포 이름}.git
으로 주어지는데 .git 부분은 없어도 된다.
이 주소를 로컬 컴퓨터의 터미널에 클론을 하면 터미널이 위치한 디렉토리에 깃헙의 레포지토리를 내려받을 수 있다.
$ git clone https://github.com/{유저이름}/{레포 이름}
종종 보이는 중괄호는 사용자의 설정대로 바꿀 수 있는 것이다.
예를 들면 위의 경우에는 $ git clone https://github.com/yunsu/practice
으로 작성할 수 있는 것이다.
로컬에서 온라인 레포지토리 주소를 추가하는 방법이다.
로컬에서 기존에 작업하고 있던 걳과 깃헙의 레포지토리와 연결하는 것이다. 작업하고 있는 깃 디렉토리에 진입한 뒤
$ git remote add origin https://github.com/{유저이름}/{레포 이름}
을 입력해주면 된다.
만약 깃을 지우고 싶다면 깃이 생성되었을 때 생성된 .git
이라는 폴더를 제거하면 된다.
CLI에서 지우고자 한다면 다음을 입력하면 된다.
$ rm -rf .git
다만 위의 rm -rf 명령어를 사용하게 되면 CLI로 폴더들과 파일들을 삭제하게 되기 때문에 파일 탐색기와 달리 따로 휴지통에 들어가지 않아 복구하기 복잡해진다. 절대 남용하지 말자!
깃을 활용해서 업로드를 하는 방식은 어느정도 일정한 순서가 있다보니 이를 따라야 내가 원하는 결과를 얻을 수 있다.
깃의 현재상태를 보고 싶을 때 사용한다.
현재 어떤 파일을 추적하고 있고 파일들이 어떤 상태인지, 어떤 브랜치에서 작업하는 지 등을 알려준다. 초록색으로 깃에 변경사항이 추가된 파일이, 빨강색으로 변경되었으나 추가되지 않은 파일들이 나온다.
한 눈에 깃의 상황을 파악할 수 있기 때문에 이 명령어는 파일을 깃이 추적하도록하거나 어떤 파일이 변경되었는지 등을 파악할 때에도 유용하다.
깃은 사용자가 깃에게 어떠한 파일을 기록해야할 지 지정해주어야 한다. 따라서 깃에 기록하고 관리하기 위해서 git add
를 해주어야한다.
git add
라는 명령어 다음에는 파일의 경로를 담으면 된다. 만약 현재 디렉토리를 전부 담으려면 파일의 경로 앞에 .
를 붙이면 되지만 한 번에 모든 파일을 기록하면 위험할 수 있다!
따라서 상황에 맞게 기록할 파일들을 추가해야한다.
$ echo "{파일 내용}" > {파일명}.{파일형식}
내용과 함께 새로운 파일을 만든다.
$ git add {파일명}.{파일형식}
파일을 깃에 기록한다.
깃에서 git add
를 통해 어떤 파일을 기록할지 정했다면 이제 로컬 레포지토리에 commit을 할 차례이다. 현재의 순간을 깃에 사진을 찍듯이 기록해두는 것으로 필요하다면 이전으로 돌릴 수 있다. 커밋을 할 때에는 커밋 메세지를 반드시 기록해야한다.
기본적으로 git commit을 입력하면 커밋할 메세지를 기록할 에디터를 열어주는데 이 때 vi나 nano 등을 터미널에서 사용되는 텍스트 에디터를 사용해 보통 기록하게 된다.
에디터를 켜지 않고 짧은 커밋 메시지를 남기고 싶다면 -m
플래그를 활용할 수 있다.
$ git commit -m "{메세지 내용}"
깃의 경우 레포지토리 영역에 있는 파일, 즉 한 번 커밋을 한 뒤에 한 번이라도 수정을 한 번이라도 하게 되면 다시 working directory 형태로 내려오게 된다. 이 경우 수정을 한 뒤에도 한 번 커밋이 되었던 파일이기 때문에 staging area를 거치지 않고 바로 커밋을 진행할 수 있다.
새로운 파일을 생성했다면 한 번도 staging area를 거치지 않았기 때문에 git commit -m "updated"
를 해준다고해도 그 대상에 포함되지 않는다.
staging area를 거치지 않은 파일을 commit하려고 하면
nothing added to commit but untracked files present
라는 메시지로 현재 커밋된 것은 없지만 staging area에 있지 않은 untracked files가 있다는 것을 알려준다. git add
를 통해 깃에 기록을 해준 뒤 커밋을 해주자.
$ git push
깃헙 등의 온라인으로 깃을 보낼 때 사용한다.
현재 깃과 연결되어 있는 깃 리모트, 원격 레포지토리에 해당 깃을 밀어넣는다. 새로고침하면 깃헙 레포지토리에 해당 변경사항이 커밋 메시지와 함께 반영되어있는 것을 확인할 수 있다.
현재 깃과 연결되어 있는 깃 리모트, 즉 원격 레포지토리와 관련된 명령어이다.
현재 어떤 원격 레포지토리 주소와 연결되어 있는지 보고 싶다면 아래의 명령어를 터미널에 입력해주자.
$ git remote -v
먼저 git remote
로 시작한다.
그 후 추가를 하는 것이니 add
명령어를 붙여주고 어떤 이름으로 저장할지 입력하고 어느 주소와 연결되는지 명시해주면 된다.
$ git remote add {저장하고 싶은 이름} https://github.com/{유저이름}/{레포지토리 이름}.git
원격 주소를 지우고 싶다면 remove
를 이용해주자.
$ git remote remove {지우고 싶은 원격 주소 혹은 원격 주소의 이름}