• git 2017.03.30

* 버전관리 시스템

: 의미있는 변화들

: 기능의 개선이나 버그 수정 등

: 이러한 변화를 관리하는 것


GIT 기본 명령어 

git init : 깃 초기화하기

git init 폴더명 :  해당 폴더명을 가지는 git저장소 생성

git status : 버전관리 중인 파일 상태 확인

git add 파일 : 해당파일을 버전관리 시작해라(처음 만든파일이나 수정한 파일)
    : 선택적으로 업로드할 수 있어 버전관리에 용이함.


* 처음 git을 시작할 떄에는 설정을 해야함

git config --global user.name 사용자이름

git config --global user.email 사용자이메일


git commit : 최상단에 현재 버전의 메시지를 담자

git commit -a : 전체 add해줌 (한번도 add하지 않은 파일은 안됨)

git commit -m : 바로 메세지를 쓸수있음

git log : 버전이 업로드 됬는지 확인

git log -p : 수정사항을 보여줌

git log [COMMIT_CODE] : 해당 내역을 보여줌

git diff [COMMIT_CODE]..[COMMIT_CODE] : 두 수정사항의 차이를 보여줌

git diff 현재 수정사항과 이전 버전과의 차이를 보여준다.


git reset [COMMIT_CODE] --hard : 해당 버전으로 돌아가고 그 이후에 버전은 삭제됨(사실 남아있는데 눈에 보이지 않음)

git revert :


Branch

: 작업이 필요에 의해 분기되는 것 (고객용, 내부용)

: 기존의 것이 필요없어지고 다른 방향으로 나갈때

: Test용과 Main 용으로 분리할 때


git branch : 현재 branch명을 출력

git branch 이름 : 이름에 해당하는 새로운 branch 생성 (생성당시 master의 log를 따름)

git checkout 이름 : 해당 branch로 이동

git log --branches --decorate : 모든 branch의 수정사항을 출력

git log --branches --decorate -- graph : 분기사항들을 보여줌

git log --branches --decorate -- graph --oneline : 한줄로 보여줌

git log [BRANCH이름]..[BRANCH이름] : 둘의 차이점을 보여줌

git log [BRANCH이름]..[BRANCH이름] -p : 차이점의 상세를 보여줌

git diff [BRANCH이름]..[BRANCH이름] : 둘의 차이점을 보여줌 (working directory와 index를 비교)


git merge 브런치이름 : 브런치의 내용을 현재 브런치로 가져옴(현재 설정된 브런치로 가져와지는것)


stash

: 감추다, 숨겨두다

: Branch를 가지고 작업할 때, 작업이 끝나지 않았을 때 다른 브런치에서 작업을 해야하는 순간 변경사항이 겹칠수있음.

: 현재의 작업을 숨겨둔다


git stash : 작업중인 변경사항들이 저장됨 (한번은 add됐던 파일만 저장(tracked되는 파일))

git stash apply : 불러움 (리스트에 있는 이상 여러번 가능)

git stash list : stash 리스트를 불러온다 (위에 있을수록 최신)

git stash drop : 최신 리스트 하나를 제거한다.

git stash pop : apply와 drop을 같이 실행한다


복구

: git reflog 를 사용해 복구할수있는 주소를 알 수 있다.

: git reset [COMMIT_CODE] --hard 을 통해 복구

: 아래는 각 옵션에 따른 취소 범위를 나타낸다

: working directory => 현재 작업중인내용

: index => add한 내용

: repository => commit한 내용

: 따라서 보통 hard를 많이 사용함


Merge&Conflict

: Branch를 Merge할때 같은 부분을 수정했을 경우 Conflict가 나타난다.

: kdiff3과 같은 병합 툴을 가지고 병합을 전문적으로 수행할 수 있다.(따로 설치해야함)

: git config --global merge.tool kdiff3  :  병합툴 설정

: git mergetool    :    툴확인


: git의 병합기법(3 way merge)

: Base에서 나, 다른사람이 Branch되어있을 때 나,다른사람만 고려하면 2 way merge방법이다.

: base, 나, 다른사람에서 Base를 기준으로 병합하게됨.

: 3 way merge가 더 높은 정확성을 지니게 된다.


원격저장소

: 소스를 백업한다.

: 다른 사람들과 협업을 한다.


