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가 항상존재해야함
touch README.md = > README.md 파일 생성
git status => untracked file에 업데이트됨
git add README.md => 스태깅에 올리는작업
git commit 하면 vim이 열림(아까 vim으로 기본 편집기 설정됨)
첫줄에는 제목(구나 절) - 어떤작업인지 알려줘야함(커밋옮겨다닐때 도움이됨), 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
제목 이후 자세한 내용은 한줄 띄고 세번째줄에서 쓰면됨 - 문장형으로 쓰면됨
ex) created README.md to describe this repocommit 다쓰고 :wq하면 저장하고 나가기, 저장안하고 나가면 커밋이 취소됨
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을 꾸준히 작성하면 포트폴리오로 활용 가능!!! 그러니 열심히 쓰자!