Unix/ Git 기초

우혁·2024년 1월 2일
8

코드잇 스프린트

목록 보기
2/22

- ⭐️ Unix 명령어 ⭐️

man [명령어] : 메뉴얼

q : 메뉴얼 상태에서 나가기

control + a : 줄의 맨앞으로 커서 이동

control + e : 줄의 맨뒤로 커서 이동

control + c : 작성 중인 커맨드 취소, 실행 중인 커맨드 취소

clear : 이전 커맨드 내용 지우기(히스토리는 남아있음)

tab : 자동 완성 기능(작성한 커맨드의 자동완성이 가능한 명령어들이 나오거나 명령어를 완성시켜줌, 디렉토리 이동 시에도 사용 가능하다.)

pwd : 현재 위치해있는 디렉토리 경로를 표시

cd : 디렉토리 이동(cd, cd ~ 둘 다 홈 디렉토리로 이동됨)

cd - : 이전에 위치했던 디렉토리로 이동

ls [폴더] : 현재 위치에 있는 디렉토리에 폴더들을 보여줌([폴더]까지 작성하면 그 폴더 안에 내용을 보여줌)

mkdir : 디렉토리를 생성할 수 있다.

touch : 파일을 생성할 수 있다.(여러개를 한번에 생성 가능)

cat : 파일의 내용을 보여준다.

mv : 파일, 폴더 이름 변경, 이동(원래는 변경할 파일명이 중복되면 덮어쓰기하지만 -i 커맨드를 사용하면 덮어쓸건지 동의여부를 구한다.)

mv [기존 파일명] [변경할 파일명]
mv [옮길 파일명] [옮기는 위치]

cp : 디렉토리와 파일 복사 붙여넣기

rm : 파일이나 디렉토리 삭제(비어있지 않은 디렉토리는 -r 옵션을 사용하면 삭제가 가능하다)

절대 경로와 상대 경로

절대 경로: 루트 디렉토리(/)를 기준으로 경로를 나타내는 것

  • 어느 곳에서든 경로에 접근할 수 있다는 장점이 있지만 경로가 길어질수록 불편하다는 단점이 있다.

상대 경로: 현재 자신이 위치해 있는 디렉토리 기준으로 경로를 나타내는 것
(현재 디렉토리는 .으로 표시, 상위 디렉토리는 ..으로 표시, 최상위(루트) 디렉토리는 /으로 표시한다.)

  • 멀리 떨어져있는 디렉토리의 경우, 절대경로가 더 유리할 수 있다.

주의사항🔥 디렉토리에 공백이 있는 경우에는 작은따옴표('')큰 따옴표("") 혹은 역슬래시(\ )를 사용해야 한다.

cd 커맨드뿐만 아니라 파일 경로를 인자(argument)로 받는 모든 커맨드에 해당한다.

// 공백이 있는 디렉토리 이동 예제
cd 'hello world'
cd "hello world"
cd 'hello\ world' // 한국어 키보드의 경우 ₩키를 사용

ls 커맨드의 중요한 옵션들

ls -a : 숨김파일을 포함한 경로안의 모든 내용이 표시된다.

ls -al : 숨긴파일을 포함한 모든 내용의 상세정보가 표시된다.

⭐️ CLI 텍스트 에디터 vim ⭐️

vim : 텍스트 에디터 실행

일반모드(커서 이동, 텍스트 붙여넣기, 작업취소)
- 일반 모드 -> 입력 모드(텍스트 입력) : i
- 일반 모드 -> 비주얼 모드(텍스트 블록 지정, 텍스트 복사) : v, V
- 일반 모드 -> 명령 모드(내용 저장, vim 종료) : :

일반 모드를 제외한 각 모드들은 esc 통해 일반 모드로 돌아갈 수 있다


- sudo란 무엇인가?

유닉스 운영 체제에서 특정 작업을 하려면 관리자 권한이 필요할 때가 있다, 특히 설치 관련 작업을 할 때
필요로 하는 경우가 많은데 그럴때 관리자 권한을 잠시 흭득할 수 있는 커맨드가 sudo 이다.


- ⭐️⭐️ Git(버전 관리, 동시 협업) ⭐️⭐️

지난 과정 확인 가능, 이전 버전으로 돌아갈 수 있음

레포지토리(repository): 프로젝트의 변경사항들이 저장되어 있는 .git 디렉토리이다(커밋이 저장되는 곳)

  • 로컬 레포지토리: 내 컴퓨터에 있는 레포지토리

  • 리모트(원격) 레포지토리: Github에 생성한 레포지토리

커밋(commit): 프로젝트 디렉토리의 특정 모습을 하나의 버전으로 남기는 행위(버전 관리 시점)