git init --bare :     작업을 할 수 없고 저장소의 기능만 있는 저장소 생성

git remote :    원격저장소 출력

git remote add 원격저장소이름 URL:     원격저장소와 연결

git remote remove 저장소이름 경로 :     원격저장소와 연결을 끊음

git config --global push.default simple :     git의 push방식을 simple방식으로 변경

git push 저장소이름 브런치이름 :    원격저장소 해당 브런치에 push한다

git push --set-upstream 저장소이름 브런치이름 : 현재 브런치에서 push할 경우 자동으로 해당 저장소의 브런치로 push한다.


Github

: 원격저장소를 자신의 서버가 아니라 클라우드 서비스로 제공하는 곳 Github를 제외하고 다른 곳들도 있음

: 관리가 더 편함.

: 원격저장소의 필수가 아니라 서비스형 저장소일 뿐이다.

: 우리가 만들 수도 있다.

: Fork라는 기능을 사용하면 다른 사용자의 프로젝트를 그대로 내 폴더로 가져온다.

: Fork는 개발자의 평가 지표일정도로 멋있는 지수이다.


Http 방식

git clone URL 디렉토리 :    해당 URL의 소스코드를 새로운 디렉토리를 만들어 다운로드 한다.(.은 현대 디렉토리를 나타낸다.)

git remote add 저장소이름 URL : 보통 저장소이름은 origin으로 하는 것이 관례이다.

git push -u origin master : origin의 master 브런치에 업로드경로를 연결해둔다.

git push : 위의 설정이후 시작하면 자동으로 업로드 해준다.


* 동기화방법 : push 이후의 내용은 수정을 하기 힘들다

git pull : 원격저장소의 내용을 로컬저장소로 가져온다.

git push : 원격저장소로 내보낸다.


SSH 방식

1. ssh-keygen : 비밀번호를 만드는 명령어

: 기계적으로 굉장히 복잡하기 때문에 보안을 뚫기 힘들다

: 만들어지는 부산물

- id_rsa : private key // 클라이언트가 가지고 있어야함, 노출되면안됨

- id_rsa.pub : public key // 서버가 가지고 있어야함


2. SSH key를 Github에 설정하는 곳이 있는데 넣는다.

3. 

- git clone SSHURL : 접속하기

- 수정후 push할 때 성공이 된다면, 잘 된 것이다.


My Server

: ssh통신을 사용할 것이다.

1. 서버 컴퓨터에 git init --bare 방식으로 repository를 생성한다

2. 클라이언트에서 다음과 같은 예를 참고하여 한다.

git remote add origin ssh://git@13.124.42.13/home/git/git/remote/  <== 끝에 / 붙이기 : 연결할 저장소를 추가한다.

git remote -v : 추가가 잘 됐는지 확인한다.

git push --set-upstream origin master : push할 시에 자동으로 연결설정을 해둔다.


: 자주 push와 pull을 하여 서로 동기화를 하도록 한다.


자동로그인

: SSH 방식을 사용할 것이다

: 클라이언트에서 다음과 같이 실행한다.

ssh-keygen -t rsa : 키만들기

: 서버 쪽 컴퓨터에 1번 혹은 2번 방법을 실행한다.(둘중하나)

1. id_rsa.pub 파일을 ~/.ssh/authorized_keys 파일을 만들어 내용을 복사한다.

2. ssh-copy-id git@13.124.42.13    : 자동으로 복사해넘겨준다.


Tag

: 버전에 대한 태그를 달아주는 것

: Versioning 관련 문서

git tag : 태그 목록


light wegith tag : 가볍게 만드는 태그

git tag 버전명(ex 1.0.0) [Branch 혹은 CommitCode 혹은 Default는 현재Branch]

git checkout 태그명  :     해당 태그로 돌아갈 수 있음


annotated tag : 상세 태그

ex)  git tag -a 1.1.0 -m "bug fix"


git push --tags : 태그를 서버에 올릴때 사용

git tag -d 버전명 : 태그를 삭제


Rebase

: Merge와 비슷한 것

: 아직 몰라도 괜찮은 것같다. 나중에 찾아보자



Git을 이용한 프로젝트 흐름











<생활코딩 "지옥에서 온 Git" 필기내용입니다.>

+ Recent posts