Hyperskill - 컴퓨터 CS 및 영어 독해/Introduction to Git

Local work - 로컬 저장소에서 Git 작업하기

코딩크리처 2024. 5. 28. 09:59

hyperskill - Local work 영어 원문

The model of work - 모델의 작동 원리


당신이 Github에서 호스팅 된 repository를 가지고 있는데, 이는 당신이 개발중인 프로젝트라고 가정 해 봅시다.

아마 이것은 fork된 repository 이거나, 원본일 것 입니다.

여기서 포인트는 당신이 모든 접근 권한을 가지고 있다는 겁니다.


프로젝트를 작업하는 표준적인 접근법은 repositorylocal 복사본을 가지고,

웹 인터페이스에 Github에 호스팅 된 remote repo를 변화시키는 것 보다,

해당 복사본에 당신의 변화를 commit 하는 겁니다.

local 이란, 코드를 가지고 있는 서버가 아니라, Git을 통해 코드를 다운로드 받은 스스로의 컴퓨터, 혹은 기기를 의미합니다.

이러한 local repository 는 프로젝트의 모든 버전 기록을 가지고 있는데,

이는 인터넷 연결 없이 작업 할 때 유용합니다.

당신이 local repo에서 몇 가지 변화시키고 난 후,

다른 개발자들이 볼 수 있게 remote repository에 당신의 변화들을 push 할 수 있습니다.


밑의 모델은 Github와 작업하는 방식에 대한 모델을 보여줍니다.

flowchart BT
    GitHub
    Your_Computer
    upstream[("upstream")]
    origin[("origin")]
    working_copy("working\ncopy")
    local[("local")]
    subgraph GitHub
        direction LR
            upstream -. fork .-> origin
            origin -- pull request --> upstream
    end
    subgraph Your_Computer
        direction TB
            working_copy -- commit --> local
            local -- checkout --> working_copy
    end
    origin -- pull ---> local
    local -- push ---> origin
    origin -. clone .-> local

첫 번째로, GitHub와 관련된 블록을 보세요. 두 개의 repository가 있습니다.

  • upstream 은 당신이 fork 한 프로젝트의 원본 repo 입니다.
  • origin 은 당신이 모든 접근 권한을 가지고 있는 GitHub에 있는 당신의 fork (copy) 입니다.

당신의 fork에서 일어난 변화를 프로젝트의 오리지널 repo에 구현하기 위해서,

우리가 전에 한 것 처럼 pull request를 만들어야 합니다.


만약 당신의 repo (fork) 에서 작은 변화를 만들고 싶다면, GitHub의 웹 인터페이스를 사용 할 수 있습니다.

하지만, 이러한 접근법은 프로그램을 개발 할 때 편한 방법이 아닙니다.

왜냐하면 당신은 종종 당신의 컴퓨터에서 프로그램을 구동하고, 디버깅하기 때문입니다.

표준적인 방식은 remote repository (원격 저장소) 의 local 복제본을 생성하고, 컴퓨터에서 직접 작업한 뒤,

때때로 remote repo에 당신이 만든 변화를 pushing 하는 겁니다.


Cloning a repo - 레포지토리 복사하기


지금, 우리의 교육적 목적의 repository 에서 fork 한 당신의 fork repo를 컴퓨터에 clone (복사) 해야 합니다.

녹색으로 되어 있는 <> 버튼을 클릭하세요.

repository 복사본에 대한 작업을 계속하는 데 사용 할 수 있는 여러 가지 방법이 존재합니다.

첫 번째 옵션은 당신이 복사를 위해 사용 할 수 있는 repository URL을 제공합니다. :

클립보드에 링크를 복사해 두기 위해 copy 아이콘을 클릭하세요.

그리고 나서, 당신의 command line 혹은 terminal을 열고, 당신이 repo를 복사하고 싶은 장소로 디렉토리를 옮기세요.

그리고 git clone을 작성 하고, 주소를 입력하세요 :

$ git clone https://github.com/hyperskill/intro-to-github.git

팁 - 1

GitHub CLI를 사용해서 repo 를 복사하거나,

.zip 파일로서 코드를 다운로드 하는 것과 같이 다른 방식으로 자유롭게 탐색하세요.

또한 Codespaces tab으로 전환하여 클라우드 기반의 개발 환경에서 repo의 복사본을 작업 할 수 있습니다.


팁 - 2

repo를 복사하는 데 있어 HTTPS 대신 SSH로 변경할 수 있다는 점을 참고하세요.

우리는 여기서 이를 다루지 않지만, 아마 이것을 어떻게 수행하는지 배울 것이며,

만약 당신이 이에 관심이 있다면 SSH를 사용 할 겁니다. (개발자들은 종종 연습 시 SSH를 선호합니다)

돌아와서

이제, 당신은 프로젝트의 local repository를 가졌습니다.


Creating branch locally - 로컬에서 Branch 생성하기


repository의 디렉토리를 탐색하고, 내부의 컨텐츠를 살펴보세요.

local reporemote repository와 같이 모든 파일들, 브랜치들, commits history를 포함하고 있습니다.

