깃허브 가입 및 설치
깃허브는 명령행 인터페이스 프로그램과 깃허브 웹사이트를 통해 형상 관리를 지원한다.
깃허브 사용을 위해 다음 링크 클릭해 가입하고, 깃허브 프로그램을 설치한다.
- github.com 가입
- git 설치 (윈도우 버전 설치)
형상관리는 소프트웨어나 문서의 변경사항을 체계적으로 추적 관리하는 것이다. 깃은 형상관리 플랫폼이다. 다음 그림은 새 소스파일을 생성해 깃(git) 저장소에 저장하고 협업하는 과정을 보여준다. git은 크게 4개 git 관리 파일 DB를 가진다. git은 각 DB들을 갱신하며 파일 형상을 관리한다.
- workspace: 컴퓨터 로컬 작업 폴더
- staging: 컴퓨터 로컬 폴더 내 파일 인덱스 DB
- local repository: 컴퓨터 로컬 폴더 내 파일 저장소
- remote repository: 협업용 원격 깃 저장소
git process(Diego C Martin)
깃 프로세스는 다음과 같다. 이 과정에서 파일이 추가, 변경, 삭제된 이력과 내용은 모두 깃허브에 기록된다. 이를 통해, 파일 내용을 특정 버전으로 되돌리거나(roll back), 다른 사람이 만든 파일과 병합(merge)하는 형상관리가 가능해진다. 앞의 그림은 이 과정을 잘 보여준다.
- 로컬 폴더 생성: 프로젝트 파일이 저장될 폴더를 생성한다.
- 깃 저장소 생성: 온라인 협업 작업을 위한 원격 작업할 깃 저장소를 생성한다.
- 로컬과 깃 저장소 연동: 원격 협업 작업을 위해 깃 저장소 연동 정보를 생성한다.
- 파일 생성 및 깃 저장소 추가(add): 파일 작업 후 해당 파일을 로컬 폴더 인덱스에 추가한다.
- 파일 커밋(commit)/푸시(push): 작업한 파일들을 커밋해 깃 저장소에 추가하고, 실제 파일 내용을 푸시하여 깃 저장소에 저장한다.
- 로컬 폴더 파일 갱신(PULL): 다른 사람들이 푸시한 깃 저장소 최신 버전 파일들을 로컬 폴더에 다운로드 받아 동기화한다.
깃은 형상관리를 위해, 로컬 폴더에 .git 이란 이름의 캐쉬 폴더를 관리한다. push하였을 때, 이 폴더에 있는 파일이 stage에 있는 파일로 취급되어, 리모트 서버에 업로드된다. 같은 이름의 파일이 서로 다르다면, 병합을 진행하는 데, 이 경우, 충돌이 발생된다면, 에러가 나므로, 사용에 주의해야 한다.
주요 사용 명령 예시
주로 다음과 같은 명령을 사용하게 된다.
git status
git add *.*
git commit -m 'update version'
git push origin main
git pull origin main
git은 소스코드를 push할때 리모트에 같은 소스의 수정본이 있다면, merge를 하려 시도하다가 충돌(conflict)이 발생할 수 있다(참고). 만약, 임시로 로컬에 생성되는 파일이나 폴더라면, 다음과 같이 .gitignore 파일을 만들어 merge를 피할 수 있다.
.gitignore
input/
output/
머지를 무조건 취소하려면 다음 명령을 입력한다.
git merge --abort
git reset --merge
git rm -r --cached .
이런 저런 시도를 해도 깃이 꼬일 경우, 작업한 파일만 백업해 놓은 후, git clone, git init로 초기화해서 다시 시작하는 것이 편하다.
git clone
git init
깃허브 로긴 후 개발 프로젝트 폴더에 해당하는 저장소(repository)를 생성한다.
- Repository 생성. README 생성 옵션은 체크하지 않음
- 로컬에 개발 폴더 생성
- 로컬 개발 폴더 내에 source.py 파일 생성 및 내용 입력
- git init 로 로컬 폴더 git 설정
- git add source.py 로 파일 인덱스를 추가함
- git commit -m "source.py" 로 파일 정보를 github에 저장
- git status 로 상태 확인
- 저장소 주소를 다음과 같이 이름과 연결. 주소와 이름은 적절히 수정할 것.
git remote add remoteName https://github.com/username/repositoryName
- git push remoteName master 로 현재 커밋 파일을 저장소에 저장
git push 시 아이디 및 암호 입력 화면
git push 화면
다시 source.py를 수정하하면, 다음 과정을 다시 거쳐야 한다.- git add source.py
- git commit -m "source.py"
만약, 로컬 작업 저장소 파일들을 git 저장소 파일들로 덮어쓸려면 다음 명령을 수행한다.
- git fetch --all
- git reset --hard origin/master
브랜치는 일정 기간 동안만 유지되는 개발 시 사용한다. 브랜치 사용법은 다음과 같다.
- git branch 로 브랜치 목록 보기
- git branch sub1 브랜치 만들기
- git checkout sub1 로컬 저장소의 브랜치 전환
- git branch
- git add source.py
- git commit -m "source.py"
- git push remoteName sub1
- git checkout sub1
- git pull
브랜치 병합은 다음과 같다.
- git checkout master 로컬 저장소 브랜치 전환
- git merge sub1 병합
- git push remoteName master 저장
브랜치 삭제는 다음과 같다.
- git branch -d sub1
- git branch
Rollback 하기
현재 파일을 수정하다, 깃 저장소에 최신 파일로 되돌리고 싶을 때 다음 명령어를 사용한다.
- git reset --hard {commit번호} : 특정 커밋으로 되돌리고, 이후 버전은 히스토리에서 삭제됨
- git reverse {commit번호}: 특정 커밋으로 되돌리고, 이후 버전 이력은 히스토리에 남아 있음
- git checkout . : 로컬 작업 폴더에서 수정한 모든 파일을 git add 이전의 현재 버전으로 되돌림
오픈소스 기여하기
특정 오픈소스에 기여하는 방법은 다음과 같다.
1. 해당 오픈소스 github의 fork 메뉴를 클릭한다.
2. fork 된 프로젝트는 나의 github 저장소에 복사된다.
3. 해당 github를 clone한다.
4. 로컬에서 작업한 후, add, commit, push 한다.
5. fork 된 github에 PR (pull request) 메뉴를 클릭하여, 원 개발자가 fork된 프로젝트의 수정 소스를 병합하도록 요청한다. 이때 수정 내용을 자세히 기술해 놓는다.
다음은 이를 보여주는 순서도이다.
상세한 메뉴얼은 다음을 참고한다.
깃허브 에러 대처 방법
git 진행 시 에러는 다음과 같이 해결한다.
- Updates were rejected because the remote contains work that you do not have locally: 저장소 생성 시 README를 체크하지 말거나, git pull 로 해결. 예) git pull origin master
- Updates were rejected because the tip of your current branch is behind: git pull 할 때 --allow-unrelated-histories 옵션을 추가.
git 에러 화면 예시
깃 주요 명령어 요약
앞에서 사용한 깃 주요 명령어는 다음과 같다.
git init : git 생성
git clone git_URL : 깃 저장소에서 파일들 다운로드
git checkout branch_name : 브랜치 선택
git checkout -t remote_path/branch_name : 원격 브랜치 선택
git branch branch_name : 브랜치 생성
git branch -r : 원격 브랜치 목록보기
git branch -a : 로컬 브랜치 목록보기
git branch -m branch_name change_branch_name : 브랜치 이름 바꾸기
git branch -d branch_name : 브랜치 삭제
git push remote_name - delete branch_name : 원격 브랜치 삭제하기
git add file_path : 수정한 코드 선택
git commit -m “commit_description” : 선택한 코드 설명 입력 ( git commit -m “내용”)
git push romote_name branch_name : add 후 commit 코드 git server에 전송 (git push origin master)
git pull : git서버에서 파일 다운로드 후 merge
git fetch : git서버에서 최신 파일 다운로드
git reset --hard HEAD^ : commit한 이전 파일 취소
git reset --merge : merge 취소
git reset --hard HEAD && git pull : git 파일 강제 모두 다운로드
git config --global user.name “user_name ” : git 계정 Name 변경
git config --global user.email “user_email” : git 계정 Mail 변경
레퍼런스
댓글 없음:
댓글 쓰기