TIL 18일차 - [Git] Git Repository

Yoon Kyung Park·2023년 5월 3일
0

TIL

목록 보기
18/75
  • 일반 디렉토리와 깃 리포지토리와의 차이점에 대해 설명할 수 있다.

o
일반 디렉토리는 내 local 환경에서 나만 볼 수 있는 작업 폴더이고,
git repository는 내 remote(원격) 환경에서 다른 사람에게 내 작업물을 공개하고, 다른 사람들이 내 작업물을 변경할 수 있도록 하는 오픈 저장소다.

  • git staging area에 대해서 설명할 수 있다.

o
commit에 포함될 변경 사항을 선택하는 공간으로
작업대에 비유할 수 있다.
작업 중이 폴더를 저장하기 전에 보관하는 공간으로
work space에서 git add 명령어로
작업대에 올려두는 commit하기 전에
내용을 기록하는 장소로 이후 git commit을 하면,
해당 변경 사항을 git repository에 저장할 수 있다.

스테이징 영역에 추가된 파일은
commit에 포함될 변경 사항으로 선택된 것으로
스테이징 영역을 사용하면,
변경한 파일들 중 일부만을 커밋에 포함시키고 싶을 때 유용하다.
예를 들어, 여러 개의 파일을 수정했지만,
그 중에서 일부 파일만 커밋에 포함시키고 싶을 때,
해당 파일들을 스테이징 영역으로 추가하고 커밋을 생성하면 된다.

여기서 commit은 최종 저장과 같이 일종의 스냅샷
(컴퓨터에서는 파일이나 데이터의 특정 시점의 상태를 의미)으로,
특정 시점에 저장소에 대해 수행한 변경 사항을 나타낸다.
동기화는 되지 않는 코드 저장소와 같다.

Git에서 커밋을 만들면
수행한 변경 사항이 로컬 저장소에 저장된다.
다른 사람과 해당 변경 사항을 공유하려면
git push 명령을 사용하여 커밋을 원격 저장소에 푸시할 수 있다.
이후 다른 개발자가 원격 저장소에서
변경 사항을 가져와 자신의 로컬 저장소에 통합할 수 있다.

  • git add로 git staging area의 내용을 변경할 수 있다.

o
변경한 내용을 commit하여 저장하기 전에 작업대에 올리기 위해 git add 명령어를 사용하여 git staging area에 저장할 수 있다.

  • git add와 git commit의 차이점에 대해서 설명할 수 있다.

o
git add는 work space에서 staging area로 보내기 위한 명령어고, git commit은 staging area에서 최종으로 저장할 내용들을 선택적으로 저장하는 명령어다.

이때 work space는
"working directory" 또는 "working tree"과 같은 의미로
현재 작업 중인 Git 저장소의 디렉토리를 의미한다.
간단히 말해서, 프로젝트 파일이 있는 디렉토리다.

작업 디렉토리에는
현재 작업 중인 파일과 이전에 커밋한 파일이 모두 포함된다.

이 디렉토리에서 파일을 수정하면,
해당 파일의 상태는 "unstaged" 상태가 되며,
이후 git add 명령을 사용하여 스테이징 영역으로 파일을 추가해야만 커밋에 포함될 수 있다.

작업 디렉토리는 로컬 저장소의 일부로,
Git이 현재 작업 중인 파일들을 추적하고,
변경 사항을 관리할 수 있도록 하며,
Git 저장소를 복제할 때 자동으로 생성되고,
작업 디렉토리에서의 파일 변경 사항이나 커밋을
원격 저장소와 동기화하여 다른 개발자와 공유할 수 있다.

  • git commit으로 로컬 깃 리포지토리에 코드 변경점을 기록할 수 있다.

o
git은 개발자의 코드를 효율적으로 관리하기 위해서 개발된
'분산형 버전 관리 시스템'이다.
따라서 파일들의 버전을 관리하기 때문에 commit을 할 때는 세세하게 한 마디로 표현할 수 있는 작업 단위별로 하는 것이 좋다.
저장된 버전이 많아야 뒤로 돌아갈 수 있다.

  • 로컬 깃 리포지토리와 원격 깃 리포지토리 github 차이점에 대해 설명할 수 있다.

o
이 둘은 위치, 액세스, 목적, 보안의 차이가 있다.

로컬 Git 리포지토리는 개발자의 컴퓨터에 저장되어 있으며,
개발자가 로컬에서 변경 사항을 만들고 관리한다.
반면에 원격 Git 리포지토리는 인터넷 상의 서버에 저장되어 있으며,
여러 개발자가 함께 작업하고 변경 사항을 공유한다.

