Git/Github 기초

최우영 강사님 강좌

리눅스,쉘 소개

  • 1984년 리차드 스톨먼이 기존의 UNiX에 부족한 자유성 확보를 위해 GNU 프로젝트 돌입
  • 그러나 GNU프로젝트에는 어플리케이션과 하드웨어를 연결해주는 커널이 없었음
  • 그때, 리누스 토발즈라는 대학생이 Linux라는 커널(혹은 운영체제)를 개발함
  • 이 운영체제와 사용자를 연결해주는 shell이 개발되었고 우리는 그중에 bash를 쓴다
  • shell은 CLI, command-line interface로 명령어를 기반으로 작동한다

쉘을 배워봅시다

쉘의 기본 명령어

명렁어를 통해 다양한 기능을 수행할 수 있으며 명령어 + 부가명령어로 해당기능을 더 다양하게 사용할 수 있음

TAB을 통해 자동완성 기능을 사용할 수 있음

  • $ : 사용자 입력 가능하다는표시

  • ls : 리스트 세그먼트의 약자, 폴더안에 내용물을 보여줌

  • cd : change directory, cd 폴더명 하여 폴더를 이동가능/ cd .. 상위폴더이동

  • mkdir 폴더명 : 폴더생성

  • touch 파일명 : 텍스트기반으로 된 파일을 만들 때 사용 ex) touch README.txt

  • mv 파일명 폴더명 : 해당 폴더로 파일이동

  • cp 파일명 위치 : 해당 위치로 파일 복사

  • mv(move) 기존이름 바꿀이름 : 파일명 바꾸기

  • rm(remove) 파일명 : 파일삭제

  • '*', 별아니고 에스터리스크, 와일드카드 역할을 함

  • rm *.java : 파일명 상관없이 .java는 다지워라

  • rm bin/ - 실패 왜? 디렉토리라서 -> 디렉토리만 지울수 없고 디렉토리에 있는 모든파일 지우고 폴더도 지워야 함

  • rm -r bin/ : 폴더 안에 있는 모든 내용지우고 폴더도 지워라

  • cat 파일명 : 파일에 내용물을 출력해줌

  • chmod : 파일 권한을 설정해줌

VIM

Vim은 shell에서 사용할 수 있는 text editor의 일종

우리는 Vim을 commit message작성에 사용할 예정

Vim 기본 기능

  • vi or viim 파일명 : vim 실행하여 파일 편집 ex) vim readme.txt

  • 노멀모드 : 기본모드로 모든 알바벳키는 명령어로 돌아옴

  • 인서트모드 : 노멀모드에서 i를 누루면 텍스트를 입력할 수 있는 인서트 모드로 전환됨

  • 비주얼모드 : 노멀모드에서 v키를 이용해 전환해서 방향키를 움직이면 블록지정 할 수 있음

  • 커맨드모드 : 노멀모드에서 :입력하면 커맨드 입력가능 w는 저장 q는 나가기(wq동시 입력 가능)

  • 복사 붙여넣기 : 블록설정 이후 y키 누루면 복사 이동한다음에 P하면 붙여넣기

  • Undo (ctrl + z) : 되돌리기

  • 삭제 : dd하면 삭제이고 그 상태에서 P하면 붙여넣기 됨(삭제랑 잘라내기랑 같은 기능 공유)

git

  • git은 vcs(Version Control System)으로 소스코드의 버전관리를 도와준다
  • 리누스 토발즈가 Subversion을 쓰다 화가나서 2주만에 만들었다는 git

git 특징

  • 분산형 저장소, 비선형적 개발(수천개의 브랜치 )가능
  • 특정한 시점으로 돌아가기가 가능
  • Branch통해서 같은 프로그램의 실험체를 따로 개발하다가 성공적이면 merge하여 본프로그램에 반영할 수 있음
  • 누가 작성한 소스 코드인지 확인 가능
    -타임스태프가 찍히기때문에 개발자의 생산성 체크가능 (개발자는 양날의검이래)

git 작동원리

사용자의 workspace의 존재하는 소스코드를 add 파일명을 통하여 index로 옮김(스태킹)
=> commit을 통해 index에 있는 소스코드에 레이블을하고 타임스탬프를 찍어서 local repository로 옮김
=> push를 통해 local repositary에 있는 소스코드를 remote repository로 옮김

  • 위 과정에서 등장하는 index와 local repository는 개념적 존재로 workspace에 .git폴더에 파일안에서 기록됨

git 명령어

-초기 설정 (한번만 해주면 됨)

$ git config --global user.name "{github username}" // github 유저네임 등록

$ git config --global user.email "{github email address}" // github 유저메일 등록

$ git config --global core.editor "vim" // git commit 작성시 vim 실행하여 commit message 편집

$ git config --global core.pager "cat" // cat 명령어를 통해

