본문 바로가기
  • 우당탕탕속의 잔잔함
Technology/Products, Tools

[GitHub] GitHub를 통한 코드 관리 - 기초 (feat. Git Bash)

by zpstls 2023. 4. 13.
반응형

이번 포스트는 GitHub의 전반적인 사용과정에 대해 다뤄볼 예정입니다.

Project를 어떻게 GitHub를 통해 관리하는지에 대해 예제를 보면서 수행해 볼 것입니다.

 

LOGO

 

Join

우선, GitHub 계정이 있어야 할 것입니다. 따라서 Github Official Page에서 회원가입을 진행합니다.

해당 부분은 생략하도록 하겠습니다.

 

GitHub: Let’s build from here

GitHub is where over 100 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs and fea...

github.com

 

 

Create Repository

다음으로는 Repository를 생성합니다.

Login을 진행한 후 "New repository"를 클릭하면 하단과 같은 Page가 나옵니다.

Repository의 이름과 간략한 소개글 그리고 Public으로 할지 Private로 할지, README 파일을 생성할지 안 할지 선택해 줍니다. 예제에서는 HairFollicle_DetectionProgram이라는 Repository를  Public으로 생성하고 README는 생성하지 않는 것으로 합니다.

 

 

GitHub 연동 with Bash

Repository를 생성했으면, 작성한 코드들을 Github와 연동시켜야 합니다. 여기서 연동은 코드를 github에 올리는 것을 의미합니다. 연동 방법은 여러 가지가 있습니다. Bash를 이용하는 방법, GUI Tool을 이용하는 방법, GitHub Desktop을 이용하는 방법, 그리고 Visual Studio 등과 같은 개발 소프트웨어에서 바로 연동해서 사용하는 방법 등을 생각해 볼 수 있을 것입니다.

이 많은 방식들 중에서 가장 기본적인 방법인 Bash를 이용해 GitHub를 사용하는 과정을 수행해 보도록 하겠습니다.

 

(Git Bash가 없다면 설치가 필요합니다.)

 

우선, 작성한 코드가 포함된 프로젝트 Directory에서 Git Bash를 Open 합니다. 

Bash에 다음과 같은 명령어를 입력하면 Local 저장소가 초기화됩니다. 

>> git init

처음으로 작성한 코드를 업로드하고자 할 때 수행하는 첫 번째 단계라고 생각하면 될 것 같습니다. 위 명령어를 수행하면. git 폴더가 생성됩니다.

 

만일, 본인이 작성한 코드가 아닌 경우, 즉 어떤 개발자나 팀의 오픈소스를 개발하거나 이미 만들어져 있는 프로젝트에 참여하는 경우는 다음과 같이 Remote 저장소를 Local에 복제하여 사용하도록 합니다.

>> git clone [Repository URL] [DIR]

# Example - HTTPS
>> git clone https://github.com/YouMinJung/HairFollicle_DetectionProgram.git

# Example - SSH
>> git clone git@github.com:YouMinJung/HairFollicle_DetectionProgram.git

위와 같은 명령어를 입력하면 오픈 소스들이 본인 PC에 Load 됩니다. 이 경우 Master Branch를 자동으로 가져오며, Origin으로 Remote도 Add 해줍니다.

 

Local Repository를 구성했다면 이제 여기에 작성한 코드 또는 수정된 코드들이 반영되어야 합니다.

다음과 같은 명령어를 통해 File 또는 Directory들을 Add 합니다.

>> git add [File/Folder Name]

# Example - Directory내의 모든 파일 추가
>> git add .

# Example - a.txt 파일 추가
>> git add a.txt

 

예제로 Hair Follicle Code들을 모두 Add 하는 명령어를 입력하면 결과는 다음과 같습니다.

 

Add 한 후에 잘 수행되었는지 확인을 위해 Git Repository의 상태를 확인하는 명령어를 통해 확인을 해봅니다.

>> git status

 

결과는 다음과 같습니다.

모든 파일 및 폴더가 추가되었음을 확인할 수 있습니다.

위 과정은 단순히 임시적으로만 저장된 내용입니다. 이를 적용하기 위해서는 Commit 과정을 수행해야 합니다. 다음과 같은 명령어를 통해 Commit을 수행할 수 있습니다.

>> git commit -m "Message"

 

Message에 "First Commit"이라고 적고 Commit을 수행한 결과는 다음과 같습니다.

이로써 Local Repository에 내용이 반영되었습니다. 그러나 말 그대로 Local 저장소에만 적용이 된 것입니다. Local 저장소에만 적용된다면 GitHub를 사용할 의미가 좀 없겠죠...?ㅎㅎ

 

다음과 같은 명령어를 통해 Local Repository 내용을 Remote Repository에 반영시킬 수 있습니다.

아래 명령어는 GIT Address를 가지는 Remote Repository를 origin이라는 이름으로 Local Repository와 연결한 후, master branch에 해당하는 Local Repository 내용을 origin(= Remote Repository)에 Push 하는 것을 의미합니다.

>> git remote add origin [GIT Address]
>> git push -u origin master

위 명령어를 수행하면 fatal: Authentication failed라는 Error를 반환할 수도 있습니다. 이는 ID/Password 방식이 아닌 Token 방식으로 로그인을 하기 때문에 발생한 문제입니다. 이를 해결하기 위해 다음과 같은 과정을 수행합니다.

