Upstage AI LAB 부트캠프 5기/실시간 공부내용 복습

[2024.10.24] Git

김 도경 2024. 10. 24. 23:22

* 강의를 듣고 필기한 내용일 이후에 따로 정리한 내용입니다.

 

- Git이라는 게 무엇인지, 어떻게 하는지 등등을 보고 git의 공부를 하는 수업

- 팀단위 작업에서 어떻게 버전관리를 할지에 대해서

- 도구자체는 사용법이 어렵진 않으나, 명령어 수행 수준정도이지만, 개념 이해가 필요

- 작업 수행은 쉬우나, 작업순서에 대한 정리가 필요함! 반복해서 정리를 하는 과정이 될 듯.

- 걔념만 이해하면 정말 쉬운 모듈

 

shell, vim commands 복습
  • Shell
    운영체제의 커널과 사용자를 이어주는 소프트웨어
             - shell에 명령을 내리면 커널에 전달을 해줌 : 커널에서 결과물을 다시 사용자에게 전달 : 커뮤니케이션 도구
       - sh(Bourne Shell): AT&T Bell 연구소의 Steve Bourne이 작성한 UNIX 쉘
       - csh: 버클리의 Bill Joy가 작성한 UNIX 쉘
       - bash(Bourne Again Shell): Brian Fox가 작성한 UNIX 쉘
                  - 다양한 운영체제에서 기본 쉘로 채택 : 가장 많이 사용
       - zsh: Paul Falstad가 작성한 UNIX 쉘 : mac os에서 기본으로 채택

  • windows : git bash 사용하여 실습함

   

- aaaaaa @ DESKTOP : DESKTOP에 aaaaa라는 유저가 접속되어있다

