Github 사용해보기

김현우·2020년 7월 9일
0

git & github

목록 보기
3/3

<기초 세팅 과정>

  1. git 허브 회원가입

  2. https://git-scm.com/download/win => 프롬트창에서 github를 쓸 수 있게

  3. cmd 에서 테스트 => git / git --version

  4. git 환경설정
    git config --global user.name miretta96
    git config --global user.email miretta20@gmail.com

  5. c 드라이브에 폴더(git_save)를 만든 후 cmd에서 이동
    cd c:/git_save

  6. git clone (깃 허브에있는 저장소 http주소 입력) https://github.com/miretta96/git_Tutorial.git
    git_save 폴더로 들어가면 git_Tutorial 폴더가 생긴걸 볼 수 있음

  7. 컴퓨터는 local repository
    github는 remote repository가 된다

  8. git_save폴더에 간단한 document.txt를 만들고
    cmd로 이동해보자 cd git_Tutorial
    git add document.txt
    git commit -m "Add Text File [document.txt]
    아직 github에는 적용이 되지 않았다

  9. git push를 해줘야 github에 적용된다.


<깃허브 동작원리>

  • Working Directory : 작업할 파일이 있는 디렉토리
  • Staging Area : 커밋(commit)을 수행할 파일들이 올라가는 영역
  • Git Directory : Git 프로젝트의 메타 데이터와 데이터 정보가 저장되는 디렉토리
    Working Directory ->(git add) -> Staging Area ->(git commit) -> Local Repository ->(git push) -> Remote Repository
    Remote Repository ->(git fetch) -> Local Repository ->(git merge) -> Working Directory (협업 수정 후 동기화 과정)

git fetch + git merge => git pull

저장소(Repository) 실제 소스코드가 담겨있으며 커밋 내역등 모든 작업 이력이 담겨 있는 공간


<소스코드 수정 Git저장소에 반영>

(1) 해당 프로젝트 소속이 아닐 경우
PR(Pull Request)를 작성하여 오픈소스에 기여 가능

(2) 해당 프로젝트에 소속일 경우
권한이 있으므로 그냥 커밋(Commit)하고 푸시(Push)해서 저장소에 수정 내역을 반영

