Git 과 Github 의 차이?


Git과 Github는 같은 것일까? No !

Git

  • VCS (Version Control System) == SCM (Source Code Management)
    로컬 파일의 변경 사항을 기록하고 다른 작업자들과 실시간으로 작업을 공유할 수 있는 버전 관리 시스템이다.
  • 로컬에서 버전을 관리한다.
  • 소프트웨어 개발 및 소스 코드 관리에 사용된다.

🧐 Git을 이용해 로컬 파일의 변경 사항을 기록하고 관리해줘야 하는 이유는 무엇일까?

" 작업할 때 문제가 생기면 수정하기 전의 상태로 되돌려야 할 필요가 있기 때문이다."
" 팀 단위로 개발할 때, 여러 개발자가 하나의 파일을 개발하면서 누가 언제 어떻게 파일을 수정했는지의 내용을 파악하며 관리할 수 있기 때문에 굉장히 체계적이고 효과적인 협업이 가능하기 때문이다."

👉 Git을 사용하는 이유
1. 인터넷이 연결되지 않아도 개발 가능
2. 수정내용을 commit 단위로 관리, 배포 뿐만 아니라 원하는 시점으로 checkout 가능
3. 소스코드 주고받기 없이 동시작업이 가능해져 생산성 증가
4. 새로운 기능 추가는 Branch로 개발하여 편안한 실험 가능, 성공적으로 개발 완료시 Merge로 반영

Github

  • Git Repository를 위한 웹 기반 호스팅 서비스
  • 클라우드 서버를 사용하여 로컬에서 버전 관리한 소스 코드를 업로드하여 공유할 수 있다.
  • 분산 버전 제어, 엑세스 제어, 소스 코드 관리, 버그 추적, 기능 요청 및 작업 관리

🧐 GitGithub 의 차이는 무엇일까?
Git 에는 협업을 위한 중앙서버가 필요한데 Github가 이 중앙서버의 역할을 함으로써 개발자는 시간과 비용을 절약할 수 있다.

Git은 '버전 관리 프로그램'

Github는 버전 관리, 소스 코드 공유, 분산 버전 제어 등이 가능한 '원격 저장소'

Git Start


Setting

$ git -v : Git 설치 후 현재 버전을 확인
$ git config --global user.name "나의 유저네임"
$ git config --global user.email "나의 메일주소"
$ git config --global core.editor "vim"
$ git config --global core.pager "cat"
$ git config --list : 정상 설정 확인
$ vi ~/.gitconfig : 수정이 필요할 경우 이 곳에서 수정

Repository


Repository 란?

  • 개인 Github 계정에서 생성할 수 있으며, Git으로 관리하는 프로젝트 저장소이다.
  • New Repo 생성 시 옵션

    Public : 오픈 소스(무료)
    Private : 비공개(일부 유료)
    .gitignore : git이 파일을 추적할 때, 어떤 파일이나 폴더 등을 추적하지 않도록 명시하기 위해 작성하며, 해당 문서에 작성된 리스트는 수정사항이 발생해도 git이 무시한다.
    (특정 파일 확장자를 무시하거나 이름에 패턴이 존재하는 경우, 또는 특정 디렉토리 아래의 모든 파일)
    License : 오픈소스 사용 및 배포 시 지켜야 할 의무사항

License


오픈소스 프로젝트에서 가장 중요한 License !
내가 만들 때에도, 배포할 때에도 가장 신경 써야 하는 일 중 하나 !

가장 많이 사용하는 License

  • MIT License
    MIT에서 만든 라이센스,
    모든 행동에 제약이 없으며 저작권자는 소프트웨어와 관련한 책임에서 자유롭다.
  • Apache License 2.0
    Apache 재단이 만든 라이센스,
    특허권 관련 내용이 포함되어 있다.
  • GNU General Public License v3.0
    가장 많이 알려져 있으며, 의무사항이 존재
    *해당 라이센스가 적용된 소스코드 사용시 GPL을 따라야 한다.

Shell


Shell : 운영체제의 커널과 사용자를 이어주는 소프트웨어

