--distributed-is-the-new-centralized
http://git-scm.com/
- 자신의 로컬에 저장소를 가진다.
- 원격저장소(Remote Repository)인 리모트(Remote) 저장소가 있다.
- 자신의 로컬저장소(Local Repository)에 저장(index | stage) 한다.
- 공용저장소에 커밋(push) 한다.
설정
전체설정(global)의 경우 설정파일은 윈도우즈일 경우 C:\Users\<사용자>\.gitconfig
변경 및 수정은 다음과 같이 한다.
> git config --global user.name "사용자명"
.gitconfig 파일에 아래처럼 기록될 것이다.
[user]
name = 사용자명
한글 파일명이 깨져보이지 않도록 설정
> git config --global core.quotepath off
mac osx 에서 한글때문에 생기는 문제는 다음 설정 추가.
(https://heartgamer.wordpress.com/2015/02/15/맥mac-os에서-git을-사용할-때-한글-파일명-때문에-생기는-문/
, http://git-scm.com/docs/git-config
, http://aero2blog.blogspot.kr/2011/07/macos-x.html
, https://kldp.org/node/132431
, http://gypark.pe.kr/wiki/Git)
> git config --global core.precomposeunicode true
> git config --local core.precomposeunicode true
에디터 지정
> git config --global core.editor "\"EditPlus 전체경로\""
버전관리 폴더에서 버전관리 프로젝트로 초기 생성
> git init
없애려면
> git remove
새로 생성하는게 아니고 이미 원격저장소가 있다면 통째로 복사해 오면 된다.
> git clone <원격저장소URI> [저장할폴더명]
설정에서 무시할 파일들을 지정해 주자. 이건 그냥.. 관용구라 생각하고 어디에 복사해 놓고 그냥 쓰자.
(참고로 d: 드라이브의 project/study 폴더를 생성하여 해당 폴더위치에서 작업중이다.)
> git config --global core.excludesfile /d/project/study/.gitignore
** 파일의 추가 없이 기본 workflow 부터 만들고 싶다면, 빈 커밋을 우선 실행한 후 develop branch 를 생성한다.
> git commit --allow-empty -m 'Initial commit'
> git checkout -b develop
(git config --global alias.emptycommit "commit --allow-empty -m 'Initial commit'" 으로 단축어를 등록할 수 있다.)
파일을 하나 생성하고
> vi test.txt
파일을 추가한 후
> git add .
한개씩 추가하려면
> git add file file file .......
삭제하고 싶다면
> git rm <file>
하드디스크의 물리적 파일은 삭제 하지 않고 git에서만 삭제하고 싶다면.. (실수로 추가한 경우등..)
> git rm --cached <file>
버전 관리 상태를 확인
> git status
커밋이 필요한 이력 변경 내용이 있다면 표시된다. 코멘트를 포함하여 로컬 저장소로 커밋한다.
> git commit -m '주석'
정상출력 및 오류시 결과가 출력된다. 이번엔 리모트 서버에 저장소 목록을 살펴 보자.
> git remote -v
만든게 없다면 안보일거다.
리모트 저장소를 만들어 보자. remote 서버의 https://github.com/xxx/study 위치에 study라는 이름의 저장소를 add 한다.
실제 리모트저장소에 만드는게 아니다. 로컬에서 변수를 만들어 둔거라고 생각하자 (ex : String remote = "https://github.com/xxx/study"; )
(github는 무료 저장소다. 하지만 소스가 공개상태로 된다. 유료로 사용해야만 비공개로 만들수 있다.)
> git remote add study https://github.com/xxx/study.git
다음의 형식이다. name이 꼭 url 과 같아야 할 필요는 없다. 별명이라고 생각하면되겠다.
> git remote add <name> <url>
삭제 하고 싶다면
> git remote remove study
생성한 저장소에 push 하자.
> git push <저장소이름> <브랜치명>
> git push study
or
> git push -u study master
옵션으로 -u 를 넣으면 이후로 <브랜치명>을 지정하지 않아도 된다.(git push 만 해도 된다.) 당연히 최초에는 다 넣어야한다.
username 과 password 를 입력한다.
저장소의 변경이력을 확인해 보자
> git log
GUI 를 이용해서 확인하려면
> gitk
이번에는 다른 사용자가 반영한 내용이 없는지 확인하고 변경내용이 있다면 내려받도록 해보자.
> git pull [<저장소명>] [<브랜치명>]
사용자간 동일파일 변경시 충돌이 발생하면 병합 (merge ) 작업이 필요하다.
원격저장소에 올리다가 거부당하면 우선 원격저장소의 소스를 받아와야(pull) 한다. 해당 명령을 실행하면 자동 merge 작업이 되나, 같은 위치의 내용이 수정될경우 자동merge 가 실패 되었다는 메시지를 확인할수있다.
Automatic merge failed;
해당하는 파일을 편집기로 열어보면 다음의 형식으로 나온다.
<<<<<<< HEAD
written by local
=======
written by remote
>>>>>>> fb51122d60d93319ccb4a69005b07635444a5ff0
======= 를 기준으로 위쪽이 내가 작업한 내용, 아래쪽이 원격에 있던 내용이다. 내용을 적당히 수정하여 저장하고 ADD, COMMIT, PUSH 의 작업을 다시 해주면 된다.