본문 바로가기
[ git ]

git 사용방법 정리 :: vsCode 에서 github에 프로젝트 올리고 불러오기

by 히앤님 2022. 12. 21.
반응형
SMALL

참고한 사이트 : https://backlog.com/git-tutorial/kr/

 

 

[ 목차 ]
1. git이란?
2. git 설치
3.github에 로컬 프로젝트 올리기
4. github에 있는 프로젝트 내 로컬에 가져오기
5. 프로젝트 중간에 github에 있는걸 내 로컬에 가져오기

6. 사용하고 있는 git 관련 프로그램들 정리

 

 

 

1. git이란?

📌git

  • 오픈 소스 버전 관리 시스템(VCS: Version Control System)
  • 로컬에서 버전 관리되어 자체로 구축해야함
  • 소프트웨어 개발 및 소스 코드 관리에 사용

 문서 작업할 때면 이전 내용으로 다시 돌아가서 작업해야할 때가 있다. 이를 해결하기 위해 백업용 복사본을 만들기도 하지만 관리하기 번거롭다. Git이란 소스코드를 효과적으로 관리하기 위해 개발된 '분산형 버전 관리 시스템'이다. git을 이용해서 소스코드가 변경된 이력을 확인할 수 있고, 특정 시점에 저장된 버전과 비교하거나 해당 시점으로 되돌아갈 수도 있다.

git을 통해 로컬에서 프로젝트의 기록을 스스로 관리할 수 있으며, 브랜치(branch)를 생성하여 이전 브랜치(branch)로 복구, 삭제, 병합이 가능하다. git은 로컬 저장소를 사용하기 때문에 다른 개발자와 실시간으로 작업을 공유할 수는 없다. 혼자 작업하거나 폐쇄적인 범위 내에서의 협업이라면 Git만 사용해도 무방하다. 

이력을 관리하는 저장소

📌github

  • Git Repository를 위한 웹 기반 호스팅 서비스
  • 클라우드 서버를 사용(원격)해서 로컬에서 버전 관리한 소스코드를 업로드하여 공유 가능
  • 자체 구축이 아닌 빌려쓰는 클라우드 개념
  • 분산 버전 제어, 액세스 제어, 소스 코드 관리,  버그 추적, 기능 요청 및 작업 관리를 제공

github는 원격저장소로, 개인이 사용하는 용도라기 보다는 많은 사람들이 공유하는 저장소로 사용되는 경우가 많다. 로컬 파일을 깃허브 클라우드에 업로드(push) 하여 서로 다른 위치에 있는 여러 사용자가 함께 작업할 수 있다. 여러 사람들이 함께 협업하여 개발하는 경우, 프로젝트가 진행되는 메인 폴더를 기준으로 여러 개발자들이 각자의 폴더와 파일을 맡아 진행하는데 이 때에 각자의 작업 진행사항을 서로간에 공유하기 위해 github로 버전 관리를 진행한다. 

 

 

Git으로 로컬 저장소에 작업한 내용을 저장한 뒤
해당 내용을 Github에 업로드하는 형식으로 사용한다.
파일 -> 로컬저장소 -> 원격저장소

 

⛅원격 저장소와 🏠로컬 저장소

Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공한다.

  • 원격 저장소(Remote Repository): 파일이 원격 저장소 전용 서버에서 관리되며 여러 사람이 함께 공유하기 위한 저장소
  • 🏠 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소

평소에는 내 PC의 로컬 저장소에서 작업하다가 작업한 내용을 공개하고 싶을 때에 원격 저장소에 업로드 한다. 물론 원격 저장소에서 다른 사람이 작업한 파일을 로컬 저장소로 가져올 수도 있다.

평소에는 로컬에서, 공유할 때에는 원격에다가

 

🚩Commit(저장)

내 컴퓨터 어느 한 구석에서 열심히 코딩을 해서 만들었다. 이 파일과 폴더들의 수정 내용을 저장소에 기록한다. 이전 커밋 상태부터 현재까지의 변경 이력을 저장한 리비전을 만드는 것커밋(Commit)이라고 한다. 각 커밋은 영문/숫자로 이루어진 40자리의 고유의 이름이 붙는다. 하지만 40자리 이름으로 우리가 구분할 수 없을테니 반드시 커밋 메시지를 필수로 입력해야 한다.

 

📄work-flow : 동작 방법

git은 3가지 컴포넌트를 가지고 있다.

git의 컴포넌트 기능
work-tree📁
  • work-tree는 working diredtory라고도 불리며 현재 작업중인 디렉토리에 들어있는 수정가능하며 읽을 수 있는 모든 파일이 들어있는 컴포넌트라고 생각하시면 됩니다.
