분류 Git

초보자를 위한 Git 가이드.

컨텐츠 정보

  • 조회 638 (작성일 )

본문

이것은 몇 가지 핵심 버전 관리 개념을 이해하는 데 도움이 됩니다.


웹학교 Git강좌


Git : 핵심 버전 제어 개념 이해를 위한 초보자 안내서


Git은 모든 개발자의 툴 벨트에서 중요한 도구입니다.


예를 들어, 얼마 전, 나는 약 20 분 안에 생산 (총적으로 내 잘못)으로 밀어 붙인 주요 문제를 해결할 수 있었습니다. 이것은 아마도 Git없이 고치기 위해 며칠이 걸렸을 것입니다.


https://www.freecodecamp.org/news/git-the-laymans-guide-to-understanding-the-core-concepts/ 


따라서 Git의 가장 기본적인 기능인 준비 및 커밋을 실제로 이해하는 데 시간을 투자하십시오.


참고 :이 문서에는 GitHub와 관련된 내용은 다루지 않습니다. GitHub은 GitHub와 함께 저장 한 코드를 클라우드에 백업 할 수 있는 타사 온라인 웹 서비스입니다. Git은 로컬이고 GitHub는 클라우드 기반 응용 프로그램이며 공통적인 목적을 가진 완전히 다른 두 가지입니다. 


버전 관리란 무엇입니까? 


나이가 많으면 다음과 같은 상황이 발생하는 Google Drive/Docs/Sheets 이전의 세상을 기억할 것입니다.


group_project_example.png 


그룹 프로젝트를 수행하면 여러 사람이 원본 문서의 여러 사본을 편집하려고 할 때 많은 사본이 생성됩니다. 두 사람이 동시에 편집을 수행 한 경우 누군가 수동으로 모든 과정을 거쳐 편집 한 내용을 결합해야 합니다.


다른 버전의 프로젝트를 제어하는 ​​실제 방법은 없었습니다. 기본적으로 와일드 웨스트였습니다. ? + ?


Git이 문제를 해결합니다 ?


어쩌면 프로젝트에서 새로운 기능을 코딩하고 있었지만 이전에는 제대로 작동했던 것을 깨뜨렸지만 버그를 찾을 위치 또는 해결 방법을 모릅니다. 이후 편집기에서 파일을 닫았으므로 "실행 취소"를 사용하는 것은 더 이상 옵션이 아닙니다.


Git이 문제를 해결합니다 ?


Git은 이러한 문제를 어떻게 해결합니까? 


Git의 핵심 기능은 파일에 저장점을 만드는 것입니다. 이 세이브 포인트는 비디오 게임에서와 마찬가지로 생각합니다. 체크 포인트는 해당 포인트 이후에 모든 것을 망쳐 놓더라도 언제든지 다시 돌아올 필요 없이 다시 돌아올 수 있습니다.


Git에는 멋진 추가 기능이 많이 있지만 그 핵심은 핵심입니다. 코드에 저장점을 생성하면 나중에 원할 경우 나중에 다시 올 수 있습니다.


Git은 어떻게 작동합니까? 

  1. 타임 라인에서 커밋 (저장) 할 준비 영역에 항목 (변경된 코드 및 파일) 추가
  2. 실제로 그런 것들을 저지르고 (저장)합니다.


의무적 유추 


이 두 단계를 마치 구식 사진 앨범을 만드는 것처럼 생각합니다. 하나는 사진을 인쇄하여 실제 책에 넣는 것입니다. 당신이 너무 어릴 경우, 이것이 내가 말하는 것입니다.


photo-album-631084_960_720.jpg 


먼저, 카메라로 많은 사진을 찍습니다. 앨범에 포함 할 사진을 항상 선택하고 선택할 수 있기 때문에 사진 만 찍으면 사진 앨범에 영향을 미치지 않습니다. 나쁜 사진을 찍고 필요한 경우 다시 찍을 수 있습니다.


다음으로, 촬영 한 모든 사진 중 사진 앨범에 저장하려는 사진을 선택합니다. 이미 인쇄했으며 사진 앨범의 빈 페이지 옆에 설정했다고 가정 해보십시오. 아직 사진 앨범의 페이지에 사진을 붙이지 않은 일종의 "스테이징 영역"을 만들고 있지만 곧 준비 중입니다.


마지막으로 준비가 되면 사진을 페이지에 붙이고 기본적으로 제 시간에 시멘트를 바르십시오. 좋은 사진 앨범의 중요한 부분은 사진을 둘러싼 이벤트를 설명하는 메시지 나 제목을 포함하는 것입니다.


이것이 Git과 어떤 관련이 있습니까? 

