Git 과 GitHub (1부)

Git이란?

Git은 분산 버전 관리 시스템(Distributed Version Control System)입니다. 프로그래머와 소프트웨어 개발 팀이 소스 코드와 파일들의 변경 사항을 추적하고 관리하는 데 사용됩니다. Git은 리누스 토발즈(Linus Torvalds)가 개발한 오픈 소스 소프트웨어로, 많은 프로젝트에서 널리 사용되고 있습니다.

 

Git은 파일들의 변경 내용을 기록하고, 이력을 추적하여 이전 상태로 복원하거나 변경 내용을 병합하는 등의 작업을 수행할 수 있습니다. 이를 통해 여러 개발자가 동시에 작업하고, 각자의 변경 사항을 효과적으로 관리할 수 있습니다.

 

Git의 가장 큰 특징은 분산 버전 관리 시스템이라는 점입니다. 모든 개발자는 로컬 환경에 전체 프로젝트의 복사본을 가져올 수 있으며, 독립적으로 작업할 수 있습니다. 변경 사항은 로컬 저장소에 저장되고, 필요에 따라 중앙 저장소로 푸시(push)하여 다른 개발자들과 공유할 수 있습니다. 이러한 분산 구조는 프로젝트의 유연성과 안정성을 높여줍니다.

 

Git은 명령줄 인터페이스를 통해 사용되지만, 다양한 그래픽 사용자 인터페이스(GUI) 도구나 통합 개발 환경(IDE)에서도 지원됩니다. 대표적인 Git 호스팅 서비스로는 GitHub, GitLab, Bitbucket 등이 있으며, 이러한 서비스를 통해 소스 코드의 저장, 공유, 협업 등을 용이하게 할 수 있습니다.

 

GitHub란?

GitHub는 Git을 기반으로 한 웹 기반 호스팅 서비스입니다. 쉽게 말하면 클라우드 서버라는 것이죠. 개발자들이 Git을 사용하여 소스 코드를 버전 관리하고 협업하는 과정을 지원합니다.

 

GitHub는 개발자들이 소스 코드를 저장하고 관리하는 원격 저장소(Repository)를 제공합니다. 이 원격 저장소는 인터넷을 통해 접근 가능하며, 여러 개발자들이 동시에 작업하고 변경 사항을 공유할 수 있습니다.

https://www.quora.com/What-is-a-Git-Does-it-has-any-difference-with-GitHub

 

Git vs GitHub 

Git은 쉽게 말하면 자신의 컴퓨터에서 사용 할수 있는 버젼관리 툴이라는 것입니다. 어떠한 파일을 버젼을 관리 한다고 하면 최종, 최최종, 최최최종 이라는 이름을 붙여가면서 저장하는데, 어느 순간 제일 마지막에 정리된 파일인지 잊어버리는 순간들이 있다는게 문제가 됩니다. 이러한 문제점을 해결을 해주는 것이 Git입니다. 

GitHub는 여러명이 동시에 관리하는 파일이 있다고 하면 그것을 하나의 서버에 올려서 관리하게 해주는 클라우드 시스템이라고 생각하시면 됩니다. 그리고 버젼관리를 편하게 해주는 여러가지 기능을 제공함으로써 쉽게 버젼관리를 할 수 있습니다. 

 

root와 branch ?

https://velog.io/@gil0127/Git-branch

Root:

  • "Root"는 깃 저장소(Git repository)의 초기 상태를 나타내는 용어입니다.
  • 저장소가 생성될 때, 깃은 초기 커밋(initial commit)을 생성하며 이 커밋을 저장소의 루트라고 합니다.
  • 초기 커밋은 어떤 파일 또는 기록이 없는 빈 상태를 나타냅니다.
  • 이후에 변경 사항이 추가되고 커밋되면서 저장소의 기록이 형성됩니다.

 

