AIFFEL - GitHub

JoBoB·2023년 11월 10일
0

AIFFEL - Python

목록 보기
2/10
post-thumbnail

AIFFEL에서 배운 github를 요약해보자


Git 학습하기

버전 관리 : 한 시점의 진행과정을 저장 ( 되돌리기 가능 )

git --version

git : 소스코드의 버전을 기록하고 관리
github : 그 기록을 다른 사람들과 공유할 수 있는 웹사이트

local repository : 개인 컴퓨터의 폴더
remote repository : 다른 사람들과 원격으로 작업할 수 있는 github repositroy


1. git과 github 연결하기

1-1. local 변경사항을 remote repo에 보내기 위해서는 git이 내 github 정보를 알아야함

git config --global user.email [email 주소]
git config --global user.name [user name]
  • git config : config 파일에 기록한 내용들을 수정 및 반환
git config -l    #  config에 기록한 모든 정보 확인

--global에 관한 내용은 뒤에서 설명


1-2. git을 내 local repo에 생성

git init
. git 이라는 숨겨진 폴더가 생성되어 지정된 local repo의 변화 감지

2. 파일 생성 / 내용 읽기

local repo에 파일을 생성

# README.md 파일을 생성하고 그 안에 '# first-repository' 기입
echo "#first-repository" >> README.md

>> [파일 이름] : 출력 문구를 파일에 append

  • README.md : repo 내에서 오픈소스들을 설명해주는 설명서
  • .md : MarkDown, 문서작업용 언어

cat README.md
  • cat : 파일에 들어있는 내용 출력

cat을 통해 README.md 에 작성된 내용 출력


3. git에서 변화 확인

local repo에 변화가 생겼으니 git이 감지했는지 확인

  • git status : local repo의 변화 확인

Untracked file : 추적되지 않은 파일들
변경 사항이 있지만, git에 등록을 시키지 않아 추적 불가

?

local repo에도 변화가 있는데 git이 추적하지 못한다는 것은 무슨 뜻일까?


Git 구조

work directory : 내가 작업하고 있는 폴더
staging area (Index) : 커밋하기 전, 추가 및 변경된 파일들을 저장하는 중간 저장소
head (local) repo :   . git을 가지고 있는 폴더

+) working directory는 local의 일부

A

local repo에도 변화가 있는데 git이 추적하지 못한다는 것은 무슨 뜻일까?
-> local repo에는 보이지만, git으로 버전 관리를 하고 있지 않은 상태 ( 중간 저장 X )


즉, 버전 관리를 위해 우리는 파일을 git에 등록시켜야 한다.

  • git add : 파일을 index에 stage 시켜 버전 등록
git add README.md    # README..md 파일을 staging

git status로 상태를 보면, 현재 git이 추적 중 임을 확인 가능

  • git rm --cached : Index에 있는 파일 중, unstage할 파일 선택
git rm --cached README.md

다시 Untracked 상태로 돌아간 것을 볼 수 있다.

파일도 Untracked 와 같이 몇 가지 상태가 있는데 정리헤보자


File Status LifeCycle

Untracked : working directory에는 있지만, git으로 버전 관리되지 않는 상태
Unmodified : 수정이 이뤄지고 있지 않는 상태
Modified : 파일이 추가된 상태에서 해당 파일이 수정
Staged : staged area에 올라간 상태

commit을 통해 head repo에 올라가게 되면, 다시 Unmodified 상태로 돌아감


4. Commit 해보기

이제, stage area에 올라간 README 를 head repo로 올려보자

  • git commit : local repo의 저장 내용을 변경 ( 버전 업데이트 )
git commit -m '[커밋 설명]'

-m : 이 다음 부분을 메세지로 취급

커밋하고 하나의 파일이 변경되었음 알려줌


  • git log : git history 출력
angel@JoBoB MINGW64 ~/JoBoB/Work/AIFFEL/practice1 (master)
$ git log
# commit 뒷부분은 commit의 고유번호
commit fe1dcc4fd1b8d0d8ad2c6a6e5c06e81fa5584779 (HEAD -> master)
# user.name <user.email> 로 구성
Author: JoBob1218 <angel981218@gmail.com>
Date:   Thu Nov 9 19:12:49 2023 +0900

    first-commit   # commit 내용

