Shell과 GitHub Project 생성

January·2022년 4월 1일
0

Frontend

목록 보기
1/31

Shell에 bash와 zsh를 비교하자면

bash(Bourne-again shell)는 많은 Unix 유사 운영 체제의 기본 쉘이다.
GNU(GNU is Not Unix) 프로젝트는 자유로운 소프트웨어를 희망해서 Bourne Shell(SH Shell)을 기반으로 만들었다.

Zsh는 Bash가 등장한 직후 한 대학생이 만들었다. 이 쉘과 함께 커뮤니티 기반 온라인 플랫폼인 Oh My Zsh는 플로그인 및 zsh용 테마와 같은 주요 확장 기능을 제공한다. 2019년 mac os Catalina는 bash를 대체하는 기본 쉘로 zsh를 채택 한다고 발표했다.

Shell commands

운영체제의 커널과 사용자를 이어주기 위한 소프트웨어에 명령을 내리는 명령어

ls (list)
현재 위치한 디렉토리에 있는 내용(디렉토리, 파일) 리스트를 출력하는 명령어

ls         "파일과 디렉터리 나열하기"
ls -a      "경로안의 모든 파일을 나열한다(숨김파일도 포함)"
ls -l      "파일들을 나열할때 자세히 출력한다"
ls -R      "위치한 디렉토리 하부 디렉토리의 파일까지 모두 출력한다"
ls -t      "출력 결과를 파일이 수정된 시간을 기준으로 정렬한다"

pwd (print working directory)
현재 작업중인 디렉토리를 확인하는 명령어

현재 작업 중인 디렉토리의 절대경로를 출력
/document/dev/바탕화면

mkdir (make directory)
디렉토리(폴더)를 생성할 때 사용하는 명령어

