[DevOps] CLI & GIT

young-gue Park·2023년 11월 10일
0

DevOps

목록 보기
7/13
post-thumbnail

⚡ CLI & GIT


원활한 협업을 위해 이제는 자세히 공부해야할 때이다.

📌 CLI

🔷 pwd (Print Work Diretory)

  • 현재 위치 및 경로 확인
  • $ pwd
  • / : 루트 디렉토리
  • ~ : 홈 디렉토리

절대 경로는 / 으로, 상대 경로는 . 으로 시작한다.

🔷 ls (List Segments)

  • 폴더 내용 목록 출력
  • $ ls

옵션

  • -l : 리스트 형태로 자세히
  • -a : 숨김 파일까지 나열
  • 옵션을 다양하게 조합할 수 있다. ex) -al

🔷 cd (Change Directory)

  • 경로 이동
  • $ cd 폴더이름 또는 이동 경로
  • $ cd .. (상위 폴더로 이동)

🔷 mkdir (Make Directory)

  • 폴더 생성
  • $ mkdir 폴더이름
  • 폴더에 띄어쓰기가 있다면 따옴표로 감싸야한다.

🔷 touch

  • 파일 생성
  • $ touch 파일이름.확장자

🔷 vi (visual editor)

  • 파일 생성 및 후 편집
  • $ vi 작업할 파일
  • 파일 無 -> 생성과 동시에 편집 모드
  • 파일 有 -> 편집 모드

💡 vi 명령어
i : 현재 커서 위치에 삽입 - 입력모드
a : 현재 커서 다음위치에 삽입- 입력모드
esc + : + wq : 파일 저장 후 종료
: + q : 종료

🔷 cat (Concatenate)

  • 터미널에 파일 내용 출력
  • $ cat [파일이름.확장자]

🔷 open

  • 폴더, 파일 열기
  • $ open .
  • $ open 파일

📌 GIT

🔷 DVCS 분산 버전 관리 시스템

  • 컴퓨터 파일의 변경사항을 추적하고 여러 사용자들의 작업 조율
  • 로컬 저장소를 사용하는 명령어 기반의 시스템