이 비유를 Git과 관련시켜 봅시다.

  • 사진을 찍는 것은 프로젝트 파일 수정 (코드 작성, 파일 작성 또는 파일 삭제)과 같습니다.
  • 사진 앨범에서 원하는 사진을 선택하는 것은 "스테이징 영역"에 변경 사항을 추가하는 것과 같습니다.
  • 사진을 사진 앨범 페이지에 붙이는 것은 변경 사항을 변경 일정에 적용 (저장)하는 것과 같습니다.

이것들을 조금 더 세분화합시다.


사진을 찍는 것은 프로젝트 파일을 수정하는 것과 같습니다 


사진을 찍는 것은 새 코드 작성, 이미지 추가, 오래된 파일 삭제 등 프로젝트를 변경하는 것과 같습니다. Git 커밋에 저장하려는 콘텐츠를 만들고 있습니다 (“저장 지점”). 여전히 진행 중인 작업이므로 아직 "영구적으로"저장하지 않고도 원하는 것을 항상 쓰고, 다시 쓰고, 삭제할 수 있습니다.


Git이 이 시점에서 하고 있는 유일한 일은 코드를 마지막으로 커밋 (저장) 한 이후에 변경된 것이 있는지 확인하는 것입니다. 코드 줄을 추가하고 삭제하면 Git은 전체적으로 변경된 것이 없음을 알 수 있습니다. 수십 개의 파일에 500 줄의 코드를 작성하면 Git은 어떤 코드 줄이 어떤 파일에 추가되었는지 정확히 알고 그 변경 사항을 기억합니다. 변경 사항을 알려줄 때까지 변경 일정에 아무런 영향을 미치지 않지만 늦게 보고 있습니다 ?


참고 : 여전히 변경 사항을 하드 드라이브에 저장하는 것과 완전히 별개의 프로세스를 언급하고 있음을 기억하십시오. 최신 텍스트 편집기는 1 초마다 코드를 저장할 수 있지만 여기서 언급하는 것은 아닙니다. Git으로 "저장"을 언급 할 때, 변경 사항을 타임 라인에 저장하는 커밋을 생성한다는 의미입니다.


선택한 사진을 인쇄 / 준비하는 것은 "스테이지 영역"에 프로젝트 변경 사항을 추가하는 것과 같습니다 


Git을 사용하면 코드에서 새로운 커밋을 만들기 전에 발생하는 단계입니다. 이 프로세스를 "스테이징 영역에 추가"라고 합니다. 스테이징 영역에 추가하면 커밋이 생성되지 않고 커밋 만 준비됩니다.


준비 영역에 일부 파일을 추가 한 후에도 여전히 일부 변경 사항이 있음을 알 수 있습니다. 문제 없어요! Git은 실제로 아직 아무것도 저장하지 않았으므로 (변경된) 이전에 추가 한 파일과 동일한 파일에서 변경 사항이 발생하더라도 원하는 대로 새 변경 사항을 작성한 후 해당 변경 사항을 스테이징 영역에도 추가 할 수 있습니다. 사진 앨범 페이지에 추가하기로 결정한 새 사진을 찍어 인쇄하는 것과 같습니다.


앨범에 사진을 붙이는 것은 코드를 커밋하는 것과 같습니다 


이것은 "저장 지점"(커밋)을 만드는 두 번째 (최종) 단계입니다. 커밋을 만들 때 한 가지 중요한 요구 사항이 있습니다. 메시지를 포함해야 합니다. 사진 앨범에서 제목이나 메시지를 작성하여 미래의 구경꾼에게 해당 사진의 의미에 대한 정보를 제공 할 수 있습니다. Git에서는 코드베이스에 저장 한 변경 사항을 설명하는 메시지를 작성합니다.