mkdir [생성 할 디렉토리]                 "디렉토리 생성"
mkdir [생성 할 디렉토리/[생성 할 디렉토리]   "생성 할 디렉토리 안에 디렉토리 생성"

cd (change directory)
디렉토리를 이동하는 명령어

cd [디렉토리이름](/)   "디렉토리 경로로 이동"
cd .     "현재 디렉토리로 이동(의미없다)"
cd ..    "상위 디렉토리로 이동"
cd /     "최상위 디렉토리로 이동"
cd -     "이전 디렉토리로 이동"

touch
파일 생성과 날짜와 시간을 변경하는 명령어

touch [생성 할 파일]           "파일 생성"
touch -m [파일이름]            "서버시간으로 변경"
touch -t [날짜,시간] [파일이름]   "날짜,시간 변경"

cat (concatenate)
파일 내용을 출력하는 명령어

cat [파일이름]

mv (move)
파일이나 디렉토리(폴더)를 이동, 이름 변경이 가능한 명령어

mv [파일 또는 디렉토리] [목적지 디렉토리](/)     "이동"
mv [이름 변경할 파일 또는 디렉토리] [변경될 이름]  "이름 변경"

cp (copy)
파일이나 디렉토리(폴더)를 복사하는 명령어

cp [파일이나 디렉토리] [목적지]      "다른 디렉토리 안에 복사"
cp [파일이나 디렉토리] [이름변경]    "이름 변경해서 복사"
cp -r [목적지]                  "디렉토리 전체를 다른 디렉토리 안에 복사"

rm (remove)
파일이나 디렉토리를 삭제 시킬때 사용하는 명령어

rm [파일이나 디렉토리]      "대상 삭제"
rm -r [파일이나 디렉토리]   "디렉토리 내부의 모든 내용 삭제"
rm -f [파일이나 디렉토리]   "강제로 삭제하고 대상이 없는 경우에는 메시지 출력하지 않는다"
rm -d                   "비어있는 디렉토리들만 제거"
rm -i                   "매번 삭제할때마다 사용자에게 삭제할것인지 묻는다"

vim 편집기

vi [파일명]    "편집기 진입"

vim 명령어
- i 인서트 모드
- v 비쥬얼 모드
- esc 노멀모드
- shift + ; 커맨드 모드
   - :q! 저장하지 않고 나가다
   - :w 저장하다
   - :wq 저장하고 나가다

Github Project

Git은 버전을 관리하기 위한 도구 (분산형 버전 관리 시스템)를 이용해서 로컬 저장소에서 원격 저장소로 혹은 반대로 제공을 받으며 소스코드가 변경된 이력을 쉽게 확인하고 특정 시점에 저장된 버전으로 되돌아 갈 수 있다.

Github는 원격 저장소이다.
로컬 저장소에서는 add-commit-push 3단계가 있다.

로컬 저장소에서 일어나는 일
  a. Working directory: 새로 작업했거나 수정한 파일
  b. Staging area: 새로 작업했거나 수정한 파일을 구분되도록 분류
  c. Localrepo: Local repository에 저장

3단계를 거쳐서 원격저장소에 업로드가 된다
  a -> b = add
  b -> c = commit
  c -> 원격저장소 = push

Github에서 Repository를 만들다.

- README.md: 해당 파일은 소스코드에 앞서 어떠한 목적으로 개발이 되었는지, 코드의 개요, 구조도 등을 처음 사람들에게 노출함으로써 해당 프로젝트에 대해 설명한다.

- License: 오픈소스 프로젝트에서 가장 중요하다. 내가 만들 때에도, 배포할 때에도 신경써야 한다.

대표적인 License
  - MIT: 모든 행동에 제약이 없고 저작궍는 소프트웨어와 고나련한 책임에서 자유롭다.
  - Apashe: Apashe 재단이 만든 라이센스로, 특허권 관련 내용이 포합되어 있다.
  - GNU General Publlic License: 가장 많이 알려져있으며, 의무사항(해당 라이센스가 적용된 소스코드 사용시 GPL을 따라야함)이 존재한다.

Git 로컬 저장소 만들기

$ git config --global user.name "깃유저네임"
$ git config --global --unset user.name "깃유저네임" (유저네임을 수정할때)
$ git config --global user.email "깃허브이메일"
$ git config --global core.editor "vim"
$ git config --global core.pager "cat"

로컬에서 작업하고 원격 저장소로 업로드 하기 (예시)

$ git clone https://github.com/username/TIL.git
$ cd TIL
$ vi README.md
$ git status
$ git add README.md
$ git status
$ git commit
$ git status
$ git remote
$ git push origin main
$ git status

Github의 Repository 클론 주소를 터미널로 가져온다.

깃허브 인터페이스는 사용자가 주로 사용하는 UI에는 초록색으로 표시를 한다.
code 버튼을 누르면 clone 주소를 볼 수 있다.

$ git clone [클론주소]

주기적으로 git 상태 체크

수정된 파일은: 표기가 안되거나 빨강색, 초록색으로 나타난다.

  • 빨강은 add하지 않은 상태
  • 초록은 add까지 한 상태
  • 표기 안됨은 commit까지 한 상태
$ git status

새로 작업하거나 수정한 파일을 분류한다

Working drectory에서 변경사항만 스테이지에 분류한다.

$ git add [파일이름]

로컬 저장소에 업로드

Commit의 제목과 내용을 적는다.
첫 줄에 제목을, 두줄 띄우고 내용을 적는다.
제목은 Prefix를 적용해서 읽어서 쉽게 구분이 되도록 하다.

  • feat: (new feature for the user, not a new feature for build script)
  • fix: (bug fix for the user, not a fix to a build script)
  • docs: (changes to the documentation)
  • style: (formatting, missing semi colons, etc; no production code change)
  • refactor: (refactoring production code, eg. renaming a variable)
  • test: (adding missing tests, refactoring tests; no production code change)
  • chore: (updating grunt tasks etc; no production code change)

ex) 문서작업은 docs: Add Pasta Recipe

$ git commit

원격 저장소에 업로드

로그인이 떴을 때 깃허브 레포지토리 세팅에서 비밀번호 토큰을 발급받아서 로그인을 한다.

$ git push [remote name] [branchname]

Github Repository의 주소 확인

$ git remote       "주소 별명 확인"
$ git remote -v    "주소(URL) 확인"

기록이 정확히 남는 이름변경

git없이 mv만으로 이름변경을 하면 기존파일이 삭제되고 새로운 파일로 새이름을 갖고 생성된다. 기존 파일이 없어지다 보니 파일 위치를 바꾼 시기를 판단하기 어렵다.

$ git mv [기존이름] [바꿀이름]

워킹디렉토리에서 작업 되돌리기

바로 이전의 저장으로 가지 않고 마지막 커밋으로 되돌아간다.
커밋을 자주해야하는 이유이기도 하다.

$ git restore [파일이름]
$ git restore .

Unstaging

git add를 하면 스테이지에 올라가는걸 다시 내려준다.
HEAD = 최신의 상태 (내가 마지막에 했던 액션)

$ git reset HEAD [내릴파일이름]

이미 작성한 commit 수정

직전 커밋의 내용이 다시 열린다.

$ git commit --amend

commit 지우기

commit을 지우면 중간 히스토리가 비어서 상황이 곤란해질 수 있다.
(1,2,3,4 이 있는데 2를 지우면)
되돌리면 2,3을 지워서 1부터 다시 하도록 작업한다.
--no-commit은 하나의 커밋이 취소될때 마다 열리는 것을 건너뛰고 원하는 commit까지 간다.

$ git revert --no-commit HEAD~3..

0개의 댓글