💡 Git의 아버지는 Linus Torvalds, 2005 (https://github.com/torvalds)

🔷 GitHub / GitLab

  • Git 프로젝트를 지원하는 웹 호스팅 서비스
  • 코드 관리 및 협업으로 사용
  • 개발자들만의 Google Drive, Instagram

🔷 분산 버전 관리 시스템 (DVCS)

  • Git과 GitHub에 적용된 시스템
  • 버전관리를 한 개의 서버에서만 하지 않고 로컬 저장소에서도 함께 관리
  • 문제가 생기면 복제된 클라이언트 서버로 복원 가능

🔷 git init

  • git을 시작하기 위한 명령어
  • $ git init
  • 가장 기본 브랜치 (master)가 표시됨
  • .git 숨김 폴더가 생성되며 항상 최상단에 있어야 함

❗ 무계획으로 사용을 지양한다.

💡 git에서 관리하지 않을 파일을 지정하기 위해 .gitignore 파일을 이용해야하는데, 어려우면 gitignore.io 를 이용하여 만들어보자.

🔷 git config

  • 계정 설정
  • `$ git config <옵션> user.name “"
  • $ git config <옵션> user.email “<email>"
  • 이름, 이메일 주소가 틀렸으면 재입력

옵션

  • --system : 시스템 설정 파일
  • --global : 전역 설정 파일
  • --local : 내 저장소 설정 파일

🔷 git status

  • Git이 관리하는 현황을 한 눈에 파악할 수 있음
  • Working Directory 단계에서 변경된 파일이 있는지 추적하는 명령어
  • $ git status

💡 untracked

  • Staging Area에 올라가지 않은 파일의 상태
  • 빨간색으로 표시됨

💡 Staged

  • Staging Area에 올라가 있고 commit이 필요한 상태
  • 초록색으로 표시됨

🔷 git add

  • Staging Area 로 올리는 명령어
  • $ git add

옵션

  • . : 전체 파일 add
  • 파일이름.확장자 : 1 개 파일 add
  • 여러 개 add 시 공백문자로 파일 이름 구분

❗ 파일 이름에 공백문자가 있다면 따옴표로 파일 이름을 감싼다.

🔷 git commit

  • Staging Area 에 올린 버전에 메시지 작성
  • $ git commit

옵션

  • -m "커밋 메시지" : 전체 파일 commit
  • -a : 변경된 파일을 Staging Area에 올리면서 commit, 새 파일 안됨
  • --amend : 직전 commit 메시지 수정
  • 옵션들을 조합해서 함께 사용 가능 ex) -a -m

🔷 git log

  • commit 메시지과 내역을 확인할 수 있음
  • $ git log
    • 전체 메시지를 다 보여주기 때문에 로딩 시간이 길 수 있음
    • q를 누르면 터미널 탈출 가능

옵션

  • --oneline : commit 메시지와 간략한 해시값을 보여줌, 전체 해시값 7자리만 출력
  • --graph : 그래프의 모습을 보여줌

🔷 git remote

  • Git으로 관리를 선언한 저장소와 GitHub의 Repository를 연결
  • $ git remote add origin [github url] : 장소 추가
  • $ git remote –v : 지정한 원격 저장소(origin) 확인
  • $ git remote : 지정한 원격 저장소(origin) 삭제

❗ config 처럼 덮어 쓸 수 없다.

🔷 git push

  • $ git push origin [branch]
  • Working Directory 에서 add 하고 Staging Area 에서 commit을 마친 파일 및 폴더들을 Remote Repository(원격저장소)로 전달
  • 로컬 저장소(Git)에서 클라우드 저장소(GitHub/GitLab)으로 push 성공
  • Remote Repository(GitHub/GitLab)에서 push된 파일 및 폴더를 확인

🔷 git pull

  • $ git pull origin [branch]
  • Remote Repository에 올라가 있는 파일 및 폴더를 로컬 저장소로 내려 받음
  • Git과 원격저장소가 연결되어 있어야 사용 가능

🔷 git clone

  • $ git clone [repository url]
  • Repository 이름으로 폴더가 생성되고 그 안에 올라가 있는 파일 및 폴더를 로컬 저장소에 내려 받음
  • $ git init 없이 진행, 상위 폴더들이 Git으로 관리되고 있으면 안됨!

🔷 git flow

  • Vincent Driessen 이 고안한 깃 브랜칭 모델 (2010년)

💡 master(main), develop, feature, release, hotfix

🔷 git branch

  • 나뭇가지 라는 뜻으로 여러 갈래로 작업 공간을 나누어 독립적으로 작업

💡 branch는 독립 공간을 형성하기 때문에 원본(master)에 대해 안전하며 하나의 작업은 하나의 branch로 나누어 진행되어 체계적인 개발이 가능하다는 장점이 있다.

🔷 git branch

브랜치 목록 확인

  • $ git branch : 로컬 저장소
  • $ git branch -r : 원격 저장소 (origin)

새로운 브랜치 생성

  • $ git branch [브랜치 이름] : HEAD가 바라보고 있는 시점을 기준으로 브랜치 생성

특정 커밋 기준으로 브랜치 생성

  • $ git branch [브랜치 이름] [커밋 ID]

브랜치 삭제

  • $ git branch –d [브랜치 이름] : 병합된 브랜치만 삭제
  • $ git branch –D [브랜치 이름] : 강제 삭제 (주의)

🔷 git switch, git checkout

브랜치 이동

  • $ git switch [브랜치 이름]
  • $ git checkout [브랜치 이름]

switch 옵션

  • -c
    : 브랜치 이름만 넣으면 생성과 동시에 이동
    : 브랜치 이름과 커밋 ID 함께 넣으면 특정 커밋 기준으로 브랜치 생성 과 동시에 이동

🔷 git branch 주의사항

1) 브랜치 작업을 시작하기 전에 반드시 1회 이상의 commit 이 필요
2) 브랜치 이동하기 전에 현재 브랜치 작업물을 모두 commit 한 이후에 이동

🤔 ex)
master와 develop 브랜치가 있다.
develop 브랜치에서 test2.txt를 만들고 커밋하지 않은 상태로 master 브랜치로 이동하게 되면, test2.txt 파일이 master 브랜치로 함께 넘어온다. 독립적인 작업이 불가능하기 때문에 권장되지 않는다.

🔷 git merge

  • 나눠진 브랜치를 하나로 합치는 명령어
  • $ git merge [합칠 브랜치 이름]

🤔 ex)
1. 현재 test1 와 test2 브랜치가 있고, HEAD가 가르키는 곳은 test1
2. test2를 test1에 합칠려면?
git merge test2
3. test1를 test2에 합칠려면?
git switch test2 -> git merge test1

💡 branch는 merge하고 되도록 삭제를 권장한다.


🔷 HEAD

  • 현재 체크아웃된 branch의 가장 최신 commit을 가르키는 포인터

🔷 fork

  • 다른 사람의 GitHub Repository를 복제하여 나의 원격저장소에 저장

🔷 PR – Pull Request

  • 원격 저장소에서 다른 사용자에게 push된 상황을 알리는 것

🔷 git reset

  • 이전 버전으로 돌아가기
  • $ git reset [옵션] [커밋 ID]

옵션

  • --soft

    • 돌아가려는 commit 이후의 파일들을 Staging Area단계로 돌려놓음 (commit 하기 전 상태)
    • 즉, 다시 commit 할 수 있는 상태가 됨
  • --mixed

    • 돌아가려는 commit 이후의 파일들을 Working Directory로 돌려놓음 (add하기 전 상태)
    • 즉, unstaged 된 상태로 남아있음
    • 기본 옵션값
  • --hard

    • 돌아가려는 commit 이후의 파일들을 모두 Working Directory에서 삭제됨
    • 단, Untracked 파일은 잔여

🔷 git revert

  • 특정 사건을 없었던 일로 만드는 행위
  • $ git revert [커밋 ID]

💡 reset과 revert의 차이
reset: 특정 커밋 상태로 되돌아가는 기능, 되돌아갔을 때 해당 커밋 이후에 쌓았던 커밋은 사라짐
revert: 특정 커밋을 취소하는 새로운 커밋을 생성한다, 취소하는 이전 커밋은 그대로 살아 있음


협업을 위한 기초적인 것들이니 다시 한번 확인하자.

profile
Hodie mihi, Cras tibi

0개의 댓글