git 그리고 github

yuns_u·2021년 9월 15일
0
post-custom-banner

💛 git이란?

git은 버전 관리 시스템(version - control system)이다.

작업을 하는 기록을 남기기도 하고 이전 기록으로 돌아갈 수 있기 때문에 협력 및 버전을 관리에 매우 유용하다고 할 수 있다. 여러 명이 branch를 만들어서 merge하는 것이 가능하기 때문에 동시다발적인 개발이 가능하다.

특히 변경사항과 여러 기능들이 필요한 개발 분야에서 변경 이력들과 기록들을 쉽게 추적하고 파악할 수 있도록 해주기 때문에 매우 유용하며 코딩을할 때 익혀야하는 필수 기술 중 하나이다.

이러한 git을 활용한 원격 서버가 그 유명한 github라고 할 수 있다.

git-flow: 병렬적 브랜치 관리전략

git은 브랜치를 생성하고 삭제하는 것이 쉬운 편이다. 이러한 브랜치를 활용하는 방법에 일정한 절차가 있느데 이 방법론을 git-flow라고 한다.

Git-flow는 Git이 새롭게 활성화되기 시작하는 10년전 쯤에 Vincent Driessen이라는 사람의 블로그 글에 의해 널리 퍼지기 시작했고 현재는 Git으로 개발할 때 거의 표준과 같이 사용되는 방법론이다.

즉, Git-flow는 기능이 아니고 깃을 사용하는 사람들간의 약속인, 방법론이다.

  • Master : 처음 생성한 브랜치는 master가 된다. master 브랜치는 언제든지 release가 가능한 상태이어야 한다고 한다. 아직 완료되지 않은 작업이 들어간 버전은새로운 브랜치를 만들어서 작업하는 것이 협력에 좋다.
  • Hotfix: master 브랜치에서 파생되는 브랜치이다. 마스터 브랜치에서 결함이나 버그가 발견되었을 때 마스터 브랜치에서 브랜치를 따고, 버그를 수정한 뒤 다시 마스터에 merge를 하는 브랜치로 그룹이나 폴더라고 볼 수 있다.
  • Release: 이 브랜치는 존재의 의의에 대해 논란애ㅣ 있다. develop 브랜치에서 파생되어 관리를 하다가 develop브랜치로 다시 merge하는 브랜치이다.
  • develope : 실제적인 개발이 이루어지는 곳. develop에서 바로 master로 가는 경우는 없다. 보통의 경우 release를 거쳐서 master로 merge가 된다.
  • feature: 새로운 기능이 추가될 때 작업이 이루어지는 곳이다. 여기에서 작업하고 develop에 merge 된다. 이러한 feature 브랜치도 hotfix처럼 하나가 아닐 수 있다.

동작원리

Snapshot

  • 저장할 때마다 그 시점을 캡쳐하듯이 링크를 저장한다.
  • 변경되지 않은 파일은 재저장하지 않고 이전에 지정한 동일한 파일을 링크로 걸어두는데 링크정보만 저장하기 때문에 저장공간을 적게 차지한다고 한다.

Checksum

  • 데이터 저장 전 체크섬(중복검사의 형태, 순환중복검사)을 구해 데이터를 관리한다.
  • SHA-1해쉬(파일 내용이나 디렉토리 구조를 기반으로 계산하는 16진수 문자 40개로 구성된 문자열)라는 문자열을 사용한다고 한다.
  • 파일이름이 아닌 컨텐츠의 해쉬값을 저장하기 때문에 파일명이 변경되어도 내용이 동일하면 같은 해쉬를 갖는다.

⭐️ Section

  • working directory : clone을 하게 되면 working directory가 생성된다.
  • staging area: 스테이징 영역에는 생성된 repository와 관리하고 있는 파일들의 목록이 있다. 일종의 저장소로 working directory에서 파일을 생성하고 등록하게 되면 staging area에 추가된다. 이 때. staging area에 추가되었다고 하더라도 repository에 변경사항이 저장되는 것이 아니다!


설정 파일 위치

  • 1) '시스템 전역 경로'에 저장되는데 시스템 설정 파일은 되도록 만지지 말자.
  • 2) 사용자명으로 된 디렉토리 (USER_HOME/.gitconfig)라는 이름으로 된 파일이 있다.
  • 3) working 디렉토리 경로 /###/.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

ignore 파일 설정

os에서 자동으로 생성한 파일이나 log 파일등은 같이 커밋이 되면 안되기 때문에 프로젝트를 생성할 때는 ignore 파일을 추가 및 설정하고 시작하는 것이 좋다.

Mac의 경우 DS_Store라는 파일이 자동으로 생성되는데 이 파일은 설정 파일이므로 커밋이 되어버리면 곤란할 수 있다. 따라서 Ignore 파일들을 따로 만들어서 관리할 필요가 없는 파일들을 따로 관리하는 것이다.

❓ 그렇다면 반대로 관리를 해야하는 파일은 무엇일까?
🍏 프로젝트와 관련된 모든 파일은 버전 관리가 이루어져야 한다. 관련이 있는 파일이 변경될 때 같이 변경되어 업데이트를 해줘야 하는 것이다.
🍏 $ touch .DS_Store DS_Store라는 파일을 만드는 것인데 온점이 앞에 붙는 파일은 숨김파일들이라서 ls로 확인했을 때 나타나지 않는다. 숨긴 파일들까지 보려면 1s -al을 입력해주어야 한다.
참고 블로그
참고하면 좋은 책: 누구나 쉽게 배우는 git&github (권오성)

