Hokma Developer School :: Course 1

[Git 기초 사용법] 3. GitHub 이용하기

테디아저씨 2024. 9. 27. 08:30

 

 

이 내용의 강좌들

1. git 이란 무엇인가?

2. 설치와 환경설정

3. git 기본명령어

4. branch 다루기

5. github 이용하기

6. 팀원들이 함께 공유하기

 

 

local  - 자신의 컴퓨터 또는 자신이 속한 네트워크
remote - 원격, 자신의 컴퓨터와 떨어져 있는 컴퓨터 또는 네트워크

 

우리는 지금까지 Local 에서 Git 을 이용해 왔습니다.

 

그런데 혹시

- 컴퓨터에 문제가 생겨서 하드디스크가 날아갔다면,

- 회사에서 Git 으로 소스관리를 하는데, 오늘 몸이 아파서 집에서 일을 해야 한다면,

- 여러 팀원이 함께 작업을 하고 있다면

 

이런 여러가지 이유로 로컬에 Git 만으로는 충분하지 않을 수 있습니다.

그래서 클라우드 서비스에 git 저장소를 추가로 만들어 놓고  로컬에서 소스관리를 하다가 원격저장소에도 저장을 하거나 

다른 팀원들과 소스를 병합하기도 한다.

 

그럼 클라우드 서비스 어떤게 있을까?

 

github ( 깃허브 )

git 이 로컬에서 버전관리시스템을 운영한다면 github 은 클라우드서버를 이용해 운영하는 것이다.

이와 같은 서비스를 하는 서비스가 몇가지 있다.

 

 

https://github.com

 

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

 

 

 

깃랩 ( https://about.gitlab.com/ )

 

The most-comprehensive AI-powered DevSecOps platform

From planning to production, bring teams together in one application. Ship secure code more efficiently to deliver value faster.

about.gitlab.com

 

 

빗버킷 ( https://bitbucket.org/) 

https://bitbucket.org

 

Bitbucket | Git solution for teams using Jira

Bitbucket Cloud is a Git-based code and CI/CD tool optimized for teams using Jira.

bitbucket.org

 

 

 

이중 깃허브가 대중적이며, 단점은 100메가 이상의 용량을 가진 파일은 업로드 할수 없기때문에 

기업들에서는 빗버킷과 같은 서비스를 선호한다.

 

개인에게는 github 이 다루기 편하고 대중적입니다.

 

GItHub 가입하기

config user.email 로 등록했던 이메일로 가입하면 편하다.

 

 

Repository 만들기

 

1) Repository New 버튼을 클릭

 

2) Repository Name 과 소개내용을 입력한다.

 

 

2) 공개여부, READEME 파일 생성여부, .gitignore 파일을 생성할지, 라이센스 정보등을 설정할 수 있다.

 

 

 

3) 생성 후 안내를 확인한다.

 

 

echo "# gitTest2" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/mygospel/gitTest2.git
git push -u origin main


or 


git branch -M main
git remote add origin https://github.com/mygospel/gitTest2.git
git push -u origin main

 

4) 붉은 박스 안의 명령을 작업 폴더에서 실행하여 첫번째 커밋을 한다.

 

* -u 옵션은 앞으로 해당 브랜치를 계속 사용하겠다는 의미로 이후에는 아래와 같이만 해도 충분하다.

git push origin

 

 

* git remote add origin https://github.com/{계정}/{RepositoryName} 은 해당저장소를 origin 이라는 별칭으로 원격 저장소로 등록

* origin 이외의 이름으로 여러개의 저장소를 등록할 수 있다.

 

 

 

 

Commit  된 작업물을 PUSH

$ git push origin main

 

* Push 는  commit 한 저장소를 업로드 하는 것이므로 Working Directory, Staging Area  에 있는 파일은 해당되지 않습니다. 

 

** 여기서 잠깐

OS 나 기타환경때문에 push 할때마다 계정을 다시 물어보는 경우가 있습니다.

이럴때 아래 처럼 해주시면 다시 물어보지 않습니다.

//git 의 계정 정보를 다시 묻지 않게 저장함
git config --global credential.helper store

//git 의 계정 정보를 세션에 담음 (cached)
git config --global credential.helper cache

//git 의 계정 정보를 시간설정하고 세션에 담기 (cached)
git config --global credential.helper 'cache --timeout=600'

 

 

원격 저장소를 내 로컬소스로 다운로드

$ git pull origin main

 

* pull 시도했는데 충돌이 발생하는 경우

 

// 1. 먼저 현재상태를 저장한다.

$ git add .
$ git commit -m "작업내용"

