문제: 개발 프로그램의 관리를 위하여 github을 사용하자. (pycharm, github기준)
작성일: 17.12.06
업데이트: 23.02.01
Git: 파일 버전관리 시스템
- 장점: 이전 상태로 돌리거나, 문제의 원인을 추적하고, 파일이 분실되어도 복구가능.
- 단점: 익숙해지기까지 시간이 걸리고 귀찮음.
참고하면 좋은 사이트:
- http://learnbranch.urigit.com/ 애니메이션 기반으로 설명 잘해줌.
- backlogtool.com 개념이해
- 작업폴더: 현재 프로젝트가 저장된 위치(실제 코드가 존재하는 작업공간)
- localRepository: 현재 PC의 저장소(작업 폴더와는 다른 별도의 저장공간)
- remoteRepository: NAS/GitHub/BitBucket 처럼 백업본을 저장할 원격 서버의 저장소
(참고: GitHub는 student email이 있으면 private저장소가 무료, BitBucket은 그냥 private저장소가 무료)
사용 예
상황1 - 이미 있는 프로젝트(PC) --> github에 올리기
<참고: https://recall2300.github.io/2016-12-26/pycharmxgit/command-line/>
o 1. local git repository를 만들기
o 2. Remote Repos. 만들기 및 연결
- Git (VCS가 Git으로 바뀜) -> Github -> Share Project on GitHub
(X) 만약 처
ctrl+K로 commit changes 다이얼로그를 열고, 우측 Git/Author에 name<email>을 입력한 후, commit을 하면 됨.
- 내가 로컬에서 작성한 코드와 원격에 저장된 코드와 차이가 있을 수 있기에(아마도 로컬에서 무언가 업데이트가 되었거나 협업코드라면 원격이 업데이트 상태일 수 있음)
- 이를 동일하게 유지시켜주자.
- VCS -> commit: 현재 로컬코드를 로컬 저장소로 업데이트.
-- 팝업창에서 업데이트가 불필요한 폴더는 빼주고, 바뀐 코드는 확인 후, Commit.
-- commit을 통해 여러 코드를 업데이트할 경우, message는 하나만 올라감.
- VCS -> git -> Push: 로컬 저장소 내용을 원격 저장소로 업데이트.
- push: commit을 통한 변경정보를 remote repos에 업데이트한다. (localRep -> remoteRep)
상황2 - github에 있는 내용 가져와서 시작하기
이후 코딩 시작전에 할 일.
- branch: commit에 대한 참조에 naming을 한 것. branch간 이동은 git checkout [브랜치명]으로 함.
- checkout [브랜치명]: branch간 이동.
- merge [브랜치명1] [브랜치명2]: 브랜치1을 2쪽으로 통합함.
- rebase [브랜치명]: 현재 작업을 브랜치명쪽으로 옮김.
- reset [브랜치명/HEAD~#]: 이전 커밋으로 돌리되 마치 안한 것 처럼 기록을 지움.
- revert [브랜치명/HEAD~#]: 이전 커밋으로 돌리되 새로 커밋을 만들고 undo를 기록함.
Git repository cloud service
gitHub - 공개는 무료, 비공개는 유료(대학교 이메일 ID로 등록시 모두 무료)
bitbucket - 비공개도 무료
gitlab -
(참고: https://stackshare.io/stackups/gitbucket-vs-github-vs-gitlab)
Client tools
git kraken (linux/windows, free for non-commercial use)
Atlassian SourceTree (windows/mac, free)
Pycharm VCS - http://ngee.tistory.com/818 사용법
Error 모음
- CRLF will be replaced by LF in ~
-- windows코드와 linux코드를 혼용해서 사용하는 경우 발생.
--
액션-시작
- git init: git 저장소 생성.
- git clone username@host:URL: 원격 저장소에서 복제.
=> local repo에 working directory, index(stage), HEAD가 준비됨.
=> working directory는 실제 파일
=> index(stage)는 변경내용을 임시로 기록.
=> HEAD는 최종 확정본(변경내용을 최종 기록 by commit).
액션-파일 추가/변경
- git add <파일>: 파일을 git관리대상(index)에 추가.
- git commit -m "msg": 변경사항을 local repo.에 업데이트함(HEAD에 반영).
- git push origin <branch-name>: 변경사항을 origin이라는 remote repo.에 <branch-name>이라는 branch를 만들어서 업데이트함.
=> 이때 원격에는 원 코드 origin과 변경된 코드 branch가 같이 존재함.
=> 만약 동일한 branch에 update시, 서버와 내용이 다르다면(서버에서 clone한 시간 이후 서버 변경 내용이 존재시) push 취소 후, merge 시도 함.
- git remote add origin <remote address>: origin이 clone한 것이 아니라면 주소를 추가해야함.
액션-branch갈아타기
- git checkout -b <branch-name>: 가지 만들고 갈아타기
- git checkout -d <branch-name>: 가지 지우기
- git checkout master: 가지 갈아타기
액션-파일 갱신/병합
- git pull: fetch(remote repo.->local repo.로 받아옮) + merge(코드 병합)
- remote: remote repo.를 관리(추가, 삭제)
액션-되돌리기
- git checkout -- <파일이름>: 변경내용 되돌리기
액션-특정 디렉토리를 git관리에서 제외
- pycharm의 좌측 프로젝트 트리구조에서 해당 폴더 우클릭 -> git -> add to .gitignore -> git/info/exclude
즉. 작업 전 pull, 작업 후 working하는 것 확인 후, commit/push를 하는 것이 바람직함.