로컬 Git 리포지토리는 개발자의 컴퓨터에서만 액세스할 수 있다.
반면에 원격 Git 리포지토리는 인터넷에 연결된 모든 기기에서 액세스할 수 있다.

로컬 Git 리포지토리는 개발자 개인의 작업을 위한 것이므로,
협업을 위해서는 개발자들이 직접 변경 사항을 주고받아야 한다.
반면에 원격 Git 리포지토리는 여러 개발자가 함께 작업하고
변경 사항을 공유할 수 있도록 설계되어 있어서
원격 Git 리포지토리를 사용하면,
여러 개발자가 동시에 작업하고 변경 사항을 공유하며 협업할 수 있다.

로컬 Git 리포지토리는 개발자의 컴퓨터에 저장되어 있으므로,
해당 컴퓨터에 대한 보안 조치가 필요하다.
반면에 원격 Git 리포지토리는 인터넷에 연결되어 있으므로,
보안 위협에 노출될 수 있다.
따라서 GitHub와 같은 원격 Git 리포지토리 서비스는
보안에 대한 다양한 기능을 제공하여 사용자들의 보안을 강화하고 있다.

따라서 로컬 Git 리포지토리와 원격 Git 리포지토리는 각각 개발자 개인의 작업과 여러 개발자들의 협업을 위한 것이다.

  • git clone이 원격 깃 리포지토리를 가져온다는 것을 이해한다.

o
다른 개발자의 리포지토리를 fork하여 가져온 것을 내 원격저장소에서 내 로컬저장소로 가져오기 위해서는 git clone 명령어를 사용한다.
내 로컬 저장소로 clone이 되면, 복사된 파일명으로 폴더가 생성되며,
해당 폴더 안에 git 리포지토리의 모든 파일과 폴더가 복제되므로
별도로 git init으로 git repository를 추가할 필요가 없다.

  • git pull과 git push에 대해서 이해한다.

o

git pull 명령어는 내 원격 저장소의 변경 사항을
내 로컬 저장소로 가져오기 위한 명령어다.
즉, git pull 명령어는
로컬 저장소에 있는 내용을 원격 저장소의 최신 버전으로 업데이트하고 싶을 때 사용한다.

git pull 명령어는
내부적으로 git fetch와 git merge 명령어를 실행하여
원격 저장소에서 변경된 내용을 로컬 저장소에 가져오고,
로컬 저장소의 변경 내용을 원격 저장소의 변경 내용과 병합한다.

git push는 내 로컬 저장소에 commit된 변경 사항들을
내 원격 저장소에 보내기 위해 사용하는 명령어다.
로컬 저장소에서 변경한 내용을 원격 저장소에 반영하고 싶을 때 사용한다.

따라서, git pull 명령어는 원격 저장소의 변경 사항을 로컬 저장소로 가져오는 명령어고,
git push 명령어는 로컬 저장소의 변경 사항을 원격 저장소로 전송하는 명령어다.

  • git pull과 git push로 로컬 깃 리포지터리와 원격 깃 리포지토리의 내용을 쉽게 주고받을 수 있다.

o (위에서 설명함)

  • git을 이해하기 위해 비유해보자.

Git에는 로컬 저장소, 원격 저장소, 다른 사람의 원격 저장소 세 가지 종류의 저장소가 있다.

로컬 저장소(Local Repository)는 사용자의 컴퓨터 환경에
있는 저장소로 Git으로 버전 관리를 할 프로젝트의 디렉토리를 의미한다.
로컬 저장소에는 프로젝트의 모든 파일과 Git으로 관리하는 모든 정보(커밋 히스토리, 브랜치, 태그 등)가 저장된다.

원격 저장소(Remote Repository)은 로컬 저장소와는 별도로,
프로젝트의 버전을 관리하는 또 다른 저장소를 원격 저장소다.
원격 저장소는 다른 사용자와 협업하거나, 백업 용도로 사용된다.

다른 사람의 원격 저장소(Upstream Repository)는 다른 사람이 만든 원격 저장소로 이 저장소는 프로젝트의 소스 코드를 가져올 때 사용된다.
다른 사람의 원격 저장소에서 변경된 내용을 가져오기 위해서는
git fetch 명령어를 사용한다.

따라서, 로컬 저장소와 원격 저장소 간에는
'git push'와 'git pull' 명령어를 사용하여
서로 변경 사항을 주고받으며,
다른 사람의 원격 저장소와는 'git fetch'와 'git merge'
혹은 'git rebase' 명령어를 사용하여
소스 코드를 가져오고 병합한다.

이러한 역할로 보아 로컬 저장소는 나의 집, 원격 저장소는 내 집 마당, 다른 사람의 원격 저장소는 다른 사람 집의 마당이라고 생각하면 된다.