당신 repo의 상태를 확인하기 위해 이 명령어를 치세요 :

$ git status

현재 브랜치 master
브랜치가 'origin/master'에 맞게 업데이트된 상태입니다.

커밋할 사항 없음, 작업 폴더 깨끗함

지금 작업 복사본은 실제로 당신의 local repomaster branch에 있습니다.

그리고 이는 fork 되었던 remote repository (origin)master branch와 유사합니다.

당신의 local repo에서 변화를 만들기 위해, 첫 번째로, master 브랜치를 보호하기 위해 새로운 브랜치를 생성해야 합니다.

밑의 명령어를 치세요 :

$ git checkout edit-readme

이 명령어가 실행 된 후, 새로운 브랜치 edit-readme가 생성되었습니다.

하지만, 당신은 여전히 master 브랜치에 있습니다.

이전 예제와 같이 git status를 사용하여 이를 확인하기 바랍니다.


또다른 브랜치로 가기 위해서, checkout 와 브랜치 이름을 사용하세요 :

$ git checkout edit-readme
현재 브랜치 edit-readme
커밋할 사항 없음, 작업 폴더 깨끗함

지금 당신은 바로 직전에 생성한 edit-readme 브랜치에 있습니다.

$ git status

우리는 새로운 브랜치에서 몇 가지 변화를 만들 준비가 되었습니다.


Modifying content - 컨텐츠 수정하기


기본적인 workflow (업무 흐름)은 이와 같습니다 :

  1. 당신의 작업 복사본에서 파일을 수정하세요.
  2. 다음 commit의 일부가 되길 원하는 변화된 파일을 선택하고, 스테이징하세요. (준비.)
  3. 당신의 변경 사항들을 포함한 commit을 수행하세요.

변화를 만들어 봅시다!

README.md 파일을 열고 몇 개의 줄을 내부에 작성하세요.

그리고 나서 다시 repostatus를 확인 하고, 파일이 변경되었다는 것을 볼 수 있습니다.

지금, add 를 사용하여 이러한 변경 사항들을 준비하세요 :

$ git add README.md

당신은 이러한 변경 사항들을 설명적인 문구와 함께 당신의 local repocommit 할 수 있습니다.

$ git commit -m "Add information about local repository in readme file"

당신은 필요한 만큼 많은 commit을 만들 수 있습니다.

변경사항들은 서로 다를 수 있습니다 : 새로운 파일을 추가하거나, 삭제하거나, 존재하는 파일을 수정하거나.

commit 을 사용하기 전에 add를 사용하여 변경 사항을 준비하는 것을 잊지 마세요.


Pull and push


commit은 단지 local repository 에만 변경 사항을 추가한다는 것을 기억해야 합니다.

만약 당신이 이러한 commit들을 GitHub에 있는 원본 repo에 전파하고 싶다면, push 명령어를 사용해야 합니다.


처음인 만큼, remote repo에 현재 local branchedit-readme 브랜치가 없기 때문에,

당신의 local branch 도 같이 push 해야 합니다.

$ git push --set-upstream origin edit-readme

--set-upstream 명령어는 로컬 저장소에서 원격 저장소로 쉽게 pushpull 할 수 있게 도와주는 명령어입니다.

하지만, 해당 예제에서는 hyperskill/intro-to-github에서 바로 clone 하여 가져왔습니다.

따라서, 403 Forbidden 에러가 뜨는데, 이는 hyperskill repo에 대한 권한이 없기 때문입니다.

이 글의 원문 저자가 원본 repo에 대한 권한이 있어 에러가 뜨지 않았겠지만, 우리는 권한이 없기에 에러가 나게 됩니다.


그 다음 push 부터는 쉬워집니다 :

$ git push 

--set-upstream 옵션으로 앞으로 push, pull 과 같은 명령어 사용 시 기본으로 적용된다는 설명입니다.


누군가 만든 변경 사항들을 얻기 위해서는, pull을 사용하세요 :

$ git pull

pull을 주기적으로 실행했을 때 좋은 것은, 특히 push 하기 전입니다.

똑같은 branchrepository에서 누군가 파일을 변경 했을 때 일어날 수 있는 문제를 방지 할 수 있다는 점입니다.


변경사항을 당신의 branchpush 하고 난 후,

우리가 했던 것 처럼 GitHub에서 push 한 내역을 찾고, 원본 (upstream)에 Pull Request를 생성 할 겁니다.


우리가 아직 고려하지 않은 또다른 문제가 있습니다 :

당신의 fork에서 작업하고 있는 동안 누군가 원본 (upstream) repo 를 변경 할 수 있습니다.

당신은 이러한 변경 사항들에 있어 local reporemote repository를 동기화시켜야 합니다.

이런 문제에 대해서는 다른 토픽에서 더 가까이 살펴 보겠습니다.



words to remember


verify : 확인하다, 증명하다, 입증하다, 실증하다

propagate : 전파하다, 선전하다, 보급시키다, 번식시키다

periodically : 주기적으로, 정기적으로