index🗑
  • index는 staging area라고 불리며 commit 되기전 준비단계가 보존되는 컴포넌트입니다. index는 work-tree에 있는 file중 변경되어져 commit 되어질 파일들이 모여있는 컴포넌트입니다.
  • work-tree에 있는 file중 한 파일을 변경 한다면 index 컴포넌트에서 수정되었다는 마크처리를 해둡니다.
repository📖
  • 레포지토리는 컨테이너라고도 불립니다. 해당 컴포넌트는 프로젝트 파일들의 변화를 축적합니다.
  • 모든 커밋의 history를 snapshot의 형태로 가지고 있습니다.
  • git log명령어를 통해서 commit history를 확인할 수 있습니다.

Git 에서는 우리가 흔히 말하는 폴더'작업 트리'(Work Tree)라고 부른다. 그리고 커밋을 실행하기 전의 저장소와 작업 트리 사이에 존재하는 공간'인덱스(Index)'라고 한다. 인덱스(Index) 공간에 파일 상태를 기록하는 것스테이징(stage)이라고도 한다. 스테이징 해놓고 커밋하기 원치 않은 것들은 반영을 안할수도 있다. 인덱스(index)에 있는 파일들은 commit을 통해 레포지토리(repository)로 넣을 수 있다. 각 단계는 reset을 통해 거꾸로 돌릴 수도 있다.

commit 시 index를 에 있는 파일이 저장소(repository)에 저장됨(반대는 reset)
eclipse 예제 ) git에 반영하기 위해 스테이징한다.

2. git 설치

📌git 다운로드 : https://git-scm.com/download/

 

사용하는 OS에 맞게 설치하면 된다.

 

▼ git 설치과정을 자세히 확인하고 싶다면?

 

[GITHUB 입문] Git 설치하기(2.35.1 이상, 상세한 설치법)

[GITHUB 입문] 깃허브 사용법 - 2 Git 설치하기 Git과 GitHub에 관해 다룬 이전 글([GITHUB 입문] Git과 GitHub의 차이)을 작성하다 보니 한 가지 아쉬움이 있었습니다. 독자가 Git을 설치하여 직접 따라 하면

taewow.tistory.com

깃의 기본편집기를 vs Code로 설정

vim이 낯설다면 vsCode로 설정해도 된다.

 

📢 Git 프로그램들

설치된 파일들

git과 관련된 프로그램들이 여러개가 설치되었다.

 

📌Git Bash

명령 프롬프트 창이 생성된다. linux 명령어들로 작동한다.

Git Bash

 

📌Git CMD

Git Bash와 동일하게 명령 프롬프트 창이 생성된다. 윈도우 명령어들로 작동한다.

Git CMD

 

📌Git GUI

명령어를 입력하는 것이 아닌 버튼식으로 git을 관리할 수 있다. 

Git GUI

 

🧷 Git 기본 명령어

결국은 원격저장소(remote repository) 중 하나인 github에서 작업을 많이 하기 때문에, 기본적인 flow만 확인하고 나머지는 상황에 따라 명령어를 사용해보자.

Push(내보내기 ↑ ) / Pull(가져오기 ↓ ) / fetch(가져오기만 ↓ ) / Clone(복제) / Merge(병합)

 

git 명령어
git init git 초기화를 의미한다.
비어있는 local 폴더에 들어가 git init을 실행하면 해당 폴더에 .git 파일만든다. 이렇게 하면 git repository와 연동시킬 준비를 하는 것이다.
git status git의 상태를 확인한다.(중요)
git add 생성한 파일을 스테이징(staging)한다.
Git이 추적하고 있는 수정된 파일이 work Tree에서 index(=staging area)에 저장된다.
git commit staging area에 저장됐던 파일이 local repository로 저장된다.
git push local repository의 내용을 remote repository로 업로드 한다.
git pull local repository의 내용을 remote repository에서 가져온다.
git clone .git을 포함한 remote repository의 파일들을 local repository에 복사한다.
(github에서 zip 파일로 받으면 .git 폴더가 없다는 것이 명령어와의 차이점)
git config git의 기본 설정값들 확인(user name 및 email 도 이쪽에서 확인 가능)
git log 커밋 이력 확인

 

원격저장소 저장 기본 로직

브랜치(branch)라는게 있어서 따로 가지치기 해서 별도로 진행할 수도 있다. 고건 따로 필요하면 포스팅 하겠음.

 

 

3. github에 로컬 프로젝트 올리기

1) Git을 설치한다.(위 참조)

2) github에 새 저장소를 생성한다.

프로젝트 생성
default branch 이름이 main이다.

2020년에 기본 branch 이름이 master에서 main으로 변경되었다.

따라서 소스코드를 구글링하여 검색할 때 아무생각 없이 master쪽으로 push하면 안될수도 있음!

 

3) 프로젝트 주소를 복사한다.

주소 복사

