[Git]git특강 2일차 정리

Today I Learned(TIL)📌 (2021.12.31)


Git 기초


[1] Git 초기 설정

최초 한 번만 설정합니다. 매번 Git을 사용할 때마다 설정할 필요가 없습니다.

  1. 누가 커밋 기록을 남겼는지 확인할 수 있도록 이름과 이메일을 설정합니다.

    작성자를 수정하고 싶을 때에는 이름, 메일 주소만 다르게 하여 동일하게 입력합니다.

    $ git config --global user.name "이름"
    $ git config --global user.email "메일 주소"
    
  2. 작성자가 올바르게 설정되었는지 확인 가능합니다.

    $ git config --global -l
       
    또는
       
    $ git config --global --list
    

[2] Git 기본 명령어

(0) 로컬 저장소

local_repo

  • Working Directory (= Working Tree) : 사용자의 일반적인 작업이 일어나는 곳
  • Staging Area (= Index) : 커밋을 위한 파일 및 폴더가 추가되는 곳
  • Repository : staging area에 있던 파일 및 폴더의 변경사항(커밋)을 저장하는 곳
  • Git은 Working DirectoryStaging AreaRepository의 과정으로 버전 관리를 수행합니다.

(1) git init

$ git init
Initialized empty Git repository in C:/Users/kyle/git-practice/.git/

kyle@KYLE MINGW64 ~/git-practice (master)
  • 현재 작업 중인 디렉토리를 Git으로 관리한다는 명령어
  • .git이라는 숨김 폴더를 생성하고, 터미널에는 (master)라고 표기됩니다.
  • Mac OS의 경우 (master)가 표기되지 않는데, Terminal 업그레이드를 통해 표기할 수 있습니다.

(2) git status

$ git status
On branch master

No commits yet

nothing to commit (create/copy files and use "git add" to track)
  • Working Directory와 Staging Area에 있는 파일의 현재 상태를 알려주는 명령어

  • 어떤 작업을 시행하기 전에 수시로 status를 확인하면 좋습니다.

  • 상태

    1. Untracked : Git이 관리하지 않는 파일 (한번도 Staging Area에 올라간 적 없는 파일)

    2. Tracked : Git이 관리하는 파일

      a. Unmodified : 최신 상태

      b. Modified : 수정되었지만 아직 Staging Area에는 반영하지 않은 상태

      c. Staged : Staging Area에 올라간 상태

    git status

    파일의 라이프 사이클

(3) git add

# 특정 파일
$ git add a.txt

# 특정 폴더
$ git add my_folder/

# 현재 디렉토리에 속한 파일/폴더 전부
$ git add .
  • Working Directory에 있는 파일을 Staging Area로 올리는 명령어

  • Git이 해당 파일을 추적(관리)할 수 있도록 만듭니다.

  • Untracked, Modified -> Staged로 상태를 변경합니다.

  • 예시

    $ touch a.txt b.txt
      
    $ git status
    On branch master
      
    No commits yet
      
    Untracked files: # 트래킹 되고 있지 않는 파일 목록
      (use "git add <file>..." to include in what will be committed)
            a.txt
            b.txt
      
    nothing added to commit but untracked files present (use "git add" to track)
      
      
      
    # a.txt만 Staging Area에 올립니다.
      
    $ git add a.txt
      
      
      
    $ git status
      
    On branch master
      
    No commits yet
      
    Changes to be committed: # 커밋 예정인 변경사항(Staging Area)
      (use "git rm --cached <file>..." to unstage)
            new file:   a.txt
      
    Untracked files: # 트래킹 되고 있지 않은 파일
      (use "git add <file>..." to include in what will be committed)
            b.txt
    

(4) git commit

$ git commit -m "first commit"
[master (root-commit) c02659f] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a.txt
  • Staging Area에 올라온 파일의 변경 사항을 하나의 버전(커밋)으로 저장하는 명령어
  • Commit Message는 현재 변경 사항들을 잘 나타낼 수 있도록 의미 있게 작성하는 것을 권장합니다.
  • 각각의 커밋은 SHA-1 알고리즘에 의해 반환 된 고유의 해시 값을 ID로 가집니다.
  • (root-commit)은 해당 커밋이 최초의 커밋 일 때만 표시됩니다. 이후 커밋부터는 사라집니다.

(5) git log