사용자가 문자를 입력해 컴퓨터에 명령할 수 있도록 하는 프로그램

  • sh(Bourne Shell) : AT&T Bell 연구소의 Steve Bourne이 작성한 유닉스 쉘
  • csh : 버클리의 Bill Joy가 작성한 유닉스 쉘
  • bash(Bourne Again Shell) : Brian Fox가 작성한 유닉스 쉘
    ( * 다양한 운영체제의 기본 쉘 )
  • zsh : Paul Falstad가 작성한 유닉스 쉘
    ( * sh 확장형 쉘, 현재까지 가장 완벽한 쉘 )

Basic Shell Command

CommandExpain
mkdir디렉토리 생성
touch파일 생성
ls현재 폴더의 폴더 및 파일 확인
pwd현재 디렉토리를 절대경로로 출력 print working directory
cdChange Directory
echo텍스트 출력
bash쉘 스크립트 실행
sudo"subsititute user do" 관리자(또는 최고권한) 권한으로 실행한다.
cpcopy
mvmove & rename
clearcls 콘솔창 지우기 (ios cmd+K)
catconcetenate 텍스트 출력 (shell 에 출력)
rmremove 파일 및 디렉토리 삭제
find파일 및 디렉토리 검색
curlClient URL, 웹 서버에 요청을 보낼 수 있음

ls : 현재 접근한 폴더에 위치한 폴더와 파일 확인 (List Segments)

$ls : 현재 디렉토리에 있는 폴더 및 파일 출력
$ls -a : .으로 시작하는 파일, 폴더를 포함하여 전체 파일 및 폴더 출력
$ls -l : 자세한 내용(권한, 소유자, 파일 크기 등)
$ls -al : ls -a + ls -l 합친 기능
$ls -lh : 용량을 사람이 읽기 쉽도록 GB,MB 등으로 표현

pwd : 현재 폴더 경로를 절대 경로로 보여준다. (Print Working Directory)

$pwd

/Users/doradora523/documents/dev/TIL

cd : 특정 디렉토리로 이동하고 싶을 때 사용 (change directory)

$cd "가고자 하는 디렉토리 경로"
$cd : 사용자 디렉토리로 이동
$cd / : root 디렉토리로 이동
$cd .. : 상위 디렉토리로 이동

echo : Python의 print 처럼 터미널에 텍스트를 출력한다.

$echo "hi" : shell에 "hi" 출력

hi

sudo : 관리자(또는 최고 권한)권한으로 실행하고 싶은 경우 command 앞에 sudo를 붙인다.

$sudo rm -rf /

copy : 파일 또는 디렉토리를 복사한다.

$cp <원본 파일명> <옮기고 싶은 디렉토리명> : 해당 디렉토리로 원본 파일 복사
$cp <원본 파일명> <복사해서 만들고 싶은 파일명> : 해당 파일명으로 사본 파일 생성
$cp <원본 파일명1> <원본 파일명2> <옮기고 싶은 디렉토리명> : 여러개의 파일을 해당 디렉토리로 복사
$cp <원본 디렉토리> -r <옮기고 싶은 디렉토리명> : 원본 디렉토리의 하위 파일까지 모두 해당 디렉토리로 복사

mv : 디렉토리를 원하는 곳으로 옮기거나 파일 이름을 변경한다. (move)

$mv <디렉토리명> <옮기고싶은 디렉토리명> : 디렉토리 이동
$mv <파일명> <바꾸고싶은 파일명> : 파일명 변경

cat : 특정 파일의 내용을 출력한다. (concatenate)

$cat <파일명1> <파일명2> ... : 두 개 이상의 파일을 연달아 출력
$cat -n <파일명1> <파일명2> ... : 출력결과 앞에 행을 붙여 출력
$cat <파일명1> <파일명2> ... > <새로운 파일명> : ">" 앞에 있는 파일 내용을 합쳐 새로운 파일로 생성
$cat <파일명1> <파일명2> ... > <기존 파일명> : ">" 앞에 있는 파일 내용을 합쳐 기존 파일에 덮어씌움
$cat <파일명1> <파일명2> ... >> <기존 파일명> : ">>" 앞에 있는 파일 내용을 합쳐 기존 파일 뒤에 덧붙여줌