Git은 크게 3가지 종류의 작업 영역을 두고 동작한다

1. working directory:작업을 하고 있는 프로젝트 디렉토리를 의미한다.

2. staging area: git add를 한 파일들이 존재하는 영역이다. 커밋을 하게되면 staging area에 있는 파일들만 커밋에 반영된다.

3. repository: working directory의 변경 이력들이 저장되어 있는 영역이다.

Git 명령어

git init : 현재 디렉토리를 프로젝트 디렉토리로 설정하고 그안에 레포지토리(.git 디렉토리) 생성

주의사항🔥 첫 커밋시 git config를 통해 나의 정보를 입력해야 한다!!

git config user.name "woohyeok" // 유저 네임 설정
git config user.email "woogur29@gmail.com" // 이메일 설정

staging area에 변경사항 추가하기(git add)

git add [파일명] : 커밋할 파일을 미리 지정(수정된 파일의 모습이 커밋에 포함될 것이라 지정하는 것)
git add [디렉토리] : 커밋할 디렉토리 설정

여러 파일에 변경사항이 있고 그 변경사항들을 한번에 git add 하고 싶다면?

git add . : 현재 프로젝트 디렉토리 내에서 변경사항이 생긴 모든 파일들을 staging area에 추가해준다.

git add 취소하기

git reset [파일명] : staging area에서 삭제한다.

문제 상황이 발생했을 때 현재 상태를 파악하려면?

git status : Git이 인식하고 있는 프로젝트 디렉토리의 현재 상태를 보여줌

  • 커밋에 반영될 변경 사항
  • 커밋에 반영되지 않는 변경사항(파일이 수정되었지만 git add를 하지않은 파일)

커밋(commit)하기

git commit -m "커밋 메세지" : 현재 staging area에 있는 것들을 커밋을 남겨 로컬 레포지토리에 저장
git log --pretty=oneline : 커밋 기록(history) 보기(한 줄씩 보기)
git commit --amend 가장 최신 커밋 수정해서 새로운 커밋으로 만듦
git show [커밋ID] : 해당 커밋과 그 이전의 커밋의 차이점을 보여준다.
git diff [이전 커밋ID] [그 이후의 커밋ID] : 두 커밋 간의 차이 보기
git reset [옵션][커밋ID] : HEAD가 과거의 커밋을 가리키게 할 수 있다. working directory의 내용도 과거의 커밋 모습으로 돌아온다.(과거 커밋의 모습으로 작업을 다시 시작하고 싶을 때 사용)

  • --soft : repository HEAD가 커밋ID를 가리킴
  • --mixed : working directory를 제외한 영역들이 바뀜
  • --hard : Git 3가지 영역 모두 바뀜

커밋을 취소해야 한다면?(커밋 삭제)

git revert [커밋ID] : 해당 커밋에 했던 작업으로 되돌아간다.

커밋에 태그 달기

git tag [태그 이름] [커밋 아이디] : 커밋에 tag 달기
git tag : 설정한 태그들 보기
git show [태그이름] : 입력한 태그가 가리키는 커밋들을 보여준다.
git tag -d [태그이름] : 태그 지우기

레포지토리 Github에 올리거나 내용 받아오기!, origin(근원, 기원)이란?

Git에서 리모트 레포지토리를 최초로 추가할 때 origin이라는 이름으로 가리키는 것이 관례화되어 있다.
git push -u origin main : 로컬 레포지토리의 내용을 처음으로 리모트 레포지토리에 올릴 때 사용합니다.(tracking 정보 설정을 위함)
git push : 로컬 레포지토리 내용 -> 리모트 레포지토리에 반영한다.
git pull : 리모트 레포지토리 -> 로컬 레포지토리에 반영한다.

// 코드해석
git remote add origin https://github.com/kyuri-dev/Math_Box.git
1) remote는 리모트 레포지토리에 관한 작업을 할 때 쓰는 커맨드
2) add는 새로운 리모트 레포지토리에 등록하겠다는 뜻
3) https주소를 origin으로 등록하겠다는 뜻
// 코드해석
git push -u origin main
현재 로컬 레포지토리에 있는 main 브랜치의 내용(=main 브랜치와 관계된 모든 커밋들) 
origin이라는 리모트 레포지토리로 보낸다는 뜻입니다.

다른 프로젝트 가져오기(git clone)

git clone https://github.com/numpy/numpy.git : 깃허브 프로젝트의 레포지토리를 복제

브랜치(branch, 나뭇가지)란?