// 2. merge 해준다.
git merge --allow-unrelated-histories [remote 이름]/[브랜치]
git merge --allow-unrelated-histories origin/main
// 어떤 파일이 충돌했는지 알려준다.

// 3. 충돌된 파일을 열어,필요없는 부분은 삭제하고 저장한다.


// 4. 다시 git pull 을 실행해준다.


// 5. git add , git commit 으로 상태를 저장해준다.
$ git add .
$ git commit -m "충돌수정완료"

 

 

 공개된 GITHUB 계정으로 부터 소스 다운로드

저장소를 받아서 계속 개발을 이어가는경우 아래와 같은 방법으로 시작할 수 있습니다.

[확인한번 더 할것]이경우 새로 소스를 받더라도 Git Init 을 별도로 하지 않아도 된다.

$ git clone https://github.com/mygospel/{Repository Name}  

# 원격 저장소를 현재 위치아래 내려받습니다. ( 저장소의 이름이 폴더로 만들어 집니다 )
# 또는 

$ git clone https://github.com/mygospel/{Repository Name} . 
# 원격 저장소를 현재 디렉토리에 내려받습니다. ( 하위 폴더가 만들어 지지 않습니다. )

 

 

 

 

 

협업을 위하여 Collaboration 등록

 

1) GitHub > Setting > Collaborators 선택

 

 

 

 

2) "Add people" 을 클릭한다.

 

 

 

3) 초대할 이메일을 입력하여 검색된 사용자를 등록한다.

 

 

4) private 상태에도 collaborator 는 저장소를 확인가능하다.

 

 

 

본인이 생성한 저장소가 아니거나 나중에  원격저장소를 추가할때

1. 로컬에서 원격 저장소를 추가하기

$ git remote add origin https://github.com/mygospel/{Repository Name}

인증을 요구하는 경우도 있습니다.

github 의 userName 과 email 을 입력하여 인증을 완료해주세요.

 

 

2. 저장소가 잘 연결되었는지 확인해보겠습니다.

$ git remote

origin

$ git remote -v

origin  https://github.com/mygospel/xxxxx.git (fetch)
origin  https://github.com/mygospel/xxxxx.git (push)

 

원격 저장소는 1개 이상을 등록할 수도 있습니다.

다른 원격저장소를 추가로 등록할때는 origin 이 아닌 다른 이름으로 등록해야 하고요.

각각의 이름으로  push, pull 을 이용하면 됩니다.

 

Push

원격 저장소로 내 commit 상태를 업로드

$ git push -u origin main
// origin 저장소
// main 브렌치
// 처음에 푸쉬할때 -u 를 사용하면 이후에 해당 브랜치를 사용하겠다고 알려줌

$ git push origin  
// -u 를 쓴후에는 main 이라는 브랜치를 써주지 않아도 된다.

$ git push origin main
// 해당 브랜치에 push

 

Reset (  되돌리기 )

$ git reset 커밋해쉬코드

# 커밋해쉬코드란? 커밋시에 숫자나 영문자로 표시되는
# 커밋해쉬코드최소 6자리 이상만 입력하면 됩니다. 
# 변경되었던 모든 커밋과 변경사항을 unstaging 상태로 두고 되돌아간다. 

$ git reset --hard 커밋해쉬코드

# 변경되었던 모든 커밋과 변경사항이 제거 된 상태로 되돌린다. 
# 이상태로 새로운 커밋을 하면 이전 커밋이 사라진다 

$ git log

* vscode 의 gitGraph 가 실시간으로 반영이 안되는 듯함..

 

특정 파일만 Reset (  되돌리기 )

git reset 커밋해쉬코드 -- file

 

 

변동사항 확인하기

$ git diff resources/views/pillar/adjust.blade.php



diff --git a/resources/views/pillar/adjust.blade.php b/resources/views/pillar/adjust.blade.php
index 8e751d95..0e5bc4ed 100644
--- a/resources/views/pillar/adjust.blade.php
+++ b/resources/views/pillar/adjust.blade.php
@@ -60,7 +60,7 @@
                                                <div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">
                                                        <form id="frmAdjust">
                                                        <input type="hidden" name="report_id" value="{{$report_id}}">
-                                                       <input type="hidden" name="country" value="{{$country}}">
+                                                       <input type="hidden" name="country" value="{{$country["code"]}}">
                                                        <input type="hidden" name="result" value="{{ $adjustResult }}">
                                                        <div class="tab-content pt-2" id="pagesContent">
                                                          <div class="tab-pane fade show active" id="page1" role="tabpanel" aria-labelledby="page1-tab">
@@ -69,28 +69,36 @@