주소 보면 colne이라고 쓰여있다. .git을 포함한 원격repository의 파일들을 로컬 repository에 복사하기 위한 주소이다.

 

두가지 종류가 있다. HTTPS와 SSH는 어떤 차이가 있을까?

 

📌HTTPS : 요걸 쓰면 push와 pull 시 사용자 이름과 비번을 물어보면서 인증한다. 로그인 개념.

📌SSH : 요걸 쓰면 push와 pull 시 각 원격저장소에 등록한 SSH key를 가지고 사용자를 인증한다.(참고 링크)

 

기본적으로 원격 repo를 사용할 경우, HTTPS를 쓴다. 매번 사용자에게 아이디 비번을 물어보는 것.

(다행히 인증정보 저장해두고 자동 입력해주는 시스템도 제공해준다)

remote: Support for password authentication was removed on August 13, 2021. 
Please use a personal access token instead.'

2022년 현재는 비밀번호만으로 인증할 수 없고 개인 엑세스 토큰을 생성해야 한다.

 

 

++ 가장 쉬운 프로젝트 올리는 방법!! ➡ Upload files 하는 것.

But, 프로젝트를 github에 올릴 때, 파일이 100개가 넘으면 Upload files로는  안된다.

100개 넘으면 못올림

따라서 그냥 프로젝트를 터미널로 올려주자.

 

4) 터미널을 열어준다.

터미널 열기

5) Initial Repository

로컬 Repository를 초기화한다. 해당 폴더에 있는 파일들을 git 명령어를 통해 관리하겠다는 뜻.

git init과 같다.

 

💢삽질했음....

더보기

왜 잔디도 안심어지고 master라는 곳에 따로 됐나 해서 싹 지우고 다시 해보기로 했다.

git init 했는데 이미 있길래 싹 지우고 다시 해줬다.

init 해도 안되길래 뭔가 했는데, 내가 branch 이름을 master로 뒀더라...

브랜치 이름이 master이다.

난 main으로 생성했으니까 브랜치를 변경해주자. 그래야  main -> main으로 보내줄 것이다.

main으로 변경해줬다

checkout으로 main으로 이동하려 했더니 안되서,

git branch -m master main 를 써서 브랜치 master를 main으로 바꿔줬다.

휴~~ 이제 다시 push 해보자.

아마 어제 토큰이랑 이메일 등은 잘 설정했던 것 같은데....


 

잘되면 소스보기에서 누르거나 git init 하면 됨.

 

6) 어디에 저장할지? 원격저장소 지정

어디에 저장할지 원격저장소(repo) 위치를 설정해주어야 한다.

git remote add origin [ 복사한 저장소 주소 ]

주소로 잘 remote 되었고

아까 HTTPS는 iD랑 비번 필요하다고 했지?

연결한 원격저장소에 맞는 id와 토큰 비밀번호가 필요하다.

if ) 만약 잔디 안심어지면 이메일이 달라서 그렇다.

git config --global user.name "홍길동"
git config --global user.email "support@webisfree.com"

 

7) 원격저장소 내용 땡겨오기

원격저장소에 있는걸 먼저 로컬에 반영해야한다. 원격저장소에 존재하는 항목이 있을 수 있으니까!

git pull origin main --allow-unrelated-histories

main이 브랜치명인거 필수로 체크! 히스토리를 땡겨오자.

readme.md 내용이 당겨져왔다

레포 설정할 때 readme.md에 내용을 설정했더니 그게 병합되서 땡겨졌다. 병합도 하고 다 반영해보자.

 

8) 드디어 원격저장소에 push 하기

이제 로컬에 있는 병합내용 + 변경된 수정사항들을 원격저장소(remote repository) 에 반영해보자.

 

☝ staging 영역에 추가

git add . //현재 디렉토리에 있는 업데이트 된 파일을 전부 스테이징 영역으로 추가합니다.

 git add -A //수정된 파일 전부를 스테이징 영역에 추가합니다.
 
 git status //현재 add 내역을 확인할 수 있습니다.

추가해줬고

✌Repository에 commit

 

메시지 포함해서 저장해주자.

git commit -m "커밋메시지"

커밋

 

🤟Remote Repository에 push

 

아까 remote로 연결해준 원격 저장소에 push 해주자.

git push origin main

로컬 main에서 원격 main에 잘 저장되었다.

 

🖐 반영 확인

잘 저장되서 메시지도 잘 나온다.
잔디도 잘 심어졌음

 

+ 9) git bash로 해보기

Git Bash로도 올려보자.

프로젝트 우클릭

github에 레포지토리를 생성하고 git bash에서 아래를 순서대로 진행한다.(요약 정리)

#초기설정
git config --global user.name "유저이름"
git config --global user.email "유저 이메일"

#파일 준비
git init           #.git 파일 생성
git add .          #선택한 프로젝트 폴더 내의 모든 파일 관리
git status         #상태확인
git commit -m "주석"      #커밋