5. remote repo와 연결

실습을 위해 새로운 remote repo를 생성했다.

  • git remote add : local git에 내 remote repo 주소 추가
# [repo 별명]으로 remote repo 추가
git remote add [repo 별명] [repo 주소]
  • git remote : 현재 등록된 repo 별명 출력
  • git remote -v : 별명 + URL 주소 출력
  • git remote rm [repo 별명] : local과 remote 연결 해제

6. local에서 remote로 전송

  • git push [repo 별명] master
    현재 head repo에 올라간 내용을 연결된 remote의 master branch에 전송
git push origin master

+) 클라우드 환경 변경

알립니다! ) 현재 제가 velog에 있는 실습 환경들은 모두 제 개인 git bash를 활용한                것이니 여기 기제된 내용은 LMS 실습 관련된 세팅만 해당함을 알립니다.

현재 우리는 user 정보는 --global을 사용해서 저장
/aiffel 외부에 데이터는 cloud jupyter를 닫으면 모두 삭제


?

--global에 저장하면 어디에 저장되는걸까? 더 나아가 git의 범위는 무엇일까?

git 범위 설정

  • 지역 (local) : git 설정한 저장소 -> .git/config
  • 전역 (global) : 현재 사용자의 모든 저장소 -> user/.gitconfig
  • 시스템 (system) : 모든 사용자의 저장소 -> C:/programdata/Git/config

현재 내 컴퓨터에서는, git config --global 로 설정한 user 정보들이 여기에 들어있는 것이다.


마저 돌아와서, 현재 우리는 우리의 인증정보를 /aiffel 내부로 옮겨야 한다.

# config에 credential.helper 변수를 store로 ~aiffel/.git-credients에 저장
git config credential.helper 'store --file ~aiffel/.git-credients
# 정확히는, credential.helper = store --file ~/aiffel/.git-credients 로 들어간다.
  • credential.helper : 인증정보를 일시적(cache), 혹은 영구적(store)으로 기억하게                          설정 가능

이후 README를 변경하는 등 변화를 주어 git add, commit, push 과정을 통해 버전 업데이트를 해야 정상적으로 remote repo에 기록됨


+) 브랜치 추가 정리


7. git 복제 / 수정 후 push

우리 원하는 remote를 복제해서 가져와 보자

새로운 폴더를 생성하고 거기로 이동해서 복제하면,

  • git clone : local에 remote의 이름을 가진 폴더가 생성되어 그 안에 복제
git clone [복제할 remote 주소]

복제가 완료되어 새로운 local repo에 복제되어 들어왔다.

복습 차원에서, 새롭게 내용을 추가하고 다시 push 해보자

cd second-repository
echo '#second-commit' >> README.md
git add README.md
git commit -m 'clone 후 push'
git push origin master

8. local 저장소로 데이터를 받아오자

현재 상태는

second-repo는 지금 practice2가 commit한 V2가 최신이다.
우리는 practice1의 데이터 최신화를 위해 remote의 데이터를 받아와야 한다.

  • git pull : remote의 데이터를 local로 받아오기
# origin으로 등록된 second-repo의 master branch의 데이터를 받아온다.
git pull origin master

README를 출력해보면, 우리가 practice2에서 push한 내용들이 들어와 있다.


9. Fork

다른 사람의 remote repo를 수정하거나 추가 내용을 넣어야하는 경우, 해당 repo를 내 remote repo에 복제하는 기능

fork와 clone 차이
fork : 다른 사람의 remote repo를 내 remote repo로 복제
clone : remote repo를 내 local repo로 복제

순서

상대 repo forkclone수정 ~ pushpull request상대가 merge 허락

fork : 상대 remote repo를 내 remote repo로 복제
clone : 내 remote repo를 local repo로 복제
수정 : local에서 내용을 업데이트
push : 업데이트한 내용을 index → head repo → 내 remote repo까지 올림
pull request : 상대의 remote repo에 자신의 업데이트 내용을 pull 해줄 것을 요청
merge : 상대가 pr (pull request)를 보고 merge 여부 결정


추가공부 내용
그림으로 보는 git
git 정리 블로그

profile
딥러닝을 메인으로 나아가고자 하는 뉴비입니다

0개의 댓글