잘못된 커밋 메시지를 작성하는 경우 코드 기록을 되돌아 보는 것이 자신을 포함한 모든 사람에게 큰 도움이 되지는 않습니다. (그 변경 내용이 무엇인지 모를 경우“일부 변경”과 같은 메시지가 어떤 것이 좋을까요? 사진 앨범에서“일부 사람들이 있습니다”라는 페이지를 찾는다고 상상해보십시오. 코드베이스에 추가 할 기능 또는 수정 사항을 설명하는 훌륭하고 설명적인 커밋 메시지.


git_commit_2x.png 


설정 


설치 

먼저 Git이 이미 설치되어 있을 수 있습니다. 터미널 / 명령 프롬프트를 열고 git --version을 실행하십시오. 버전 번호가 나오면 건너 뛰십시오. git의 의미를 모르는 경우 설치해야 합니다. 운영 체제에 맞게 다음 지침을 따르십시오.


저장소 만들기 


Git은 Git 리포지토리로 설정한 프로젝트만 추적합니다. 위의 비유에서 처음에 사진 앨범이 없으면 사진을 사진 앨범에 붙일 수 없었습니다.


새 프로젝트를 시작할 준비가 되면 프로젝트 폴더를 만든 후 가장 먼저 수행해야 할 단계 중 하나를 실행하십시오.

git init

Screen-Shot-2019-08-24-at-11.37.09-AM.png 



이를 통해 Git은 프로젝트 변경 사항을 즉시 추적 할 수 있습니다. 후드 아래에는 변경 사항을 추적하는 데 필요한 모든 내용이 포함 된 새로운 숨겨진 .git 폴더가 생성됩니다. 고급 항목을 설정하지 않는 한이 폴더에 들어 가지 않아도 되므로 지금은 그대로 두십시오.


프로젝트를 변경하십시오 


아래 튜토리얼에서는 가능한 한 간단하게하겠습니다. 내부에 단일 README.md 마크 다운 파일이 있는 Git 리포지토리 인 프로젝트 폴더입니다. 도움이 된다면 README 파일을 변경할 때마다 새로운 기능과 수십 또는 수백 줄의 새로운 코드가 나타납니다. 저도 더욱 인상적으로 보일 것입니다. ???


기본 명령 


git status


나는 이것을 Git이 현재 진행하고 있다고 믿는 것을 돕기 위해 "위생 검사"라고 생각하고 싶다. (모든 것이 정상적으로 작동하는 경우 눈에 띄는 변경 사항 등)


Screen-Shot-2019-08-24-at-11.38.21-AM.png 


그것은 내가 마스터 브랜치에 있고 (나중에 브랜치에 대한 별도의 기사를 작성할 것입니다), 아직 이전 커밋이 없으며 지금 커밋 할 것이 없다는 것을 알려줍니다. 즉, Git 은이 폴더에 대해 아무것도 저장하지 않습니다.


이제 README.md 파일을 추가하고 git status를 다시 실행하겠습니다.


Screen-Shot-2019-08-24-at-11.40.35-AM.png 


Git은 프로젝트에 새 파일을 추가 한 것을 본다! 시원한. 이 멋진 새 프로젝트가 진행 중이므로 저장 점을 만들어 보겠습니다. 아시다시피 이 지점으로 처음부터 다시 돌아 가기가 어렵습니다!

git add

git add 명령은 스테이징 영역에 물건을 넣는 방법입니다. 사진 앨범 페이지에 붙여 넣기 전에 찍은 사진을 인쇄하는 것과 같습니다. 그러나 준비 영역에 추가 할 내용을 Git에 알려야 합니다. (git add를 입력하면 아무것도 지정되지 않았으므로 아무것도 추가되지 않았다는 것을 알 수 있습니다.) Git을 사용하여 추가하려는 파일의 파일 이름을 입력합니다.

git add README.md
git status

Screen-Shot-2019-08-24-at-12.21.22-PM.png 


git status를 다시 사용하면 준비 영역에 새 파일이 있음을 알 수 있지만 이제 녹색으로 바뀝니다! 그것이 준비 영역에 추가되었다는 것을 쉽게 알 수 있는 방법입니다.


기본적으로 git add README.md의 역할은 Git에게“앞으로 커밋에 포함될 마지막 커밋 이후 README.md에 대한 변경 사항을 포함하고 싶습니다.”입니다.

그러나 이와 같이 한 번에 하나씩 파일을 준비 영역에 추가하는 것은 부담이 됩니다. 특히 많은 작업을 수행하려면 많은 파일을 사용해야 합니다. 작업중인 모든 파일을 기억하고 지정하는 대신 준비 영역을 변경 한 모든 파일을 자동으로 추가하는 일종의 "캐치 콜"을 사용할 수 있습니다. 이 작업을 선호하는 방법은 다음을 사용하는 것입니다.


git add -A

-A 플래그는 모든 파일을 스테이징 영역에 추가하도록 지시합니다.


참고 : 사람들이 종종 git add를 사용하는 것을 보게 됩니다. 스테이징 영역에 모든 변경 사항을 추가하는 동일한 목표를 달성합니다. 이것이 작동하는 동안 모든 변경 사항을 가져 오려면 프로젝트 루트 디렉토리에 있어야 합니다. .는“현재 디렉토리”의 줄임말 입니다. 따라서 중첩 된 디렉토리로 들어가지만 해당 디렉토리 외부의 파일을 변경하고 git add를 사용하려고 하면 스테이징 영역에 파일을 추가하려고 할 때 변경된 파일이 누락됩니다. 그러나 git add -A는 현재 터미널 위치에 관계없이 전체 프로젝트에서 작동합니다.

git commit


커밋을 만들 준비가 되면 git commit 명령을 사용하면 됩니다. 그러나 메시지를 남기는 방법을 기억하십니까? git commit을 실행하고 Enter 키를 누르면 Vi 또는 Nano와 같은 터미널 기반 편집기에 팝업 되어 해당 커밋에 대한 메시지를 채 웁니다.


대신 -m 플래그를 사용하고 따옴표로 묶은 문자열 메시지를 사용하여 git commit과 함께 메시지를 그대로 둘 수 있습니다. 이 같은:


git commit -m "Added some really important information to the README"

커밋 하기 전에 다른 모든 것이 순서대로 되어 있다고 가정하면 이제 Git으로 코드를 커밋했습니다. 이제 여기서부터 모든 것이 잘못되면 항상 되돌아 갈 수 있는 체크 포인트가 있습니다.


이 프로세스를 gif 형식으로 다시 살펴 보겠습니다.


Git-gif.gif 


참고 : gif는 git add를 사용하지만 더 정확한 git add -A를 사용해야 합니다. 또한 더 나은 커밋 메시지를 사용하십시오! 내 실수를 용서해주세요 ??

git log


git log를 실행하면 커밋 히스토리를 엿볼 수 있습니다. 화살표 키를 사용하여 커밋 날짜, 메시지 및 작성자 (커밋 한 사람)를 확인하기 위해 앞뒤로 스크롤 할 수 있습니다. 이것들 각각과 함께“커밋 해시”(commit hash)가 제공되는데, 이것은 필요에 따라 나중에 참조하기 위해 사용될 수 있는 커밋의 고유 한 ID입니다.


Time Travel 


"그래서 Git이 어떻게 앞뒤로 건너 뛸 수 있는지에 대해 계속 이야기하고 있습니다. 어떻게 하면 실제로 그렇게 합니까?"


git checkout


"체크 아웃"이라는 용어는 한 커밋에서 다른 커밋으로 전환하는 프로세스를 나타냅니다. 각 커밋이 받는 고유 ID ( "해시")를 기억하십니까? 커밋 히스토리를 되돌아보고 고유 커밋 해시 중 하나를 선택한 다음 git checkout 명령으로 확인할 수 있습니다. 내가 보고 싶은 커밋에 a2의 해시가 있다면 (0c9b8f7c23dea4cf0a0285f14211124b6d5891e9와 같이 이보다 훨씬 길다) 다음을 실행할 수 있습니다.


git checkout a2

갑자기 전체 코드베이스가 시간이 지남에 따라 축소되고 커밋을 한 직후 모든 것이 보일 것입니다. (이 커밋 이후 모든 업데이트를 잃어버린 것처럼 보일 수도 있지만 걱정하지 마십시오. 앞으로도 계속 기다리고 있습니다 ... 미래에!)


gif 형식으로 :

git_checkout-2.gif 


이제 다시 돌아 왔으니 Git의 메시지가 표시됩니다. 다음과 같은 것 :

Note: checking out 'a2'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:

  git checkout -b <new-branch-name>

HEAD is now at a2 Another Message

이 상태에서는 더 이상 마스터 브랜치에 있지 않으므로 마스터 브랜치에서 코드를 잃지 않고 여기서 실험적으로 변경하고 새 커밋을 만들 수 있습니다 (위 예제에서 해시 a3 커밋).


다시 한 번, 분기를 다룰 계획이지만, 이것은 여러 버전의 코드를 저장할 때 Git이 정말 강력한 도구라는 점을 강조합니다.


결론 


Git에 대해 배울 수있는 것은 백만 가지이지만 핵심 개념을 이해하지 못하면 항상 약간의 수수께끼가 될 것입니다.


그러나 실제로 Git을 배우고 친숙해지고 싶다면 최선을 다해 시험해보십시오. V School 오리엔테이션 당일, 저는 항상 새로운 학생들에게 새로운 것을 배우는 가장 쉬운 방법은 어려운 방법이라고 말합니다.


즉, 기사를 읽고 내용을 배우는 것 이상의 일을 강요해야 합니다. 따라서 빈 폴더에 새 Git 저장소를 스핀 업하고 파일 추가를 시작하고 git status 및 git log 뭉치를 사용하여 어떤 모양인지 확인하고 엉망이 되는 동안 Atlassian의 Sourcetree를 다운로드하여 저장소 상태를 시각화 하십시오 사물과 함께.


Git을 사용하여 학습 곡선을 극복 한 후에는 Git없이 어떻게 개발했는지 궁금 할 것입니다!

Git