💛git & github

로컬에서 깃에 작업한 내용들을 원격 레포지토리에 올려 코드를 공유할 때 가장 많이, 대중적으로 사용되는 곳이 Github이다.

깃과 깃허브는 별개의 것으로 생각해주어야한다!
깃허브에서 공식적으로 집필한 사용법은 아래의 링크와 같다.

Git의 기초 - 수정하고 저장소에 저장하기

깃을 사용하여 깃허브를 통해 여러명과 합작하는 것은 아래의 그림처럼 나타낼 수 있다.
여러 명이 합작을 하는 것은 아래처럼 나타낼 수 있다.

이미지 출처

레포지토리를 온라인 ➡️ 로컬로 가져오기

깃헙에서 생성된 레포들은 각각 주소가 달려있다.
보통은 아래처럼 주소가 주어진다.

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 작업 방법 및 나름의 순서!

깃을 활용해서 업로드를 하는 방식은 어느정도 일정한 순서가 있다보니 이를 따라야 내가 원하는 결과를 얻을 수 있다.

$ git status

깃의 현재상태를 보고 싶을 때 사용한다.
현재 어떤 파일을 추적하고 있고 파일들이 어떤 상태인지, 어떤 브랜치에서 작업하는 지 등을 알려준다. 초록색으로 깃에 변경사항이 추가된 파일이, 빨강색으로 변경되었으나 추가되지 않은 파일들이 나온다.

한 눈에 깃의 상황을 파악할 수 있기 때문에 이 명령어는 파일을 깃이 추적하도록하거나 어떤 파일이 변경되었는지 등을 파악할 때에도 유용하다.

$ git add

깃은 사용자가 깃에게 어떠한 파일을 기록해야할 지 지정해주어야 한다. 따라서 깃에 기록하고 관리하기 위해서 git add를 해주어야한다.

git add라는 명령어 다음에는 파일의 경로를 담으면 된다. 만약 현재 디렉토리를 전부 담으려면 파일의 경로 앞에 .를 붙이면 되지만 한 번에 모든 파일을 기록하면 위험할 수 있다!

따라서 상황에 맞게 기록할 파일들을 추가해야한다.

  • $ echo "{파일 내용}" > {파일명}.{파일형식}
    내용과 함께 새로운 파일을 만든다.

  • $ git add {파일명}.{파일형식}
    파일을 깃에 기록한다.

$ git commit

깃에서 git add를 통해 어떤 파일을 기록할지 정했다면 이제 로컬 레포지토리에 commit을 할 차례이다. 현재의 순간을 깃에 사진을 찍듯이 기록해두는 것으로 필요하다면 이전으로 돌릴 수 있다. 커밋을 할 때에는 커밋 메세지를 반드시 기록해야한다.

기본적으로 git commit을 입력하면 커밋할 메세지를 기록할 에디터를 열어주는데 이 때 vi나 nano 등을 터미널에서 사용되는 텍스트 에디터를 사용해 보통 기록하게 된다.

에디터를 켜지 않고 짧은 커밋 메시지를 남기고 싶다면 -m 플래그를 활용할 수 있다.

$ git commit -m "{메세지 내용}"

commit이 가능한 경우

깃의 경우 레포지토리 영역에 있는 파일, 즉 한 번 커밋을 한 뒤에 한 번이라도 수정을 한 번이라도 하게 되면 다시 working directory 형태로 내려오게 된다. 이 경우 수정을 한 뒤에도 한 번 커밋이 되었던 파일이기 때문에 staging area를 거치지 않고 바로 커밋을 진행할 수 있다.

commit이 불가능한 경우

새로운 파일을 생성했다면 한 번도 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 push

깃헙 등의 온라인으로 깃을 보낼 때 사용한다.
현재 깃과 연결되어 있는 깃 리모트, 원격 레포지토리에 해당 깃을 밀어넣는다. 새로고침하면 깃헙 레포지토리에 해당 변경사항이 커밋 메시지와 함께 반영되어있는 것을 확인할 수 있다.


$ git remote

현재 깃과 연결되어 있는 깃 리모트, 즉 원격 레포지토리와 관련된 명령어이다.

현재 어떤 원격 레포지토리 주소와 연결되어 있는지 보고 싶다면 아래의 명령어를 터미널에 입력해주자.

$ git remote -v

원격 주소 추가하는 방법

먼저 git remote로 시작한다.
그 후 추가를 하는 것이니 add 명령어를 붙여주고 어떤 이름으로 저장할지 입력하고 어느 주소와 연결되는지 명시해주면 된다.

$ git remote add {저장하고 싶은 이름} https://github.com/{유저이름}/{레포지토리 이름}.git

원격 주소를 지우고 싶다면 remove를 이용해주자.

$ git remote remove {지우고 싶은 원격 주소 혹은 원격 주소의 이름}
profile
💛 공부 블로그 💛
post-custom-banner

0개의 댓글