$ git config --list // 설정사항 확인

  • git --version : git 버전확인
  • git status : 현재
  • git init : 깃 초기화, workspace폴더에 .git폴더에 생김 => 이때 부터 해당 폴더에 모든 파일은 깃이 다 라인바이라인 체크

git README.MD 실습

README.md = 프로젝트가 어떤프로젝트인지 알려주는파일 그래서 프로젝트 루트에는 readme.md가 항상존재해야함

  1. touch README.md = > README.md 파일 생성

  2. git status => untracked file에 업데이트됨

  3. git add README.md => 스태깅에 올리는작업

  4. git commit 하면 vim이 열림(아까 vim으로 기본 편집기 설정됨)

  5. 첫줄에는 제목(구나 절) - 어떤작업인지 알려줘야함(커밋옮겨다닐때 도움이됨), PreFix를 활용
    ex)docs: Create README.md

Prefix, 한눈에 커밋내용을 알아보기 위한 약자
feat: features
docs: documentations
conf: configurations
test: test
fix: bug-fix
refactor: refactoring
ci: Continuous Integration
build: Build
perf: Performance

  1. 제목 이후 자세한 내용은 한줄 띄고 세번째줄에서 쓰면됨 - 문장형으로 쓰면됨
    ex) created README.md to describe this repo

  2. commit 다쓰고 :wq하면 저장하고 나가기, 저장안하고 나가면 커밋이 취소됨

  3. git remote add origin 레포주소 하면 내 래포 주소와 workspace 연결됨

git clone

  • workspace => remote repository 방향으로 초기화를 할 수 있지만 반대방향으로 가능하다
  • 먼저 github에서 repository 생성후 git clone 명령어로 해당 repository 내용 가져올 수 있음
  • 그후 git init 명령어를 통해 해당 repository와 연결가능

git을 잘 활용하는 방법

  • git을 commit 할때는 동작하는 최소단위로 올리는게 좋음 예를 들어 클래스에 메소드 5개가 있으면 메소드 1개 단위로 커밋을 하는게 좋음
    => 프로젝트 트래킹이 수월해짐
  • Documents/dev 폴더를 만들어서 프로젝트 관리하면 컴퓨터 교체시에도 편리함
  • dev폴더 내에 폴더 하나하나들이 프로젝트 단위이고 각 폴더의 독립성을 지켜주는게 프로젝트의 독립성을 관리하는 역할(중요!!)

Github에서 repository 생성시 체크하는 것들

  • public / private : repository 공개하는 것 설정 / 예전에는 private이 유료였지만 현재는 무료

라이센스

내 프로젝트가 어떠한 종류의 소스인지 알려주는 기능

  • mit license - mit에서 만든 오픈소스로 가장 개방된 오픈소스임을 나타냄 / 제일 쓰기편함
  • Apche License2.0 - 오픈소스이지만 누가 만든지는 명시해줘야함(법률적 구속x)
  • GNU General Public License - 영리적인활동가능하지만 소스코드를 오픈해야함. (오픈소스로 풀고 팔아라)
    = > 제일 조심해야할 오픈소스, 지금은 일단 걸르면됨

.gitignore

  • Github에 올라올 때 불필요하거나 보호되어야 할 파일 유형을 설정하여 repository 관리에 도움
  • .txt, credential/* , *.pem 와 같은 명령어 활용 가능
  • gitignore.io 사이트 통해서 keyword입력하면 일반적인 giignore 세팅 알려줌
  • 위의 내용을 gitignore.io에 붙여 넣으면 세팅가능 -> repository만들때마다 해줘야함

git is not equal to github

-Git과 Github가 다른 것을 인식해야함
-Git이 소스코드의 버전관리를 위한 도구이고 Github는 저장소 서비스
-Git이 다른 버전관리 도구로 치환될 수 있듯이 Github도 그렇다
ex) gitlab 은 사설서버로 보안이 굉장히 중요한코드

그외의 gitHub 기능

  • 다른사람의 코드도 git clone해올 수 있음, 또한 소스코드가 업데이트 되면 다음에 git pull만하면 바로 업데이트 할 수 있음

  • UserName.github.io로 repository를 개설하면 홈페이지 처럼 활용할 수 있는 공간이있음
    => index.html을 만들어주어서 홈이될 페이지를 설정해줄 수 있음

  • 이 공간을 static site Genertor의 기능을 활용하여 개인 블로그 처럼 이용 가능

Hexo를 활용한 블로그 생성

Hexo는 md형식으로 작성한 md파일을 html파일로 변환시켜 바로 github repository에 올릴 수 있게 도와주는 도구

설정 및 작성 법

블로그를 통해 TIL을 꾸준히 작성하면 포트폴리오로 활용 가능!!! 그러니 열심히 쓰자!

+ Recent posts