참조 링크

배포/빌드 서버 등에 계속해서 최근 항목만을 가져오는 등의 경우에 사용 할 수 있다.

로컬에 있는 모든 내용을 덮어쓰려는 경우

git fetch --all
git reset --hard origin/master

master 아닌 특정 branch 지정 사용 시

git reset --hard origin/<branch_name>

현재 로컬 커밋을 유지(branch로 만들어 두고 덮어쓰기)

git checkout master
git branch <branch name>
git fetch --all
git reset --hard origin/master
Posted by KENSIN
,

Git branch 이해

버전관리 2015. 2. 21. 00:22

git의 각 브랜치와 head 의 위치 이동에 대해 게임과 비교해 보았다.


git 의 커밋객체는 각 파일에 대한 정보, 그리고 tree 구조를 함께 저장한다. 그리고 이전 커밋이 있을 경우 이전 커밋에 대한 정보도 함께 가지고 있다.

다음 초록색 동그라미는 각각 하나의 커밋객체이다. 게임상 한개의 라운드라고 생각해보자. 그리고 master 라는 플레이어가 있다.


master 플레이어가 현재 3라운드까지 진행한상태이다. (3번의 commit)





그리고 여기서 develop 이라는 플레이어가 들어온다. (develop 브랜치 생성)





이 게임은 자신의 순서에만 행동을 할 수 있다. 현재 턴에 행동가능한 플레이어가 누구인지에 대해 HEAD 라고 표시된다.





develop 플레이어가 자신의 턴에 필요한 행동을 하고 턴을 종료(commit) 한다.





master 플레이어에게 행동권을 넘긴다. (checkout master)




Posted by KENSIN
,

Git --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 의 작업을 다시 해주면 된다.






Posted by KENSIN
,