2014. 11. 11. 04:58ㆍ구_Programming/git
제가 필요한내용을 정리하였고, git에 대한 개념도 적어두었습니다.
필요하신분은 보셔도 상관없지만... 그래도 처음으로 배우시거나 자세히 배우고 싶다하시면 인터넷에서 찾아보시는게 좋습니다.
생활코딩사이트에 가서 보시면 자세히 잘 나와있으니, 거기에서 배우시길 바랍니다. 감사합니다. 꾸벅.
*참조 - svn을 위한 git 개념 가이드
이전부터 쭉 svn을 사용해온지라... git도 쉽게 할 수 있다고 생각하였지만.. 나의 오산이였다.. git != svn 이라는 글을 보았는데.. 말 그대로 초 멘붕.. 일단 사내프로젝트가 git으로 되어있으니 꾸역꾸역 배워야 할듯해서 이렇게 글을 올린다.
svn은 저장소가 서버에 있다. but git은 로컬(내 컴퓨터)에 있다.
git은 로컬에 저장소가 있지만 다른 사람들과 작업을 하고 싶으면 서버에 저장소를 만들고, 작업장소 소스를 -> 로컬에 commit -> 원격에 push 해주면 된다.
svn하고 다르게 중간에 로컬 저장소가따로 있는 형태를 가지고 있다.
*로컬저장소를 사용해서 가능한 이점 1) 속도가빠르다(인터넷 x) 2) 자기가 가지고있는 저장소에 commit을 하기때문에 타 개발자의 소스와 엉킬일이 전혀없다. 3) 인터넷이 끊어져도 상관없다 4) 원격 저장소가 폭파가 되어도 로컬저장소에 모든 소스가 존재 하기 때문에 복구 가능하다.
작업장소와 로컬저장소 사이에 한단계 더 존재 하며 이를 스테이지영역 또는 인덱스라고 한다.
commit할 대상을 스테이지 영역에 추가하여 로컬저장소로 commit한다.
git commit -a(스테이지 추가및 커밋을 동시)
git commit -m
git push (로컬저장소에 저장된 작업물을 원격지 서버에 push)
** 원격지에서 -> 로컬
git fetch (원격저장소에서 내려받기)
git merge (내려받은 데이터를 병합)
git pull (fetch, merge 두기능을 동시에)
*스냅샷(snapshot)
git은 특정버전을 빠르게 만들어 낼 수 있다.
git은 svn하고 다르게 논리적인 디렉토리 구조를 만들지 않으며, 연속된 스냅샷이 순차적으로 이어지다가 가지를 치다가 브랜치가 만들어진다.
*작업자는 branch와 master를 자유롭게 이동할 수 있으며, 이동시 checkout 이라는 용어를 사용한다.
git은 merge시 branch 이름 만으로 자동으로 설정
branch가 동시에 돌아가는 것을 장려( 테스트용, 기능추가및 버그픽스용 )
브랜치 만들기
git branch name
git checkout name
gir checkout -b name branch작성및 checkout
브랜치 지우기
git branch -d name
브랜치 병합
git branch master
git merge branch
브랜치 목록
git branch --no-merged
git branch --merged
** merge시 충돌이 일어 날 수 있으며, svn과 동일하다 <<< head 와 branch명 변경후 add 그리고 commit
rebase로 병합
// 병합취소
git reset --hard HEADER~
git checkout master-task
git rebase master
충돌시 commit이 아니라 git rebase --continue
원격저장소 삭제
git push origin --delete branchName
a 가 b의 내용을 merge 할때
git merge b
* rebase : merge와 동일하게 하나의 branch를 다른 branch와 병합해주는 기능,
- merge는 두 브랜치의 결과를 병합 (변경 내용의 이력이 모두 그래도 남아 있어 복잡해짐 )
fast-forward:빨리 감기 (대상 branch 이후로 생성된 branch를 병합)
- rebase는 한 브랜치의 히스토리를 다른 브랜치에 차례대로 적용 (깔끔한 히스토리를 남기고 싶을때)
tag
git tag name
git tag -a name ( 작업자, 설명을 추가로 붙인다)
git tag -d
git tag
처음 작업시작시 : git init (빈 로컬저장소를 생성)
git remote add <repository> // 로컬저장소와 원격저장소 연결
git pull 데이터 내려받기
원격지에서 내려받기
git clone <repository>
되돌리고 싶을때
git checkout -- //수정하였지만 아직 스테이지에 추가하지 않은 파일을 되돌릴때
git reset HEAD //수정하였지만 스테이지에 추가한 파일을 다시 스테이지에서 제거할때
git fetch origin //수정했고 로컬저장소에 commit한 파일을 되돌릴때
git reset --hard origin/master
커밋을 버리고 특정 버전으로 다시 되돌아가기
soft head위치 변경 index 변경안함 jobtree 변경안합
mixed / 변경 / 변경/ 변경안함
hard / 변경/변경/변경
커밋변경
git commit --amend
main branch
master : 배포가능한 상태만 관리한다.
develop : 개발
feature branch
새로운기능또는 버그수정에 필요할때 develop 브랜치로부터 분기 해당내용은 공유할 필요가 없으므로 remote로 공유하지 않고 완료되면 develop에 병합하고 검증하여 다른 사람에게 공유한다.
release branch
기능또는 버그픽스 외 모든기능이 정상적으로 동작할때 branch이름 앞에 release를 붙임. 완료되면 master에 병합하고 병합한 커밋에 릴리즈 번호를 tag
hotfix branch
배포후 긴급 수정건이 있을경우 master branch를 분기하고 앞에는 hotfix를 붙임
gistory : .git 안에 있는 내용들을 자세히 확인할 수 있는 프로그램.
git add시
git file add시 .git 안에 objects에 해당 obj가 추가되고 index에 변경됨
같은 파일에 파일명만 다르다면 해당 object는 object <-> object 이기 때문에 hash 값이 같다. (reference 개념? )
sha1 online
sha1 hash 알고리즘을 사용하고 파일내용 + 부가코드 을 hash화 하여 앞에 2글자는 폴더명 나머지는 파일명으로 생성
ex) f4271fc24c6b67f09d5b410756a6339e6c30740f -> objects/f2/71fc24c6b67f09d5b410756a6339e6c30740f
그후 index에 objects 명을 추가한다.
git commit
commit 을 한다면
objects 에는 커밋한 내용을 기반으로 한 sha1 hash값의 디렉토리가 생성되고, 이에 이전 정보를 참고하여 만들었다면 parent해시가 있을꺼고, 이는 이전 기점으로 생성된 blob및 tree 그리고 parent 을 가지고 있을 수 있다.
git 새로 추가 되었거나 수정되었을경우 object hash 값과 현재 index에 hash값을 비교하여 변경및 추가 되었다는 부분을 확인할 수 있다.
git stash 변경된정보를 임시 저장 /
git stash 저장
stash list 저장된 내역확인
stash apply 저장된 내역을 다시 복원
stash drop 저장된 내역을 삭제 처리
'구_Programming > git' 카테고리의 다른 글
git LF/CF (0) | 2016.08.22 |
---|