rm : 파일 및 디렉토리를 삭제한다. (remove)

$rm <파일명> : 해당 파일 삭제
$rm *.txt : .txt로 끝나는 모든 파일 삭제
$rm * : 전체 파일 삭제
$rm -r <파일명> : 해당 파일 삭제
$rm -rf <디렉토리명> : 해당 디렉토리 강제 삭제 (경고 문구 없음)

find : 파일 또는 디렉토리를 검색할 때 사용한다.

$find [경로] [플래그] [표현식]
$find . -name "*.txt" : 현재 디렉토리(.) 내 '.txt'를 포함한 모든(*)파일 검색

$find / -name "*.txt" : root 디렉토리(/) 내 '.txt'를 포함한 모든(*)파일 검색

$find ~ -name "*.txt" : home 디렉토리(~) 내 '.txt'를 포함한 모든(*)파일 검색

$find . -name "test*" : 파일과 디렉토리 모두 검색
$find . -name "test*" -type f : 파일만 검색
$find . -name "test*" -type d : 디렉토리만 검색

  • 경로 : '.' , '/' , '~' , '~/Desktop' 등 경로를 입력
  • 플래그 : -name 등의 플래그(옵션) 입력
  • 표현식 : 검색할 파일의 이름 혹은 패턴 등 표현식을 입력

3 States of a file


Unmodified 현재 버전의 내용이 전혀 바뀐 게 없는 상태
Modified 수정된 상태의 파일이지만 아직 git에 파일을 add하지 않은 상태
Stated 현재 버전에서 삭제/변경된 파일을 다음 커밋 스냅샷으로 이행하기 위해 마킹한 상태
Committed 파일이 로컬 Git 데이터베이스에 저장됨

파일 관리 방법


  • working directory : 프로젝트를 checkout하여 개발 작업을 하는 디렉토리
  • staging area : git add 한 파일들이 놓인 영역으로 곧 commit할 파일에 대한 정보를 저장
  • git directory(repository) : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
  1. Git repo에서 프로젝트를 Checkout 한다. (파일 다운)
  2. 소스코드 파일을 수정한다. - Modifying
  3. 수정한 파일을 stage 한다. - Add
  4. 모든 수정이 완료 되었다면 파일을 commit 하여 저장한다. -Commit

Commit


$git commit
$git commit -m "feat: Creat a text.txt" : 커밋 메세지를 바로 작성
$git commit -a -m "feat: Creat a text.txt" : 모든 파일을 자동으로 commit(비추천)
$git commit --amend -m "feat: Creat a text.txt" : 원격 저장소로 푸쉬되지 않은 마지막 커밋 메세지를 다시 작성

Commit Message란?

제출할 파일에 어떤 변화가 반영이 되었는지 설명하기 위한 메세지를 말한다.

좋은 커밋메세지 작성 방법

  1. commit은 동작 가능한 최소 단위로 자주 한다.
  2. Prefix를 지정한다.
  3. 제목과 본문은 한 줄 띄워 분리한다.
  4. 제목 행을 50자로 제한하며, 본문은 문장형으로 이 commit의 구성과 의도를 충실히 작성한다.
  5. 제목 행의 첫 글자는 대문자로 시작한다.
  • fix : bug fixed ❌
  • Fix : Bug fixed ⭕
  1. 모두가 이해할 수 있는 log를 작성한다.
  2. 해당 작업단위에 수행 된 모든 파일 변화가 해당 commit에 포함되어야 한다.
  3. 팀에서 정한 commit 규칙을 따른다.

    Prefix

    • feat : 새로운 기능의 추가
    • fix : 버그 수정
    • docs : 문서 수정
    • style : 스타일 관련 기능 ( 코드 포맷팅, 세미콜론 누락, 코드 자체의 변경이 없는 경우)
    • refactor : 코드 리팩토링
    • test : 테스트 코드, 리펙토링 테스트 코드 추가
    • chore : 빌드 업무 수정, 패키지 매니저 수정 (ex, .gitignore 같은 경우)

0개의 댓글