Git 에서 하나의 프로젝트를 여러가지 버전으로 관리(하나의 작업에서 여러개의 흐름으로 나눈다)
git branch : 모든 브랜치 조회
git branch [생성 할 브랜치 명] : 브랜치 생성
git checkout -b [생성 할 브랜치 명] : 브랜치 생성과 동시에 생성한 브랜치로 이동
git checkout [이동 할 브랜치 명] : 브랜치 이동
git branch -d [제거 할 브랜치 명] : 브랜치 제거

branch merge(병합하다, 합치다)

git merge [브랜치 명] : 현재 위치의 branch에 입력한 branch를 합친다.
git merge --abort : merge를 하다가 conflict가 발생했을 때 일단은 merge 작업을 취소하고 이전 상태로 돌아감

merge conflict(충돌) 해결 방법

1. conflict가 발생한 파일을 연다.
2. merge의 결과가 되었으면 하는 모습대로 코드를 수정
3. git add. -> git commit -m "커밋 메세지"

git fetch(git pull이랑 비슷하다)

리모트 레포지토리에 있는 브랜치의 내용을 일단 가져와서 살펴본 후에 머지하고 싶을 때 사용

git blame [파일명]

어떤 파일의 특정 코드를 누가 작성했는지 알 수 있는 커맨드
커밋 로그를 보고 git show [커밋ID] 하면 누가 커밋을 했는지 알 수 있다.

과거의 커밋 상태로 돌아가기(restore)

git restore [파일명] : 커밋된 상태로 현재 피알의 수정내역을 되돌린다.
git restore --source [커밋ID] [파일명] : 파일의 특정 커밋ID 시점으로 복구

git reset 후에 다시 돌아가기

git reflog : 헤드가 이때까지 가리켜왔던 커밋들을 기록한 정보

merge와 rebase차이

1. rebase는 새로운 커밋을 만들지 않는다.
2. rebase로 만들어진 커밋 히스토리는 merge로 만들어진 커밋 히스토리보다 좀 더 깔끔하다

git stash(보관하다)

현재 작업 내용을 스택 영역에 저장
git stash : 아직 마무리 하지 않은 작업을 스택에 잠시 저장하는 명령어(나중에 다시 꺼내올 수도 있다.)
git stash list : stash를 했다면 list 명령어를 통해 목록을 볼 수 있다.
git stash apply [stash 이름] : 작업 다시 가져오기
git stash drop [stash 이름] : stash 삭제
git stash pop [stash 이름] : 스택 영역에 저장된 작업 내용을 working directory에 적용하면서 스택에서 삭제

필요한 커밋만 가져오기

git cherry-pick [커밋ID] : 자신이 원하는 작업이 들어있는 커밋들을 가져와서 현재 브랜치에 추가

파일 삭제하기(임시 파일 삭제)

git clean : git 저장소에 포함되지 않은 파일 삭제

  • -n 파일들을 보여주고 삭제할 지 여부 묻기
  • -f 파일 삭제

주의사항🔥 원칙적으로 자신의 리모트 레포지토리에는 자신만 git push 할 수 있지만 다른 사용자도
git push 할 수 있게 해주려면 다른 사용자를 해당 리모트 레포지토리에 collaborator로 지정하면 됩니다.

참고사항🙃 파일 이름이 README일 경우에 내용을 바로 보여준다.(주로 프로젝트에 관한 설명)

git config alias.[별명] [커맨드] : 길이가 긴 커맨드에 별명을 붙여서 이후로 별명으로 해당 커맨드를 실행할 수 있도록 설정할 수 있다.

profile
🏁

1개의 댓글

안녕하세요!
한국대학생IT경영학회(KUSITMS)에서 '코드잇 부트캠프 커뮤니티 서비스 기획'을 주제로 산학협력 프로젝트를 진행하고 있는 코코아 팀의 민혜린이라고 합니다.
(학회 홈페이지: https://www.kusitms.com/ )

서비스 구체화를 위해, 코드잇 부트캠프 수강자/수료자 분들의 경험을 듣고 싶어서 설문을 진행하게 되었는데요...!
약 5분 정도 시간을 내어 설문에 참여해주실 수 있을지 부탁드리고 싶어 댓글을 쓰게 되었습니다...!

설문에 응답해 주신 분들 중 추첨을 통해서도 ☕️메가커피 아메리카노를 증정할 예정이며,
추가 📞전화인터뷰에 응해주신다면 "확정적으로" ☕️메가커피 아메리카노를 보내드릴 예정입니다.

바쁘시겠지만 시간 내어 설문에 참여해주신다면 저희 팀에 정말로 큰 도움이 될 것 같습니다!🥹
감사합니다!

🔗링크🔗 https://forms.gle/WqMvd3XrAgbeCXy78

답글 달기

관련 채용 정보