#업로드
git remote add origin 깃허브 저장소 주소
git push -u origin main

참고로 git bash는 Ctrl + V가 안된다. 복사 후 Shift + Insert  버튼으로 붙여넣자.

 

4. github에 있는 프로젝트 내 로컬에 가져오기

다른 사람이 업데이트 한 내용 내려받기

1) pull

또한 다른 사람이 원격 저장소(Remote repository)에 업데이트한 파일이 있을 때, 원격저장소와 내 로컬저장소의 상태를 동일하게 만들기 위해 pull을 이용한다.

git pull
  • remote repository에 저장된 파일을 가져와 local repository의 내용을 갱신한다.
  • 병합( merge ) 과정이 발생한다.
  • 해당 remote repository에 권한이 있어야 pull 명령어를 실행할 수 있다.

 

2) clone

.git 폴더까지 포함해서 소스를 받는다.

 

3) zip 파일

.git 폴더가 없는 채로 소스만 다운받기 때문에 로컬에서 git을 설정하려면 새롭게 해야한다.

 

5. 프로젝트 중간에 github에 있는걸 내 로컬에 가져오기

저장소를 통째로 가져온다.

 clone 명령어는 처음 프로젝트에 투입되거나, 책에서 제공하는 예제 소스를 가져올 때, 중간에 git이 꼬였을 때 사용할 수 있다.

git clone 원격 저장소 URL

#특정 브랜치를 clone 하고 싶다면
git clone -b { 브랜치명 } { 원격 저장소 URL }

 

 

6. 사용하고 있는 git 관련 프로그램들 정리

1) fork

보통 개발 시 기본 default branch(master) 에서 작업 후 이를 바로 반영하는게 아니라 dev(개발)에 반영해 테스트 한 뒤 이를 aws(운영)에 반영한다.

 

master -> dev -> aws

 

Git ForkGit을 더 편하게 쓰기 위한 GUI 프로그램이다. Source Tree라는 앱이 비슷한 GUI 프로그램이다.

선으로 branch를 볼 수 있는 GUI 프로그램

 

위 사진처럼  Fork 프로그램을 통해 각각의 branch들의 변경 내용들을 커밋할 때마다 선으로 직관적으로 확인이 가능하다.

만약 노란색이 master branch라면 dev 반영을 하면 연두색과 같이 따로 반영되는 것을 꺾은선으로 표시하는 것이다.

 

더블클릭하면 V 표시가 생기면서 해당 브랜치에 접근하게 되고, 각각의 브랜치의 pull과 push는 상단의 버튼을 통해( 위아래 화살표가 직관적이다 ), 머지는 우클릭 항목에서 선택하여 가능하다.

 

스테이지 버튼

스테이징 내용도 github에서 잔디 클릭하면 보이듯이 삭제된 정보는 빨간 영역, 추가된 내용은 초록색 영역 등으로 보인다.

git add 작업을 안해도 stage 버튼으로 스테이징이 가능하다.

 

반영된 내용을 Tree 형태로 직관적인 표시로 볼 수 있다는 것이 장점이다.

 

 

2) gitlab

gitlab은 개인 또는 조직이 Git repository의 내부 관리를 할 수 있는 기능을 제공하는 비공개된 github이다.

중앙 서버에서 git 저장소를 관리할 수 있다. 무료로 공개/바공개 여부를 설정할 수 있어 좋다.

둘 다 Git Repositorty 를 이용하여 형상관리를 하기 때문에 기능은 큰 차이가 없다.

 

보통 github, gitlab 등의 소스관리 프로그램들을 회사에서 이용할 때에는 라이선스에 따라 비용이 발생한다.

비용은 기능마다 달라 어느것이 낫다 판단할 수 없으나, 우리나라 회사는 대부분 설치형(Self-Managed)를 선호한다.

github는 기본적으로 SaaS(Software as a Service) 형태로, 클라우딩 시스템을 설치 없이 원격으로 사용하는 구조이기 때문에 대부분 구독형으로 매달 요금을 내는 식이며, 설치 버전은 비용이 더 든다. 반면 gitlab은 모든 버전에서 SaaS형과 설치형을 선택적으로 사용할 수 있으니 설치형을 선호한다면 gitlab을 선택하게 된다.

 

또한 gitlab은 관리부터 이슈 트래킹하고 모니터링하는 등의 여러 기능을 gitlab 이라는 하나의 툴을 통해 할 수 있다. 이는 각각의 정보를 한곳에서 관리해 재사용성이 높아 업무 효율이 높다. (나의 경우 이슈 트래킹 목적으로 사용하며, 필요한 정보가 있을 경우 한 사이트에서 각각의 repo 를 왔다갔다 하며 정보를 확인할 때 용이하다.)

반응형
LIST

댓글