배운것들을 정리합니다.
三昧境

Flutter/tip

[플러터 Flutter] GitHub로 버전관리하기, 사용법

ujo_orr 2024. 9. 12. 23:45

 

들어가기 앞서 버전관리 시스템에 대해서 먼저 알아보면


VCS (Version Control System)

 

Git은 버전 관리 시스템중 하나인데 깃의 중요성은

이 사진에서도 표현이 된다.

사실 저렇게 되면 그래도 이름이 길어지며 가장 마지막 파일이 최종버전인걸 눈치챌 순 있겠지만.

파일을 아무렇게나 저장했다면 굉장히 어려워질 것이다.

버전 관리 시스템은 크게 3가지가 있는데

 


 

1. 로컬 버전 관리

서버 없이 로컬 컴퓨터 내에서 DB를 통해 버전을 관리하는 방식.

하드웨어에 그냥 기록하는 방식이다. DB만으로도 구현이 가능하고 단순하기 때문에 개인적인 프로젝트에 적합한 방식이다.
허나 이렇듯 로컬에서 버전을 관리하면 협업이 어렵고, 하드웨어의 고장으로 인한 백업불가라는 치명적인 단점이 있다.


2. 중앙집중식 버전 관리

중앙서버를 활용하는 버전 관리 방식.

서버에 최종 버전이 하나 존재하며 사용자들은 이 중 수정을 원하는 파일만 로컬에 받아와 수정한 후 다시 서버에 올리는 방식이다.
로컬 버전 관리 보다는 협업에 능하며 누가 어떤 일을 하는지 파악하기 쉽다는 장점이 있다.

단, 중앙서버가 다운되면 전체 사용자가 작업할 수 없는 상황에 처하게 되고 협업 규모가 커지면 수정 충돌 등의 문제가 발생할 수 있다.


3. 분산 버전 관리

서버를 활용하여 프로젝트 전체를 로컬에 다운로드해 수정하는 방식.

중앙 서버가 다운되더라도 개별 사용자들은 작업이 가능하며 서버가 날아가도 로컬에 다운로드한 프로젝트가 남아 있기 때문에 가장 안정적인 방식 중 하나이다.
수정시에도 현재 코드는 나 혼자 수정하고 있기 때문에 충돌의 염려가 없다.


git

깃은 버전 관리 시스템중 하나로 그 중에서도

분산 버전 관리 시스템(Distributed Version Control System)에 속한다.

이는 여러명의 개발자가 하나의 프로젝트에 참여할 때, 또는 소스코드를 관리하는 시스템이다.

cmd + z 의 실행취소 기능이 있다한들 한달 전, 일년 전 으로 돌아가야할때는 거의 코드를 리빌드 해야하는 수준이기 때문에 버전관리는 중요한 요소 중 하나이다.


gitHub

위에서 말한 git들을 모아놓은 장소라고 생각하면 된다.

 

간단하게 설명하면

git = 커피
gitHub = 카페

라고 생각하면 된다.

 


사용방법

 

1. Git 설치

https://git-scm.com/downloads

 

Git - Downloads

Downloads macOS Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific exp

git-scm.com

 

2. 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

 


 

3. 프로젝트 내 Git 로그인

AndroidStudio / Mac 기준

상단 바 Android Studio => Settings... => Version Control => GitHub => '+' 버튼

을 차례대로 눌러 프로젝트내에 로그인을 한다.

여기서

'Log in via GitHub...'는 회원가입을 진행하였던 이메일 아이디로 로그인을 하는것으로 개인적인 프로젝트에서 버전관리용으로 써도 상관없지만 아래

'Log in via Token...'은 사용자 패스워드를 직접 공유하지 않아도 권한을 부여할 수 있으므로 보안성이 향상되고, 
또한 토큰은 특정 권한(scope)과 연결되어 있어, 필요한 작업만을 수행할 수 있도록 제한할 수 있기때문에 협업시에 많이 사용될 것입니다.

토큰 발급 방법은

[플러터 Flutter] GitHub Access Token 발급방법 / 깃허브 토큰 발급방법

 

[플러터 Flutter] GitHub Access Token 발급방법 / 깃허브 토큰 발급방법

1. GitHub 우측상단에서 프로필 클릭후 Settings 클릭 2. Developer Settings 클릭 3. Personal access tokens => Token (classic) 클릭 4. Generate new token (classic) 클릭 5. 토큰 명, 토큰 유효기간, 토큰 권한 설정후 생성

ujo-orr.tistory.com

 


 

4. Git 초기화

현재 작업중인 프로젝트 내 터미널에

git init

Git 초기화 명령어를 입력하여 git을 초기화 합니다.

 

git init을 하게 되면 파일들이 빨갛게 변경되는데 이는

git을 초기화하면서 아직 git에 올라가지 않은파일들이 빨갛게 표시된다.


 

5. GitHub 페이지에서 Repository를 만듭니다.

repository가 완성된 모습

 


 

6. 프로젝트와 GitHub repository 연결

 

프로젝트 터미널에 해당 구문을 넣고

git remote add origin //https:github.com/사용자명/리포지토리명.git

 

주석란에는

아까 생성해두었던 repository에 보면 https링크가 있으므로 붙여 넣어 작성합니다.

 


 

7. git 스테이징할 파일 확인

깃 스테이징이란 깃허브는

 