$ git log
commit 1870222981b4731d14ef91d401c68c0bbb2f6e7d (HEAD -> master)
Author: kyle <kyle123@hphk.kr>
Date:   Thu Dec 9 15:26:46 2021 +0900

    first commit
  • 커밋의 내역(id, 작성자, 시간, 메세지 등)을 조회할 수 있는 명령어
  • 옵션
    • --oneline : 한 줄로 축약해서 보여줍니다.
    • --graph : 브랜치와 머지 내역을 그래프로 보여줍니다.
    • --all : 현재 브랜치를 포함한 모든 브랜치의 내역을 보여줍니다.
    • --reverse : 커밋 내역의 순서를 반대로 보여줍니다. (최신이 가장 아래)
    • -p : 파일의 변경 내용도 같이 보여줍니다.
    • -2 : 원하는 갯수 만큼의 내역을 보여줍니다. (2 말고 임의의 숫자들 사용 가능)

(6) 한눈에 보는 Git 명령어

git command

cf)


Github


[1] Github 시작하기

(1) 회원 가입

(https://github.com/)에 접속합니다.

github1

  1. Github 메인 페이지에 접속해서 Sign up을 클릭합니다.

github2

  1. Username의 경우 앞으로 개발자 인생에서 계속 쓰일 이름이므로 신중해야 합니다! 이메일은 반드시 git config 설정에서 작성했던 이메일을 기입합니다!

github3

github4

  1. 작성한 이메일로 보내진 코드를 입력하여 인증 받습니다.

github5

  1. 간단한 설문조사가 진행됩니다. 사용에 있어서 크게 중요하지 않기 때문에, 빠르게 넘깁니다.

github6

  1. 위 화면이 나타나면 정상적으로 회원 가입이 완료 된 것입니다.

(2) Github 설정 변경

github7

  1. 오른쪽 상단 프로필을 클릭합니다.
  2. Settings를 클릭합니다.
  3. 왼쪽 안내 바에서 Repositories를 선택합니다.
  4. Repository default branch의 입력 창에서 main을 지우고 master로 작성합니다.
  5. Update를 클릭합니다.

[2] 원격 저장소 (Remote Repository)

여태 까지는 내 컴퓨터라는 한정된 공간에 있는 로컬 저장소에서만 버전 관리를 진행했습니다. 이제는 Github의 원격 저장소를 이용해 내 컴퓨터의 로컬 저장소를 다른 사람과 공유해봅시다. Git의 주요 목적 중 하나인 협업을 위해 로컬 저장소와 원격 저장소의 연동 방법을 학습합니다.

(1) Github에서 원격 저장소 생성

github8

화면 오른쪽 상단 더하기(+) 버튼을 누르고 New repository를 클릭합니다.

github9

저장소의 이름, 설명, 공개 여부를 선택하고 Create repository를 클릭합니다.(체크 박스는 건드리지 않습니다.)

(2) 로컬 저장소와 원격 저장소 연결

  1. 원격 저장소가 잘 생성되었는지 확인 후, 저장소의 주소를 복사합니다.

    github10

  2. 기존에 실습 때 만들었던 홈 디렉토리의 TIL 폴더로 가서 vscode를 엽니다.

  3. git init을 통해 TIL 폴더를 로컬 저장소로 만들어줍니다.

    kyle@KYLE MINGW64 ~/TIL
    $ git init
    Initialized empty Git repository in C:/Users/kyle/TIL/.git/
    
    1. git remote

      • 로컬 저장소에 원격 저장소를 등록, 조회, 삭제 할 수 있는 명령어
      1. 원격 저장소 등록

        git remote add <이름> <주소> 형식으로 작성합니다.

        $ git remote add origin <https://github.com/edukyle/TIL.git>
                 
        [풀이]
        git 명령어를 작성할건데, remote(원격 저장소)에 add(추가) 한다.
        origin이라는 이름으로 <https://github.com/edukyle/TIL.git라는> 주소의 원격 저장소를
        
      2. 원격 저장소 조회

        git remote -v로 작성합니다.

        $ git remote -v
        origin  <https://github.com/edukyle/TIL.git> (fetch)
        origin  <https://github.com/edukyle/TIL.git> (push)
                 
        add를 이용해 추가했던 원격 저장소의 이름과 주소가 출력됩니다.
        
      3. 원격 저장소 연결 삭제

        git remote rm <이름> 혹은 git remote remove <이름>으로 작성합니다.

        로컬과 원격 저장소의 연결을 끊는 것이지, 원격 저장소 자체를 제거하는 게 아닙니다.

        $ git remote rm origin
        $ git remote remove origin
                 
        [풀이]
        git 명령어를 작성할건데, remote(원격 저장소)와의 연결을 rm(remove, 삭제) 한다.
        그 원격 저장소의 이름은 origin이다.
        

(3) 원격 저장소에 업로드

  • 실습 때 작성했던 TIL 파일을 Github 원격 저장소에 업로드 해보겠습니다.
  • 정확히 말하면, 파일을 업로드하는게 아니라 커밋을 업로드 하는 것입니다!
  • 따라서 먼저 로컬 저장소에서 커밋을 생성해야 원격 저장소에 업로드 할 수 있습니다.
  1. 로컬 저장소에서 커밋 생성

    # 현재 상태 확인
       
    $ git status
    On branch master
       
    No commits yet
       
    Untracked files:
      (use "git add <file>..." to include in what will be committed)
            day1.md
       
    nothing added to commit but untracked files present (use "git add" to track)
    
    $ git add day1.md
    
    $ git commit -m "Upload TIL Day1"
    [master (root-commit) f3d6d42] Upload TIL Day1
     1 file changed, 0 insertions(+), 0 deletions(-)
     create mode 100644 day1.md
    
    # 커밋 확인
       
    $ git log --oneline
    f3d6d42 (HEAD -> master) Upload TIL Day1
    
  2. git push

    • 로컬 저장소의 커밋을 원격 저장소에 업로드하는 명령어

    • git push <저장소 이름> <브랜치 이름> 형식으로 작성합니다.

    • -u 옵션을 사용하면, 두 번째 커밋부터는 저장소 이름, 브랜치 이름을 생략 가능합니다.

      ```bash $ git push origin master

      [풀이] git 명령어를 사용할건데, origin이라는 이름의 원격 저장소의 master 브랜치에 push 한다.


    $ git push -u origin master 이후에는 $ git push 라고만 작성해도 push가 됩니다. ```

  3. vscode 자격 증명

    github11

    Sign in with your browser를 클릭합니다.

    github12

    Authorize GitCredentialManager를 클릭합니다.

    github13

    정상적으로 자격 증명이 완료 되었습니다.

    이후 git push 완료

    $ git push -u origin master
    info: please complete authentication in your browser...
    Enumerating objects: 3, done.
    Counting objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 218 bytes | 218.00 KiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    To <https://github.com/edukyle/TIL.git>
     * [new branch]      master -> master
    Branch 'master' set up to track remote branch 'master' from 'origin'.
    
  4. 원격 저장소에서 정상 업로드 확인

    github14

  1. ``git push`를 그림으로 이해하기

    github15

    로컬 저장소의 commit 이력이 원격 저장소에 그대로 반영됩니다.

[3] 실습

(1) README.md 파일 push 해보기

  • README.md는 원격저장소의 소개와 설명이 담겨있는 일종의 대문 역할을 합니다.
  • 반드시 파일 이름을 README.md로 지정해야 Github가 인식할 수 있습니다.
  • 홈 디렉토리에 있는 TIL 폴더에 README.md 파일을 생성하고, 자유롭게, 설명, 각오, 분류 등을 마크다운 문법으로 작성하고 자신의 Github TIL 원격 저장소에 push를 해봅시다.

  • 예시

    github16

    출처 https://github.com/namjunemy/TIL

    github17


gitignore


[1] .gitignore

특정 파일 혹은 폴더에 대해 Git이 버전 관리를 하지 못하도록 지정하는 것

(1) .gitignore에 작성하는 목록

  • 민감한 개인 정보가 담긴 파일 (전화번호, 계좌번호, 각종 비밀번호, API KEY 등)
  • OS(운영체제)에서 활용되는 파일
  • IDE(통합 개발 환경 - pyrcharm) 혹은 Text Editor(vscode) 등 에서 활용되는 파일
    • 예)pycharm -> .idea/
  • 개발 언어(python) 혹은 프레임워크(django)에서 사용되는 파일
    • 가상 환경 : venv/
    • __pycache__/

(2) .gitignore 작성 시 주의 사항

  • 반드시 이름을 .gitignore로 작성합니다. 앞의 점(.)은 숨김 파일이라는 뜻입니다.

  • .gitignore 파일은 .git 폴더와 동일한 위치에 생성합니다.

  • 제외 하고 싶은 파일은 반드시 git add 전에 .gitignore에 작성합니다.

(3) .gitignore 쉽게 작성하기

.gitignore의 내용을 쉽게 작성할 수 있도록 도와주는 두 개의 사이트를 소개합니다.

자신의 개발 환경에 맞는 것을 찾아서 전체 복사, 붙여 넣기를 하면 됩니다.

  1. 웹사이트

    gitignore.io

  2. gitignore 저장소

    gitignore

  3. Python에 대한 .gitignore 예시

    github18

[2] 실습

Vscode, Markdown, Git 기초, Github, .gitignore까지 배운 것을 모두 활용하는 실습 진행

  1. 홈 디렉토리에서 git-training-1이라는 이름의 폴더를 만들고, 그 안에서 vscode를 엽니다.

  2. Github에서 마찬가지로 git-training-1 이름으로 원격 저장소를 생성합니다.

  3. 로컬 저장소에서 README.md.gitignore 파일을 만든 후 첫 번째 커밋을 기록합니다.

  4. Typora를 이용해 README.md를 자유롭게 작성하고 두 번째 커밋을 기록합니다.

  5. no.txt 파일을 만든 후

    .gitignore에 등록하고 세 번째 커밋을 기록합니다.

  6. 로컬 저장소와 원격 저장소를 연결합니다.

  7. 로컬 저장소의 변경 사항을 원격 저장소에 업로드 합니다.

실습 결과 확인

github19

README.md의 내용과 각 커밋 메시지는 자유롭게 작성합니다.

[3] 심화

.gitignore에 대해 조금 더 알아봅니다.

(1) .gitignore 패턴 규칙

  1. 아무것도 없는 라인이나, #로 시작하는 라인은 무시합니다.

  2. 슬래시(/)로 시작하면 하위 디렉터리에 재귀적으로 적용되지 않습니다.

  3. 디렉터리는 슬래시(/)를 끝에 사용하는 것으로 표현합니다.

  4. 느낌표(!)로 시작하는 패턴의 파일은 ignore(무시)하지 않습니다.

  5. 표준 Glob 패턴을 사용합니다.

    • *(asterisk)는 문자가 하나도 없거나 하나 이상을 의미합니다.
    • [abc]는 중괄호 안에 있는 문자 중 하나를 의미합니다.
    • 물음표(?)는 문자 하나를 의미합니다.
    • [0-9]처럼 중괄호 안에 하이픈(-)이 있는 경우 0에서 9사이의 문자 중 하나를 의미합니다.
    • **(2개의 asterisk)는 디렉터리 내부의 디렉터리까지 지정할 수 있습니다. (a/**/z라고 작성하면, a/z, a/b/z, a/b/c/z 까지 모두 영향을 끼칩니다.)

(2) 패턴 예시

# .gitignore

# 확장자가 txt인 파일 무시
*.txt

# 현재 확장자가 txt인 파일이 무시되지만, 느낌표를 사용하여 test.txt는 무시하지 않음
!test.txt

# 현재 디렉터리에 있는 TODO 파일은 무시하고, folder/TODO 처럼 하위 디렉터리에 있는 파일은 무시하지 않음
/TODO

# build/ 디렉터리에 있는 모든 파일은 무시
build/

# folder/notes.txt 파일은 무시하고 folder/child/arch.txt 파일은 무시하지 않음
folder/*.txt

# folder 디렉터리 아래의 모든 .pdf 파일을 무시
folder/**/*.pdf


clone, pull


[1] 원격 저장소 가져오기

지금까지는 로컬 저장소의 내용을 원격 저장소에 업로드 하는 것을 학습했습니다.

이번에는 반대로, 원격 저장소의 내용을 로컬 저장소로 가져오는 것을 학습합니다.

(1) git clone

  • 원격 저장소의 커밋 내역을 모두 가져와서, 로컬 저장소를 생성하는 명령어

  • clone은 "복제"라는 뜻으로, git clone 명령어를 사용하면 원격 저장소를 통째로 복제해서 내 컴퓨터에 옮길 수 있습니다.

  • git clone <원격 저장소 주소>의 형태로 작성합니다.

    $ git clone <https://github.com/edukyle/TIL.git>
    Cloning into 'TIL'...
    remote: Enumerating objects: 3, done.
    remote: Counting objects: 100% (3/3), done.
    remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
    Receiving objects: 100% (3/3), done.
    

    위에 작성한 대로 실행하면, Github의 edukyle이라는 계정의 TIL 원격 저장소를 복제하여 내 컴퓨터에 TIL이라는 이름의 로컬 저장소를 생성하게 됩니다.

  • git clone을 통해 생성된 로컬 저장소는 git initgit remote add가 이미 수행되어 있습니다.

(2) git pull

  • 원격 저장소의 변경 사항을 가져와서, 로컬 저장소를 업데이트하는 명령어

  • 로컬 저장소와 원격 저장소의 내용이 완전 일치하면 git pull을 해도 변화가 일어나지 않습니다.

  • `git pull <저장소 이름=""> <브랜치 이름="">의 형태로 작성합니다.

    $ git pull origin master
    From <https://github.com/edukyle/git-practice>
     * branch            master     -> FETCH_HEAD
    Updating 6570ecb..56809a9
    Fast-forward
     README.md | 1 +
     1 file changed, 1 insertion(+)
      
    [풀이]
    git 명령어를 사용할건데, origin이라는 원격 저장소의 master 브랜치의 내용을 가져온다(pull).
    

[2] 내 컴퓨터 ↔ Github(원격 저장소) ↔ 강의장 컴퓨터

두 개 이상의 로컬 저장소에서 하나의 원격 저장소에 접근하면 어떻게 될까요?

집과 강의장을 오가면서 clone, push, pull하는 과정을 살펴보겠습니다.

(1) 규칙

  • 수업 때는 두 개의 폴더를 "내 컴퓨터""강의장 컴퓨터"라고 가정합니다.
  • 내 컴퓨터에 있는 로컬 저장소의 이름은 TIL-home입니다.
  • 강의장 컴퓨터에 있는 로컬 저장소의 이름은 TIL-class입니다.
  • Github에 있는 원격 저장소의 이름은 TIL-remote 입니다.

(2) 사전 세팅

  • 홈 디렉토리 안에 TIL-home 폴더를 생성합니다.

  • Github에서 TIL-remote라는 이름의 원격 저장소를 생성합니다.

  • TIL-home 폴더에서 vscode를 엽니다.

  • 아래와 같은 절차를 진행합니다.

    # TIL-home
      
    $ git init
    $ touch day1.md
    $ git add .
    $ git commit -m "집에서 Day1 작성"
    $ git remote add origin <https://github.com/edukyle/TIL-remote.git>
    $ git push origin master
    

    TIL-home 로컬 저장소의 내용이 TIL-remote 원격 저장소에 그대로 반영되었습니다.

  • 결과

    repo two

(3) git clone

여러분은 이제 강의장에 왔습니다. 강의장 컴퓨터에는 여러분의 TIL폴더가 없습니다.

  • Github에 있는 TIL-remote에서 git clone을 통해 내려 받습니다.

    # TIL-class
      
    $ git clone <https://github.com/edukyle/TIL-remote.git> TIL-class
    

    원격 저장소는 TIL-remote이지만, 위와 같이 작성하면 강의장 컴퓨터에는 TIL-class라는 이름으로 로컬 저장소가 생성됩니다. (내부 파일 내용은 똑같습니다. 단지 폴더의 이름만 바뀝니다.)

  • 결과

    repo two

(4) git push

강의장 컴퓨터 -> 원격 저장소

  • 강의장에서 새로운 파일을 만들고 원격 저장소에 업로드 합니다.

    # TIL-class
      
    $ touch day2.md
    $ git add .
    $ git commit -m "강의장에서 Day2 작성"
    $ git push origin master
    
  • 결과

    repo two3

(5) git pull

원격 저장소 -> 내 컴퓨터

  • 내 컴퓨터에는 day2.md가 없습니다. 왜냐하면 강의장 컴퓨터에서 day2.md를 만들어서 원격 저장소에 push 했기 때문입니다. 따라서 원격 저장소에서 day2.md에 대한 내역을 가져와야 합니다.

    # TIL-home
      
    $ git pull origin master
    
  • 결과

    repo two4

    이제 내 컴퓨터, Github, 강의장 컴퓨터의 내용은 동일합니다.

  • 주의 사항 (글 만으로는 이해하기 어려우니, 직접 보여주면서 수업합니다.)

[3] 실습

두 명씩 짝을 지어서 하나의 원격 저장소를 공유하며 끝말잇기를 진행합니다.

  1. 조장은 홈 디렉토리에 word-relay라는 이름의 폴더를 생성합니다.

  2. 조장은 Github에 word-relay라는 이름의 원격 저장소를 생성하고, 로컬 저장소와 연결합니다.

  3. 조장은 로컬 저장소에 README.md, .gitignore 파일을 생성하고 push 합니다.

  4. 조장은 원격 저장소의 collaborator로 조원을 추가합니다.

    repo two5

  5. 조원은 초대 메일을 확인하여 초대를 수락합니다.

  6. 조원은 word-relay 원격 저장소를 clone 받습니다.

  7. 조장과 조원은 add, commit, push, pull을 이용해서 끝말잇기를 진행합니다.

  1. 예시

    repo two6

2022

[web]jQuery 복습 3

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 2

11 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]jQuery 복습 1

16 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리4

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리3

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리2

6 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]JavaScript 정리1

7 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]CSS 기초 정리

9 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[web]HTML 기초 정리

2 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

[Pandas]pandas 연습

3 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑

2021

[Python기초]module

1 분 소요

[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!

맨 위로 이동 ↑