Note에는 사용처에 대한 간단한 메모를 입력하고 Expiration에는 만기일을 지정합니다. 그리고 Select Scope에는 어떠한 범위까지 허용할 것인지를 선택해 줍니다. 예제에서는 Repository 범위에서만 활용할 수 있도록 합니다.

생성한 Token을 Password에 입력해 주면 됩니다.

GitHub Login → User Name 입력 → Password(= Personal Access Token) 순으로 입력합니다.

 

결과적으로 다음과 같이 Push가 성공한 것을 확인할 수 있습니다.

GitHub Page에서 보면 다음과 같이 정상적으로 Project Code가 업로드된 것을 확인할 수 있습니다.

 

여기까지가 정말 기초적인 사용방법이라고 생각하시면 됩니다. 코드 작성하고 수정한 것 반영하고, 다시 수정하고 반영하고... ㅎㅎ

그러나 이런 흐름대로만 개발이 진행되진 않을 것입니다. 다음 단락에서는 Branch라는 것을 활용하는 방법에 대해 작성해 보겠습니다.

 

 

 

 

 

Branch 사용방법

프로젝트를 진행하다 보면 개발 방향이 여러 갈래로 나눠지는 경우가 있습니다. 이럴 때 Branch를 나누게 됩니다.

다음과 같은 명령어를 통해 Branch를 생성하고 해당 Branch로 옮길 수 있습니다.

>> git branch -M second_master

다음과 같이 branch가 master에서 second_master로 이동된 것을 확인할 수 있습니다.

master -> second_master

참고로 생성된 branch들을 이동할 때는 다음과 같은 명령어를 사용합니다.

>> git checkout [Branch Name]

second_master -> master

 

다시 본론으로 돌아와서, second_master 환경에서 작업을 수행하고 Commit 및 Push를 수행하면 다른 branch에서 작업을 수행하고 적용할 수 있습니다.

 

간단하게 second_master branch에서 README.md 파일을 적용하는 과정을 수행해 보도록 하겠습니다.

(실제로 프로젝트를 수행하면서 이런 식으로 Branch를 만들진 않겠지만 말이죠...ㅎㅎ)

>> echo "This is the hair follicle detection program." >> README.md
>> git add README.md
>> git commit -m "add readme file"
>> git push -u origin second_master

다음과 같은 결과를 얻을 수 있습니다.

branch가 2개가 되었으며, master branch에는 README.md가 없지만, second_master branch에는 README.md가 포함되어 있습니다.

 

이제 이 두 branch를 1개로 합쳐보겠습니다. 다음과 같은 명령어를 통해 병합하고 Remote Repository에 적용할 수 있습니다.

>> git merge [Branch Name]
>> git push -u origin master

 

수행하면 다음과 같습니다.

master branch에서 master와 second_master를 Merge 했습니다. 그리고 원격 저장소에 Push를 했습니다.

위와 같이 master branch에 README.md가 적용된 것을 확인할 수 있습니다.

 

이제 master와 second_master가 같아졌습니다. 즉, second_master는 더 이상 필요 없습니다. 따라서 삭제해 줘도 무방할 것입니다.

Branch를 삭제하기 위한 명령어는 다음과 같습니다.

>> git branch -d [branch name]
>> git branch

결과는 다음과 같습니다.

이제 master Branch만 남았습니다.

 

참고로 Branch와 관련된 명령어가 3개가 있습니다. 한 개는 Pull이고 나머지는 Fetch와 Merge입니다.

우선 Pull은 원격 저장소의 데이터를 가져와 로컬 저장소와 병합할 때 사용합니다. 명령어는 다음과 같습니다.

>> git pull [Remote Name] [Branch Name]

위 명령어를 수행하게 되면 Remote Repository의 Brach를 읽어와서 해당 소스가 현재 Local 소스보다 더 최신 버전일 경우 현재 버전을 Remote 소스에 맞춰 업로드합니다.

 

Fetch는 원격 저장소의 데이터를 로컬 저장소로 가져오기만 하는 명령어입니다. 단순히 원격 저장소의 내용을 확인만 하고자 할 때 사용합니다. 명령어는 다음과 같습니다.

>> git fetch [Remote Name]

앞서 수행했던 과정을 예로 설명하자면 origin이라는 Remote Repository를 Local Repository로 Fetch 하게 되면 과거에 수행했던 Remote Repository의 Commit 내용을 읽을 수 있게 됩니다. 다만, 읽기만 했을 뿐 다른 작업은 수행되지 않습니다.

이 상태에서 Merge를 수행하게 되면 현재 Local Repository의 내용과 병합되게 됩니다. 즉 Pull과 동일한 효과를 보게 되는 거죠.

 

이러한 방식으로 프로젝트의 흐름을 컨트롤할 수 있습니다.

여러 가지 명령어가 있고 더 많은 기능이 있지만, 기본적으로는 요정도만 주로 사용하게 될 것입니다.

 

 

이제까지 GitHub를 다루는 기초적인 방법에 대해 간단한 예제를 통해 수행해 보았습니다. 복잡한 것 같으면서도 결론적으로는 주로 사용하는 것들만 사용하게 되는 GitHub입니다. 물론, 세부적으로 들어간다면 다룰 내용은 많긴 합니다.

지금까지 다루었던 것들만으로도 큰 문제없이 사용할 수 있지만, 사용하다가 더 필요한 내용이 있다면 그때그때 찾아서 사용하면 되겠죠...?

 

이번 포스트는 여기서 마무리하도록 하겠습니다.

향후 다른 방식으로도 GitHub를 이용하는 방법에 대해서도 다뤄보도록 하겠습니다.

반응형

댓글