기존에 만들었던 repository에서 Code ->Clone with HTTPS에서 주소를 복사
c드라이브에 새로운 Tutorials라는 폴더를 만든후
cd c:/Tutorials 디렉토리를 이동시킨후
git clone (주소복사한 https://github.com/miretta96/git_Tutorial.git)
Tutorials 폴더에 가보면 복사된걸 볼 수 있음 dir누르면 확인가능
cd git_Tutorial로 이동하여 dir하면 document.txt 가 보인다.

이후에
Tutorials 파일에 my_module.py이라는 간단한 파이썬 코드를 적고 저장
< my_module.py >
def add(a,b)
return a+b

다시 cmd에서
git status => my_module.py가 추가된걸 볼 수 있음.
git add my_module.py => staging area에 올리기
(모든 파일을 다 하려면 그냥 git add . 으로 하면된다.)
git status => new file: my_module.py => 올라온걸 볼 수 있음
다시 원래되로 하고 싶으면
git reset my_module.py

git commit -m "Add my_module [Add]" 후 git status를 해보면 성공적으로 commit발생
그이후 git push까지 해줘야 성공적으로 업로그가 된다.

소스를 수정해본다.
my_module.py 에서
def sub(a,b):
return a-b
를 추가로 넣고
git status를 해보면 modified: my_module.py라고 뜬다

(1) 첫번째 경우, 원래 상태로 다시돌리려면
git checkout -- my_module.py
(2) 두번째 경우, git commit -m "Add my_module [Sub]" 후 git push 해서 업로드 시킨다.
(commit 명령어를 잘못 넣었을 경우 git commit --amend를 통하여 수정 가능!)


<Commit 내역 수정하기>

clone을 이용해 github페이지와 local 컴퓨터 파일을 동일화시킴
1. git pull
Already up to date가 뜨면 동일하다는 것을 알 수 있다.

  1. my_module.py에서 하나 더 추가로 입력
    def mul(a,b):
    return a*b

  2. git add . =>을 통해서 staging Area에 올림
    git commit -m "Add my_module.py [MUL]"
    git status를 통해 확인
    git push를 통해 업로드
    (*git log를 통해서 확인가능)

  3. git log에서
    처음에 commit한 document.txt로 돌아가려면 hash 값 복사
    git reset --hard 2e1475f96d7a495cb0e2a61ff150c2fe08e87ed6(hash값)
    (--hard는 이후의 것들은 모두 없애버리겠다!, --soft 옵션의 경우 내역을 보존한다. mix도 있음)
    git log를 다시 찍어보면 document.txt 뺴고 전부 사라진 것을 볼 수 있다.

  4. local(컴퓨터 내의) 파일로 들어가보면 전으로 돌아간것을 알 수 있다.
    이제 local과 github(remote)저장소가 일치하지 않는다.
    git push를 하면 거절된다. (구성이 달라졌기 때문)
    강제로 push도가능 git push -f (전부 전으로 돌아간것을 볼 수 있다.)

  5. 다시 새로 Tutorials 폴더에 my_module.py에 add함수 추가
    다시,
    git add .
    git commit -m "Add my_module.py [Add]"
    git push
    그리고 my_module.py에 sub함수 추가
    이때, 수정된 commit이 필요한데 git commit --amend실행
    UNIX모드라 a를 눌러야 수정가능하다
    Add my_module.py [Add] => Add my_module.py [Add & Sub] 로 바꾼후 esc를 누르고
    :wq! 를 입력하고 나온후

git status 입력하면 modified : my_module.py가 뜬다.
git log를 입력하면 commit한 메세지를 볼 수 있다.
이 상태로 강제로 푸쉬시킨다
git push -f
github에서 확인하여 보면 제목은 수정되었지만 내용물은 sub가 포함되지 않은 것을 볼 수 있다.
이때는 다시 git commit --amend실행하여 [Add]로 수정하여준다.
git push -f 를 통하여 확인해본다.

git add .
git commit -m "Add my_module.py [Sub]"
github에서 확인!!할것


<브렌치>

깃(Git) : 동시에 여러 개발자들이 프로젝트에서 각기 다른 기능을 개발할 수 있도록 브렌치(Branch)기능 제공
Master Branch => developBranch(새로운기능) + bug fix Branch(버그 수정) (필요할시 merge, 마스터 브랜치는 안정적이어야하기 때문에)

실습
git branch
=> 어떤 브렌치가 있는지 확인 가능 현재는 master(default)
git branch develop
=> develop 브렌치 만듬
git branch
=> 추가된것을보고
git checkout develop
=>
이 develop을 가르킨다.
파일로 돌아가 my_module.py에 mul 함수를 추가해준다
=> def mul(a,b):
return a*b

git add .
git commit -m "Add my_module.py [Mul]"
git log
=> Head -> develop으로 가르키고 있지만 github홈피 상에는 적용되어있지 않다. / 아직 merge가 안됨.

git checkout master
=> 마스터 브렌치로 돌아간 이후에

git merge develop
=> 합친다.

git log
=> master와 develop이 둘다 수정된 함수를 반영했다는 것을 알수 있다.

git push
=> github에 반영해준다.

기능을 다한 develop 브렌치 삭제
git branch -d develop

git branch
=> master만 남아있음


<브렌치 충돌 해결>

git branch
=> 현재 브렌치 확인 (master)
git branch develop
=> develop 브렌치 생성
git branch
=> master , develop
git checkout develop
=> develop을 가르키게 변경
git branch
=> master -> develop으로 바뀜

기존의 my_module.py에 div추가
=> def div(a,b):
return a//b

git add .
git commit -m "Add my_module [Div]"

git log
=> develop 브렌치에 하나의 함수가 추가되있는걸 확인할 수 있다. / master브렌치는 그대로

내용을 다르게하기위해 my_module.py에 #주석 추가해본다
=> develop와 master는 서로 소스코드가 다르다

git checkout master
git add .
git commit -m "Add my_module [Div] & Comment"
git log
=> master만 보이고 develop은 보이지 않음

git checkout develop
=> develop만 보이고 master은 보이지않음
=> 서로 commit 메세지와 파일도 다르다.

git checkout master
=>merge는 마스터에서 해야한다

git merge develop
=> 충돌 발생! merge가 실패했다고 나옴
my_module.py로 들어가보면 서로다른 코드 모두를 보여준다.
수동으로 head(master)과 develop 둘중하나를 골르고 하나는 삭제하고 저장한다

git add .
git comment -m"Add my_module [Div] & Comment"
git merge develop => 성공
git log => 함께 한 화면에 나옴
git branch -d develop => 기능을 다해서 없애준다.
git push => github 원격지 저장소에 반영해줌


<원격 저장소 관리>

새로운 cmd창
cd c:/Tutorials/git_Tutorial
git remote
=> origin으로 원격저장소 등록됨.
git remote show origin
=> 자세히 알고 싶으면

git remote add test (저장소 주소를 입력)
git remote -v
=> 전체 목록을 확인한다.
git remote rename test temp
=> 원격저장소의 이름 바꾸기
git log origin/master
=> 로그확인 가능
git remote rm temp
=> 특정저장소 제거 가능
git remote -v
=> 전체 목록을 확인한다. // 삭제됨

<Git에서 로그 다루기>
=> 다양한 commit내용들을 시간순서대로 확인 // 깃과 관련한 처리내용 확인
git log
=>확인가능하고 많으면 enter를 치고 빠져나오려면 q

git log --stat
=> 각 commit의 통계정보 //얼마나 많은 라인이 추가되었는지
git log -p -3
=> 위에서부터 3개까지 어떤 방식으로 commit이 이루어졌는지 확인가능
git log --pretty=oneline
=> 각각 한줄로 commit내용 출력
git log --pretty=format:"%h -> %an, %ar : %s" --graph
=>내가 원하는 형태로 출력 hash값,어떤사람이commit했는지,언제했는지, 어떤 메세지로 했는지 그래프로 출력

<README.md 파일 작성하기>
github 해당 repository에서 add a README 작성
cmd창에서 git pull을 하면 폴더에 README.md 파일이 생성됨

작성하는 방법

깃 튜토리얼

소스코드 블록은 다음과 같이 작성할 수 있습니다.

#include <stdio.h>
   printf("Hello World!");
   return 0;

링크는 다음과 같이 작성할 수 있습니다.

블로그 주소

순서 없는 목록은 다음과 같이 작성할 수 있습니다.

  • 깃 튜토리얼
    • 깃 Clone
    • 깃 Pull
    • 깃 Commit
      • 깃 Commit 1)
      • 깃 Commit 2)

