Git과 Github는 같은 것일까? No !
🧐 Git을 이용해 로컬 파일의 변경 사항을 기록하고 관리해줘야 하는 이유는 무엇일까?
" 작업할 때 문제가 생기면 수정하기 전의 상태로 되돌려야 할 필요가 있기 때문이다."
" 팀 단위로 개발할 때, 여러 개발자가 하나의 파일을 개발하면서 누가 언제 어떻게 파일을 수정했는지의 내용을 파악하며 관리할 수 있기 때문에 굉장히 체계적이고 효과적인 협업이 가능하기 때문이다."
👉 Git을 사용하는 이유
1. 인터넷이 연결되지 않아도 개발 가능
2. 수정내용을 commit 단위로 관리, 배포 뿐만 아니라 원하는 시점으로 checkout 가능
3. 소스코드 주고받기 없이 동시작업이 가능해져 생산성 증가
4. 새로운 기능 추가는 Branch로 개발하여 편안한 실험 가능, 성공적으로 개발 완료시 Merge로 반영
🧐 Git
과 Github
의 차이는 무엇일까?
Git 에는 협업을 위한 중앙서버가 필요한데 Github가 이 중앙서버의 역할을 함으로써 개발자는 시간과 비용을 절약할 수 있다.
Git은 '버전 관리 프로그램'
Github는 버전 관리, 소스 코드 공유, 분산 버전 제어 등이 가능한 '원격 저장소'
$ 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 : 수정이 필요할 경우 이 곳에서 수정
오픈소스 프로젝트에서 가장 중요한 License !
내가 만들 때에도, 배포할 때에도 가장 신경 써야 하는 일 중 하나 !
Command | Expain |
---|---|
mkdir | 디렉토리 생성 |
touch | 파일 생성 |
ls | 현재 폴더의 폴더 및 파일 확인 |
pwd | 현재 디렉토리를 절대경로로 출력 print working directory |
cd | Change Directory |
echo | 텍스트 출력 |
bash | 쉘 스크립트 실행 |
sudo | "subsititute user do" 관리자(또는 최고권한) 권한으로 실행한다. |
cp | copy |
mv | move & rename |
clear | cls 콘솔창 지우기 (ios cmd+K) |
cat | concetenate 텍스트 출력 (shell 에 출력) |
rm | remove 파일 및 디렉토리 삭제 |
find | 파일 및 디렉토리 검색 |
curl | Client 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 등의 플래그(옵션) 입력
- 표현식 : 검색할 파일의 이름 혹은 패턴 등 표현식을 입력
Unmodified
현재 버전의 내용이 전혀 바뀐 게 없는 상태
Modified
수정된 상태의 파일이지만 아직 git에 파일을 add하지 않은 상태
Stated
현재 버전에서 삭제/변경된 파일을 다음 커밋 스냅샷으로 이행하기 위해 마킹한 상태
Committed
파일이 로컬 Git 데이터베이스에 저장됨
- working directory : 프로젝트를 checkout하여 개발 작업을 하는 디렉토리
- staging area : git add 한 파일들이 놓인 영역으로 곧 commit할 파일에 대한 정보를 저장
- git directory(repository) : Git이 프로젝트의 메타데이터와 객체 데이터베이스를 저장하는 곳
- Git repo에서 프로젝트를 Checkout 한다. (파일 다운)
- 소스코드 파일을 수정한다. - Modifying
- 수정한 파일을 stage 한다. - Add
- 모든 수정이 완료 되었다면 파일을 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"
: 원격 저장소로 푸쉬되지 않은 마지막 커밋 메세지를 다시 작성
제출할 파일에 어떤 변화가 반영이 되었는지 설명하기 위한 메세지를 말한다.
Prefix
- feat : 새로운 기능의 추가
- fix : 버그 수정
- docs : 문서 수정
- style : 스타일 관련 기능 ( 코드 포맷팅, 세미콜론 누락, 코드 자체의 변경이 없는 경우)
- refactor : 코드 리팩토링
- test : 테스트 코드, 리펙토링 테스트 코드 추가
- chore : 빌드 업무 수정, 패키지 매니저 수정 (ex, .gitignore 같은 경우)