명령어

  • pwd : 현재 작업중인 위치
  •  ls : 현재 디렉터리에 있는 파일과 폴더의 목록
       -  ls -a : 현재 디렉터리의 모든 파일과 폴더
       -  ls -l : 파일과 폴더의 상세 정보
       -  ls -al : 숨김 파일까지 포함된 파일 목록을 상세 정보
  • cd : 디렉터리 이동
       - cd document : 다큐먼츠 디랙터리 이동
       - cd .. : 현재 디렉터리의 상위 디렉터리로 이동하는 명령어
           - ..이 상의 디렉터리를 의미
  • mkdir dev : "make directory"의 약자로, 새 디렉터리를 만드는 명령어
                  - dev : 생성할 디렉터리의 이름
  • touch : 파일의 생성  / 수정 시간을 갱신
          - touch README.md : 프로젝트 설명을 담는 README.md 파일을 생성
                  - touch hello.py / touch hello.c / touch hello.txt / touch report_final.docx / touch main.java / touch main.go /
         - touch ./src/hello.py : ./src/ 디렉터리 내에 hello.py 파일을 생성
  •  mv : 파일이나 디렉터리를 이동 / 이름 변경  
            - mv hello.c src : hello.c 파일을 src 디렉터리로 이동
            - mv ../hello.txt ./ :상위 디렉터리에 있는 hello.txt 파일을 현재 디렉터리로 이동
            - mv main.go scr/main.cs : 현재 디렉터리에 있는 main.go 파일을 src 디렉터리로 이동하고, 이름을 main.cs로 변경 (이름울 변경하며 위치를 옮김)
            - mv main.cs main_copy.go :현재 디렉터리에 있는 main.cs 파일의 이름을 main_copy.go로 변경   (이름만 변경)
            - mv hello.* .. : hello라는 이름을 가진 모든 파일을 상위 디렉터리로 이동하라
  • cp : 파일을 복사하는 명령어
            - cp hello.txt hello_copy.txt : 현재 디렉터리에 있는 hello.txt 파일을 복사하여 hello_copy.txt라는 새로운 파일을 생성
  • rm : 파일이나 디렉터리를 삭제하는 명령어
                  * 삭제된 파일은 복구가 불가능하기 때문에 매우 주의해서 사용
             - rm main.java : main.java를 삭제해라
             - rm hello* / rm hello.* : hello 이라는 이름을 가진 모든 파일을 삭제해라
             - rm -rf src :  src 디렉터리와 그 안의 모든 파일 및 하위 디렉터리를 강제로 삭제하는 명령어
             - rm -rf / : 시스템의 루트 디렉터리(/)와 그 아래 모든 파일 및 디렉터리를 강제로 삭제 ( 매우 위험한 명령어)
             - rm ./* : 현재 디렉터리(./)에 있는 모든 파일을 삭제하는 명령어

 

  • Vim
        - Free and Open source text editor
        - Bill Joy의 vi 확장판
        - CLI 기반의 text editor - nano, emacs, gedit 등
        - Neovim, Macvim 등 다양한 확장판
        - vundle(지원중단), vim-plug 등의 확장기능 설치 관리자 제공
        - 모드 기반의 마우스 입력 대체
              - 마우스 없이 해야해서 모드들이 많음 : 그게 좀 어려움
            - normal mode(default): 모든 키가 명령으로 동작
            -  insert mode(i): 입력, 수정 모드
                      - 
            -  visual mode(v): 블록설정
            -  command-line mode(:): 패턴 검색, 필터, 줄이동, 종료 등의 액션 수행 모드

        - VS보다 가벼워서 많이 사용함 / 파이썬 개발환경은 쓸 만함
     
        - vim은 한글로 동작불가
        - git을 위한 vim에서는 insert만 왔다갔다함

  • vim hello.md : hello.md 파일을 Vim 텍스트 편집기로 열어 편집

  • 제목 텍스트는 #을 쓰고 # 제목 / ##소제목 / ###소제목의 소제목 이렇게 한다

  • 일반적인 문단을 작성할때는 기호 없이  작성하면 됩니다.
          - 엔터를 쳐도 다음 문단일 것 같지만 이 문장은 윗문단에 포함된 문장
          - 새 문단을 열때는 엔터를 두 번 쳐야한다.
          - 문법간의 구분도 엔터를 두 번 쳐야한다.

  • 링크랑 사진을 넣는 법
          - 링크 : [Link text](https://www.google.com)
          - 사진 : ![Alt text](./imgs/cat.jpg)
  • 문장속에서 '특정부분'을 강조할 때는backquote를 사용
          - 예를 들면 '$ pip install fastaqi'.
  • ## Code highlight
        - 문장속에서 '특정부분'을 강조할 때는backquote를 사용
              -예를 들면  '$ pip install fastaqi'.
         - backquote 3개를 누르면 각 코드에 따른하이라이트를 해준다
'''python
def hello(user_name: str) -> str:
    return f 'Hello, {user_name.upper()}'
'''
'''html
<ul>
    <li>Item</li>
</ul>
'''
  • mathjax
    $y=ax +b$
  • vim mode
    - normal mode: 어느 모드에서건 esc를 누르면 이동
    - insert mode: i on normal mode
    - visual mode: v on normal mode
    - command mode: : on normal mode

  • 커멘드 모드에서
    - : 하고 숫자하면 해당 라인으로 이동을 할 수 잇음
    - :w : 저장
    - :wq : 저장하고 나가겠다.
    - :q : 나가겠다
    - :q! : 모든걸 무시하고 나가겠다

  • cat hello.md : hello.md에 있는 걸 읽어오겠다

git
  • git
    분산형 버전관리 시스템(distributed Version Control System)
     - Linus Torvalds가 Linux 커널 관리를 위해 1주일만에 만든 버전관리 시스템
     - 압도적 업계 1위 : 단순한 구조와 빠른 속도 
     - 분산형 저장소 지원
     - 비선형적 개발(수천개의 브랜치) 가능 : 멀티버스처럼 다른 시간선에서 일을 할 수 있음_다른사람 신경X 합쳐질때 정리가능
           - 소스코드 주고받기 없이 동시작업이 가능해져 생산성이 증가
           - 수정내용은 commit (각각 일을 한 것, save 파일) 단위로 관리, 배포 뿐 아니라 원하는 시점으로 Checkout 가능
    - 새로운 기능 추가는 Branch로 개발하여 편안한 실험이 가능하며, 성공적으로 개발이 완 료되면 Merge하여 반영
    - 인터넷이 연결되지 않아도 개발할 수 있음

    - Cloud Platform에서 관련 작업을 위해서는 CLI가 필수 : 반드시 CLI를 알아야한다. GUI가 쉬움
    - CLI에 익숙해지면 GUI를 사용하기 위해 필요한 것은 도구에 대한 적응 뿐
    - 익숙하지 않은 Shell command에 익숙해지는데에도 도움

  • git의 구조
        - Blob: 파일 하나의 내용에 대한 정보
        - Tree: Blob이나 subtree의 메타데이터(디렉토리 위치, 속성, 이름 등)
        - Commit: 커밋 순간의 스냅샷

  • git의 단위
    - Local Repository (로컬 저장소) : 사용자의 컴퓨터에 저장된 Git 저장소
           - 모든 변경 사항을 커밋할 수 있고, 자신의 로컬 저장소에서 모든 히스토리를 관리
           - 다른 사람이 관여하지 않고, 자신의 개발 환경에서 작업하는 공간

    - Remote Repository (원격 저장소) : 원격 저장소는 GitHub, GitLab, Bitbucket과 같은 원격 서버에 위치한 저장소

    - 혼자 깃을 쓸 때는 add commit push만 할 줄 알면 됨
       - add commit을 하면, 글씨가 쓰이고, push를 하면 remote로 넘어감

  • git과 git hub의 차이
    - git : 분산형 버전 관리 시스템
      - 코드의 변경 사항을 기록하고 관리하는 도구
      - 로컬 저장소에서 주로 사용되며, 사용자 컴퓨터에서 소스 코드를 관리

    - git hub : Git 저장소 호스팅 서비스 (Hosting Platform)
       - Git을 사용하는 소스 코드 호스팅 플랫폼
       - Git 저장소를 원격으로 저장하고 관리

      - gitlab : 보완이 좋아서, 주로 금융권에서 주로 사용이 됨
      - Bitbucket : 다른 엔지니어, 디자인업체랑 협업을 할 때 많이 사용이 됨

  • $ git config --list : Git 설정 정보 목록을 출력
    전역 설정(global configuration)
       - $ git config --global user.name “{username}”   : Git에서 사용할 사용자 이름을 설정
       - $ git config --global user.email “{emailaddr}”    ; Git에서 사용할 사용자 이메일을 설정
       - $ git config --global core.editor “vim”   : 기본으로 사용할 텍스트 편집기를 vim으로 설정
       - $ git config --global core.pager “cat”   : Git 출력 내용을 페이저(pager) 없이 바로 출력

       - git config —global alias.lg “log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit”
      - 의미
          - git config --global alias.lg: Git에서 전역으로 lg라는 별칭을 설정하는 부분
          - log --color --graph:
                log: 커밋 로그를 표시하는 명령어입니다.
               --color: 로그를 출력할 때 컬러를 사용해 가독성을 높입니다.
                 --graph: 커밋 내역을 그래프로 시각화해서 브랜치 및 머지 내역 등을 표시합니다.

    --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit”
                 로그의 출력 형식을 지정
                  %Cred%h%Creset: 짧은 커밋 해시를 빨간색으로 표시합니다.
                  %C(yellow)%d%Creset: **참조(HEAD, 브랜치, 태그 등)**를 노란색으로 표시합니다.
                  %s: 커밋 메시지.
                  %Cgreen(%cr): 커밋이 언제 발생했는지를 녹색으로 표시합니다 (상대 시간).
                  %C(bold blue)<%an>%Creset: 커밋 작성자의 이름을 굵은 파란색으로 표시합니다.
                  --abbrev-commit: 커밋 해시를 짧게 표시합니다.
git 사용하기

 

  • 원격 저장소 생성
    0. + 로 해서 새 저장소 생성하기 
        1. 이름 저장하고
            - 설명은 생략가능
            - public, private 중 private를 하면 좀 잠김 : public으로 하는 게 좋음
        2. add readme.md 하기
        3. license 꼭!!! 설정하기!!!! 
           - 단체나 팀에 속해서 일할 때 반드시 필요
           - 오픈소스라고 해서 공짜가 아님.    : MIT 라이센스 : 가장 열려있는 라이센스, 나머지는 제한사항이 있음
           - GNU GPL (조심해야함) GPL이 붙어있는 라이브러리를 쓰면, 코드는 무조건 오픈소스가 되어야함 - 아니면 법적문제                     - 상용/보완이 필요한 곳에는 절대 쓰지 않기

  • 원격 저장소에서 로컬로 프로젝트를 복사(clone)
      - 초록색 버튼 눌러서 local에서 url을 복사해서 가져옴
      - git창에서 pwd로 위치가 dev인걸 확인한 뒤에,
      - git clone (url 복사) 하기

  • 만든 원격저장소에 hello.py 파일 만들기
       - cd (저장소 이름) 을 해서 저장소로 들어가기
       - touch hello.py
       - ls 로 해서 hello.py가 만들어진지 확인
       - git status로 현재 상태 확인     : 로컬 저장소의 작업 트리와 스테이징 영역의 상태를 확인
           - 처음 상태는 hello.py가 추척되지 않는 파일로 표시됨
           - 이 파일은 처음 추가된 파일이며, 커밋되기 전에 추가(Git의 관리하에 두기) 작업이 필요
       - git add hello.py를 해서 스테이징 영역에 추가한 것
       - 다시 git status로 상태 확인
       - hello.py가 Changes to be committed 아래에 표시
       - 이 파일이 스테이징 영역에 올라갔다는 것을 의미하며, 이제 커밋 준비가 된 상태
  • 만든 hello.py에 들어가서 작업하기
    - git commit 으로 hello.py안에 들어가기
       - vim으로 들어가게 됨 - vim에서 배운 내용
      - i를 눌러서 insert 모드로 바꾸어주기
      - 내용을 작성
      - esc로 노멀모드로 나와서
      - :wq +enter 해서 g하면 커밋이 완성됨

  • 토큰 세팅하기
    -https://github.com/settings/tokens 로 들어가기
     > Generate new token(classic) 
    - note는 personalToken : 구분할때 쓰는 이름, 아무거나 써도 괜찮음. 나중에 알아볼 수 있게 쓰긴 하기
    - expiration : 만료기한 : 혼자 사용때는 no expiration으로 가능 : 컴퓨터를 바꿀때 다시 줘야함
    - Select scopes 내용 모두 누르기
    - generate 해주기
    - 토큰값을 복사해서 사용 : 새로고침 금지..! : 새로고침하면 토큰을 잃어버림-새로 만들어야함
       - 토큰은 매번 생성X , 1번만 만들면 됨.

  • git push origin main
    - 로컬 저장소의 main 브랜치에서 원격 저장소(origin)로 변경 사항을 푸시(push)
     - main 브랜치의 최신 커밋들이 원격 저장소의 main 브랜치로 푸시
     - 로컬 main 브랜치의 변경 사항을 원격 저장소(origin)의 main 브랜치로 푸시

  • git remote -v
     - 현재 로컬 저장소와 연결된 원격 저장소의 URL 목록을 보여줌.

  • git헙에 올리기
    - pwd와 ls로 현재 위치 상황 확인
    - git status로 현재 확인하기
    - vi README.md 로 README 내부 내용 수정
    - git add README.md 를 올리기

  • Conventional Commits
    - commit의 제목은 commit을 설명하는 문장형이 아닌 구나 절의 형태로 작성
    - importanceofcapitalize `Importance of Capitalize`
    - prefix 꼭 달기
             - feat: 기능 개발 관련
             - fix: 오류 개선 혹은 버그 패치
             - docs: 문서화 작업
             - test: test 관련
             - conf: 환경설정 관련
             - build: 빌드 작업 관련
             - ci: Continuous Integration 관련
             - chore: 패키지 매니저, 스크립트 등
             - style: 코드 포매팅 관련
    - template
    - {type}: {description} 작업단위 축약(breaking change가 있다면 type 뒤에 !)
    - {body} 작업 상세 기술
    - {footer} 부가정보(ex) BREAKING CHANGE: Drop email sign up support)

 

- vi hello.py : hello.py의 코드 내용을 수정

-commit hello.py ; hello.py의 부연설명 수정

 

진행하는 방법

 

0. 상위 폴더에서 하위 폴더로 찾아가기

 - pwd : 현재 위치 확인

 - ls로 내부 폴더 찾기

- cd 폴더 경로로 계속 해서 찾아가기


1. 폴더 이동 및 위치 확인:
  - cd [폴더 경로]: 작업할 폴더로 이동.
  - pwd: 현재 위치 확인 (작업 위치가 dev 폴더 안인지 확인).

2. 파일 생성 및 확인:
  - touch hello.py: hello.py 파일 생성.
  - ls: 파일이 생성되었는지 확인.

3. 파일 수정:
  - vi hello.py: 파일 열어서 코드 작성.
  - :wq: 작성 후 저장하고 종료.

4. 파일 실행 및 확인:
  - python hello.py: 작성한 Python 파일 실행해 코드가 제대로 작동하는지 확인.

5. Git에 파일 추가 및 커밋:
  - git add hello.py: 파일을 스테이징 영역에 추가.
  - git commit : 커밋 메시지와 함께 파일을 커밋.

6. 원격 저장소로 푸시 (옵션):
  - git push origin main: 로컬 커밋을 원격 저장소에 업로드.

 

README.md 에 적을 것

 

  • 가장 기본적인 틀

# ProjectName      : 프로젝트 이름을 적는 곳
This is Abstract. See [Demo](Demo link)     : 프로젝트에 대한 간단한 설명과 데모 링크를 제공
Project badges(CI/CD, gh stars, ..)         : 뱃지: CI/CD 상태, GitHub 스타 수 등 프로젝트 상태를 나타내는 뱃지들

## Prerequisites            : 프로젝트를 실행하기 위한 필수 조건 (예: 설치해야 할 프로그램, 환경 설정).
## How to Start             : 프로젝트를 시작하는 방법을 설명
## Installation               : 프로젝트 설치 방법에 대한 구체적인 절차를 작성
## Features             : 프로젝트에서 제공하는 주요 기능을 나열
## Run Tests(optional)      : 테스트 실행 방법을 설명
## Credit                 ; 프로젝트에 기여한 사람들이나 참고 자료를 기재

 

  • 바꾸는 방법
    1. 파일 수정:
      - vi README.md: 파일 열어서 작성.
      - :wq: 작성 후 저장하고 종료.

    2. Git에 파일 추가 및 커밋:
      - git add hello.py: 파일을 스테이징 영역에 추가.
      - git commit : 커밋 메시지와 함께 파일을 커밋.

    3. 원격 저장소로 푸시 (옵션):
      - git push origin main: 로컬 커밋을 원격 저장소에 업로드.

 

  • github 프로필 생성기 : https://rahuldkjain.github.io/gh-profile-readme-generator/
    - readme.md에다가 넣기
  • gitignore : 특정 파일이나 디렉토리를 추적하지 않도록 명시하기 위한 파일
      - 비밀번호, api키 같은 것 등을 git에 넣지 않기 위하여 쓰는 것
    - https://www.toptal.com/developers/gitignore/
               - 운영체제, 언어, 등등을 넣고 생성 
               - 텍스트를 전체 선택 복사 (ctrl + a / ctrl+c)
    - 터미널로 와서,
              - touch .gitignore로 해서 숨김파일을 만듬 ( 앞에 .이 붙어있으면 숨김 파일, ls하면 안 보임, ls -a 해야 보임
             -  마우스 우클릭+paste 하여서 붙여넣기 :wq로 저장하고 나오기
    -  git status 로 상태 확인
    - git add .gitignore로 올려주고
    - git commit으로 commit 작성해주기
    - git push origin main으로 올리기

  • git with .ipynb
    - https://github.com/ulgoon/some-ipynb-proj
    - .ipynb 파일은 json 기반이라 Source Control이 쉽지 않음
    - 변경사항이 cell 단위 추적이 아니라 json 코드 변경사항이 추적

    - nbconvert로 .py or .html 파일 단위로 변환하여 변경사항 추적
    - 3rd-party https://www.reviewnb.com/ 로 렌더링 된 ipynb의 변경사항 추적
    - github에서 바로 변경사항 추적 가능

  • git은 습관이 중요함
     - TIL(Today I Learned..) repository에 오늘 배운 것을 정리
     - 매일 git으로 업로드를 해야하기 때문에 강제 커맨드 학습 가능
    - github blog
           - hexo 로 정적 블로그를 만들어 정리하는 습관을 만들고 Markdown과 친해지기
    - Side Project
           - 짧은 단위의 프로젝트를 자주 수행하여 생성-완성까지의 과정을 자주 반복

github blog
  • github pages 프로젝트 설명을 위한 웹사이트 호스팅 서비스
       - username.github.io repo 생성 혹은 프로젝트 별 pages 생성
       - https://www.upstage.ai/blog (ghost)
       - https://woowabros.github.io
       - https://spoqa.github.io/

  • Static Site Generator 정적 페이지를 생성해주는 도구
         - github pages는 파일 저장소이기 때문에 완성된 페이지만 제공 가능
         - 모든 페이지가 독립적으로 존재해야함 -> 컨텐츠 관리의 어려움 발생
         -  jekyll( https://jekyllrb-ko.github.io/ ): Ruby 기반 정적 사이트 생성기
               - 설치와 사용이 쉬움(많은 튜토리얼)
               - 사용자가 많았음
         -  Hugo( https://gohugo.io/ ): Go 기반 정적 사이트 생성기
               -  빠른 속도로 사이트 빌드 가능
               - 사용자 증가 중
         - Hexo( https://hexo.io/ko/index.html ): node.js 기반 정적 사이트 생성기
               - 쉬운 사용성과 사용자 개인화
               - Next.js, Gatsby, ..

  • hexo 사용하기
    - 시작 위치는 dev 폴더
    - hexo 명령어   :   정적 사이트 생성을 하라는 의미
    - hexo init [폴더 이름] : 새로운 Hexo 프로젝트를 초기화

    - npm install 명령어로 package.json 파일에 정의된 **모든 의존성(dependencies)**을 설치하는 명령어

    - hexo init [폴더 이름]을 하면 https로 시작하는 url 주소가 뜸 -> 미리보기 가능
    - hexo server 를 하면, http://localhost:4000/ 의 사이트에서 미리보기가 가능

    - $ hexo new post "제목" 를 하여 새로운 포스트 생성
    - vi source/_posts/[제목.md]를 내용 수정

    - $ hexo clean && hexo generate : Hexo 블로그를 빌드하는 과정에서 자주 사용하는 명령어 조합
              - hexo clean: 캐시와 이전에 생성된 파일들을 삭제
              - hexo generate (또는 hexo g): 정적 웹사이트 파일들을 생성
    - hexo server 를 하면, http://localhost:4000/ 의 url에서 아까 내용 수정한 게 바뀌었는지를 확인하기

    -npm install hexo-theme-next@latest : Hexo 블로그에 NexT 테마를 설치하는 명령어
            - install에 관련한 링크 : https://theme-next.js.org/docs/getting-started/installation.html
                                - https://theme-next.js.org/docs/getting-started/#Enabling-NexT
    - cp node_modules/hexo-theme-next/_config.yml _config.next.yml : NexT 테마의 기본 설정 파일을 복사하는 명령어

    - vi _config.yml 명령어는 _config.yml  : 파일을 vi 편집기로 열어 수정
         - title, subtitle 변경
         - author 변경, url 변경
         - theme : next로 변경
         - type : git
         - repo
              - hexo deploy만 치면 보낼 수 있게끔
              - git hub에서 새 레포스토리를 만듬
                   - Repository name에 https://username.github.io 로 넣기
                   - v퍼블릭으로 크리에이트하기
                   - 여기서Quick setup — if you’ve done this kind of thing before에 나오는 url을 복사해서 터미널에 
               - 터미널로 와서 repo를 만들어서 붙여넣기

    - npm install hexo-deployer-git --save 설치
    - hexo clean && hexo generate으로 한번 끊어주기 : 어떤 작업을 하면 항상 이렇게 클린이랑 generation을 해줌
    - hexo server 의 http://localhost:4000/에서 한번더 확인하기

    - $ hexo clean && hexo deploy 를 하면 전송이 바로 됨
    - 깃허브에 올라와있는지 확인하기

  • hexo 관련 찍어놓으신 영상
     - 나중에 참고 하기