인용 구문은 다음과 같이 작성할 수 있습니다.

'공부합시다.' -김현우-

테이블은 다음과 같이 작성할 수 있습니다.

이름영어정보수학
김현우98점87점100점
이순신94점78점91점
홍길동97점93점98점

강조는 다음과 같이 작성할 수 있습니다.

치킨 먹다가 두드러기 났어요. ㅠ


<Git Archive명령으로 소스코드 압축>

git archive --format=zip master -o Master.zip //git파일을 제외하고 압축폴더가생김
git archive --format=zip master -o ../Master.zip //상위폴더로 이동하여 생김


<Git Rebase 명령으로 커밋을 수정/삭제>

cd c:/Git Project Example
git init
Example 1.txt 메모장 생성
git add .
git commit -m "Add Example 1.txt"
내용 수정 Hello World 추가후 저장
git add .
git commit -m "Update Example 1.txt"
Example 1.txt 메모장 삭제 후
git add .
git commit -m "Delete Example 1.txt"
Example 2.txt 메모장 생성
git add .
git commit -m "Add Example 2.txt"
git log => 4개의 commit확인 가능

Delete Example 1.txt commit 메세지 수정
git rebase -i HEAD~3 //앞쪽에서 3개까지만
키보드 a를 누르고 변경할 Delete Example 1.txt 칸에 pick => reword로 변경 후
esc를 누르고 :wq!

나오게되면 화면이 하나뜨고 키보드 a를 누르고 Delete => Drop으로 변경후 같은방법으로 나온다
esc를 누르고 :wq!

git log를 눌러보면 변경이 된것을 알 수 있다.

  • git rebase -i HEAD~3 말고도 git rebase -i (특정 commit의 해쉬값을 넣어주면) 넣어준 commit의 위쪽으로 다 나온다.

특정 commit자체를 삭제하는 경우(동업의 경우 가능하면 X) => drop 이용
git rebase -i HEAD~3
키보드 a를 누르고 pick => drop으로 변경
esc누르고 :wq!
git log를 눌러보면 commit이 삭제된것을 볼 수 있음


<Config 환경 설정>

git config --global user.name "test"
git config --global user.email "test@test.com"
설정 및 변경 가능

profile
코딩을 잘하는 개발자가 되자!

0개의 댓글