이렇듯 여러번 나눠서 사용하게 됩니다.

그럼으로 현재 작업하고 있는 공간에서 git add를 통해 스테이징을 해 주어야 합니다.

 

git status

이 명령어를 프로젝트내 터미널에 입력하면

이러한 형태로 아직 커밋할 파일이 안되있는것들 확인할 수 있는데 이것은

파일 목록에서도 확인할 수 있습니다.

 


 

8. 버전관리를 할 파일들 커밋 준비 설정

git add //[파일명]

예를 들어 git add pubspec.yaml 이라고 명령한다면

status를 찍어 보았을때 딱 pubspec.yaml 파일만 커밋 준비가 된걸 확인 할 수 있다.

위에 추적하지 않는 파일들을 전부 커밋 준비를 할려면

git add .

git add . 을 사용하여 전부 커밋준비를 하면 됩니다.

참고로 git add . 는 .gitignore에서 명시된 파일을 제외하고 올리기 때문에 초기에 대부분 git add .을 사용합니다.

 


 

9. 스테이징된 파일 커밋하기

git commit

또는

git commit -m //"코멘트"

이렇듯 코멘트는 그 커밋에 대한 간단한 설명 또는 기능을 변경한 코멘트를 남겨 줌으로써 좀 더 가독성 좋은 커밋이 됩니다.

 


 

10. 커밋한 파일 GitHub로 푸쉬하기

git push origin main

 

또는

git push -u origin main

 

 

두 명령어 모두 로컬 저장소의 변경 사항을 원격 저장소(origin)의 main 브랜치로 푸시하는 역할을 합니다.

하지만 -u 옵션의 유무에 따라 그 의미가 약간 다릅니다.

git push origin main

  • -u 옵션 없음
    • 로컬 브랜치와 원격 브랜치 간의 추적 관계를 설정하지 않습니다.
  • 특정 상황에서 사용
    • 이미 추적 관계가 설정되어 있는 경우
    • 다른 원격 브랜치로 푸시하고 싶을 때
    • 한 번만 푸시하고 추적 관계를 설정하고 싶지 않을 때
  • 장점
    • 유연성: 필요에 따라 다양한 원격 브랜치로 푸시할 수 있습니다.

git push -u origin main

  • -u (또는 --set-upstream) 옵션
    • 로컬 브랜치와 원격 브랜치 사이의 추적 관계를 설정합니다. 즉, 이 명령어를 한 번 실행하면 이후에 git push만 입력해도 자동으로 설정된 원격 브랜치로 푸시됩니다.
  • 첫 푸시 시 주로 사용
    • 일반적으로 처음 원격 저장소에 로컬 브랜치를 연결할 때 사용합니다. 이후에는 -u 옵션 없이 간단하게 git push만으로 푸시할 수 있습니다.
  • 장점
    • 편리성: 매번 원격 브랜치 이름을 입력하지 않아도 됩니다.
    • 명확성: 로컬 브랜치와 연결된 원격 브랜치를 명확하게 설정하여 혼동을 방지합니다.

의 차이가 있습니다. 그러므로 git push -u origin main 이 명령어를 사용하여

현재 mac의 비밀번호를 입력하게 되면

이러한 형태로 푸쉬를 하게 되고

git의 repository는 아까와는 다르게 업로드한 파일들이 나열돼 있는걸 확인할 수 있습니다.

 


 

그 외 명령어들

 

git status

현재 깃의 상태를 확인합니다.
현재 브랜치와 폴더, 커밋사항을 표시합니다.

 

git log

말 그대로 깃의 로그를 확인합니다.
언제 커밋을 하였는지 확인할 수 있습니다.

 

git config --global user.name [사용할 이름]
git config --global user.email [사용할 이메일]

커밋할 당시 사용할 이름과 이메일입니다.
이 이름과 이메일은 로그를 확인할 시 누가 커밋하였는지 확인할 수 있습니다.

 

git clone <repository-url>

원격 저장소를 로컬로 복제합니다.

 

git pull

원격 저장소에서 최신 변경 사항을 가져와 병합합니다.


  • 브랜치 관련
git branch

브랜치 목록을 확인합니다.

 

git branch [브랜치 이름]

브랜치를 생성합니다.

 

git checkout <브랜치명>

브랜치를 이동합니다.

 

git checkout -b [브랜치 이름]

브랜치를 생성 및 이동합니다.

 

git merge [브랜치 이름]

다른 브랜치를 현재 브랜치에 병합합니다.


  • 변경사항 되돌리기

스테이징된 파일 취소

git reset [파일 이름]

 

마지막 커밋 되돌리기 (변경 사항은 남겨둠)

git reset --soft HEAD^

 

마지막 커밋 되돌리기 (변경 사항은 삭제)

git reset --hard HEAD^

 


  • 삭제
git rm <파일명>

파일 삭제

git push origin --delete [브랜치 이름]

원격 브랜치 삭제


  • 태그
git tag [태그 이름]

태그 생성

git tag

태그 목록 확인

git push origin [태그 이름]

원격 저장소로 태그 푸시


  • 비교
git diff

수정된 내용이나 두 커밋 간의 차이를 확인합니다.


  • 변경사항
git stash

변경사항 임시 저장

git stash list

저장된 변경사항 목록 확인

git stash apply

저장된 변경사항 적용