+) 추가적으로 학습하다가 궁금하여 찾아본 내용

  • staging area랑 stash의 차이는 뭘까?

Git에서 "staging area"와 "stash"는 둘 다 변경 사항을 일시적으로 보관하거나 적용할 수 있는 기능이지만, 목적과 사용 방법이 다르다.

"Staging area"는 <이미 추적하고 있는 파일> 중에서
일부 파일만 커밋에 추가하기 위해 사용된다.
이를 위해 'git add' 명령을 사용하여
작업 디렉토리(work space)의 변경 내용을
스테이징 영역에 추가해야 한다.
이후 'git commit' 명령을 사용하여
스테이징 영역에 있는 변경 사항을 커밋으로 저장할 수 있다.

반면에 "stash"는
<아직 추적하지 않는 파일>의 변경 사항이나
<작업 중인 파일>의 변경 사항을 일시적으로 저장할 때 사용된다.

'git stash' 명령을 사용하여 변경 사항을 stash에 저장하고,
이후 'git stash apply' 명령을 사용하여
변경 사항을 다시 가져올 수 있다.
이를 통해, 다른 브랜치로 이동하기 전에 작업 중인 변경 사항을
일시적으로 저장하고, 나중에 다시 불러와서 작업을 계속할 수 있다.

따라서, "staging area"는
이미 추적하고 있는 파일의 변경 사항을
일부 커밋으로 저장하는 데 사용되고,
"stash"는 아직 추적하지 않는 파일의 변경 사항이나
작업 중인 파일의 변경 사항을 일시적으로 저장하는 데 사용된다.

  • git fetch와 fork의 차이는 뭘까?

서로 다른 목적으로 사용되는 Git의 기능이다.
git fetch는
원격 저장소의 변경 사항을 로컬 저장소로 가져오기 위한 명령어이며,
fork는 다른 사람의 원격 저장소를 자신의 원격 저장소로 복제하는 작업을 말한다.

  • git fetch와 git push의 차이는 뭘까?

git fetch 명령어는
로컬 저장소와 연결된 원격 저장소에서 변경된 사항들을 가져와
로컬 저장소에 반영하지만,
가져온 변경 사항들은 아직 로컬 저장소에 합쳐지지 않았으므로,
로컬 저장소에서 변경 작업을 수행하고 원격 저장소로 변경 사항을 반영하기 전에
반드시 로컬에서 변경된 작업을 확인하고 병합 작업을 수행해야 한다.

반면에 git push 명령어는
로컬 저장소의 변경 사항을 원격 저장소로 보내는 작업을 한다.

따라서, git fetch와 git push는 Git에서 서로 다른 명령어로,
각각 다른 용도로 사용된다.
git fetch는 원격 저장소에서 변경 사항을 가져와 로컬 저장소에 반영하는 명령어이고,
git push는 로컬 저장소에서 작업한 변경 사항을 원격 저장소로 보내는 명령어다.

  • git fetch와 git remote add의 차이는 뭘까?

git fetch와 git push는 Git에서 서로 다른 명령어다.
하지만 git remote add와는 비슷한 목적으로 사용될 수 있다.

git remote add 명령어는
로컬 저장소에 새로운 원격 저장소를 추가하기 위한 명령어다.
이 명령어를 사용하여 원격 저장소를 추가하면,
git fetch와 git push 명령어에서
해당 원격 저장소를 사용할 수 있다.

즉, git remote add를 사용하여 원격 저장소를 '추가'한 후에는
git fetch를 사용하여 해당 원격 저장소에서 변경 사항을 '가져올' 수 있으며,
git push를 사용하여 해당 원격 저장소로 변경 사항을 '전송'할 수 있다.

따라서, git remote add와 git fetch, git push는 각각 다른 명령어이지만, 원격 저장소를 추가하여 사용하면 유사한 목적으로 사용될 수 있다.

소감

🔡➡️💻➡️🤓👍

본격적으로 학습을 하기 전에 무료 강의를 들으며
만든 작업물들을 Github에 올린 적이 있다.
그때 Git에 대해 이해하기 어려웠는데,
이렇게 시간을 들여 하나 하나 따지고 들여다보니
이제 어느정도 Git의 체계가 보인다.

엔지니어님이 추천해주신 <<pro Git>> 책을
나중에 읽어봐야겠다.
페이지가 꽤나 되어 참고서로 활용하기 좋다고 하셨다.

오늘은 Git repository에 대해 학습했고,
나만의 webapp을 만드는 시간이었다.

다 완성하지 못했지만, section1에서 배운 내용들을
최대한 적용해보려고 한다.

다 완성하면 엄청 뿌듯하겠다!
나만의 WebApp을 만들어보자! 👊

profile
developerpyk

0개의 댓글