Branch:

  • "Branch"는 개발자가 독립적으로 작업할 수 있는 개별적인 작업 흐름을 나타내는 용어입니다.
  • 브랜치는 현재 상태의 복사본으로 생각할 수 있습니다. 이를 통해 개발자는 독립적으로 작업을 진행하고 실험할 수 있습니다.
  • 새로운 브랜치를 생성하면 현재 브랜치의 상태가 복사되고, 이후의 커밋은 해당 브랜치에 저장됩니다.
  • 각 브랜치는 독립적으로 추적되며, 개발자는 각 브랜치에서 작업하고 변경 사항을 커밋할 수 있습니다.
  • 브랜치를 사용하면 동시에 여러 기능을 개발하거나 버그 수정 등을 병렬로 처리할 수 있습니다.

 

origin/master 와 master 그리고 head

https://kotlinworld.com/288

origin/master:(remote)

  • "origin/master"는 원격 저장소(remote repository)에 있는 "master" 브랜치를 가리키는 참조입니다.
  • 일반적으로, 원격 저장소는 GitHub, GitLab, Bitbucket 등과 같은 서비스를 통해 호스팅되며, 다른 개발자들과 협업하고 코드를 공유하는 데 사용됩니다.
  • "origin/master"는 다른 개발자들이 원격 저장소에 푸시한 최신 변경 사항을 반영합니다. 따라서 이를 가져와서 로컬에 업데이트하고 로컬에서 작업하는 데 사용할 수 있습니다.

 

master:

  • "master"는 로컬 저장소(local repository)에서 사용되는 브랜치의 이름입니다.
  • 로컬 저장소는 개발자의 컴퓨터에 있는 저장소로, 프로젝트의 모든 파일과 버전 기록을 포함합니다.
  • "master" 브랜치는 주로 개발자가 메인 브랜치로 사용하며, 여기에서 안정된 코드가 유지되는 경향이 있습니다.
  • 개발자는 "master" 브랜치에서 새로운 기능을 개발하거나 버그를 수정하는 등의 작업을 수행할 수 있습니다.

https://tanzu.vmware.com/developer/guides/git-rebase-onto-gs/

HEAD:

  • "HEAD"는 현재 작업 중인 커밋을 가리키는 깃의 특수한 포인터입니다.
  • 일반적으로 "HEAD"는 현재 체크아웃된 브랜치의 최신 커밋을 가리킵니다.

 

add, commit, push

git add:

  • git add 명령어는 작업 디렉토리에서 변경된 파일을 스테이징(Staging) 영역에 추가합니다.
  • 변경된 파일을 커밋하기 전에 스테이징 영역에 추가해야 합니다.

git commit:

  • git commit 명령어는 스테이징 영역에 추가된 파일의 변경 사항을 저장소의 버전 기록에 커밋합니다.
  • 커밋 메시지를 작성하여 커밋에 대한 설명을 추가해야 합니다.

git push:

  • git push 명령어는 로컬 저장소의 커밋 기록을 원격 저장소로 푸시합니다.
  • 원격 저장소는 주로 GitHub, GitLab, Bitbucket 등과 같은 서비스를 통해 호스팅됩니다.
  • 푸시하여 로컬에서 원격 저장소로 변경 사항을 업로드하고 공유할 수 있습니다.

 

checkout 과 pull

git checkout:

  • git checkout 명령어는 브랜치를 전환하거나 파일의 내용을 복원하는 데 사용됩니다.
  • 브랜치 전환: 다른 브랜치로 전환하여 해당 브랜치에서 작업할 수 있습니다. 기존의 변경 사항은 커밋되거나 스태시(stash)를 이용하여 보관할 수 있습니다.
  • 사용 예시: git checkout branchname
  • 파일 복원: 수정된 파일을 이전 상태로 복원하거나 특정 커밋에서 파일의 내용을 가져올 수 있습니다.

 

git pull:

  • git pull 명령어는 원격 저장소에서 최신 변경 사항을 가져오고 현재 브랜치에 병합하는 역할을 합니다.
  • git fetch 명령어와 git merge 명령어를 합친 단축 명령어입니다.
  • 원격 저장소의 변경 사항을 로컬로 가져오고, 로컬 브랜치에 자동으로 병합하여 최신 상태를 유지합니다.

 

'Infra > Git-GitHub' 카테고리의 다른 글

Git 과 GitHub (2부)  (0) 2023.07.04