#Merge란

로컬저장소에 패치로 받아온 커밋기록(변경된 소스코드)과 자신의 소스코드를 합치는 작업

 

 

fast-forward : 변경내용이 있는 브랜치(작업단위)가 더 최신 내용을 담고 있고,

                  병합하려는 브랜치의 내용을 전부 포함하고 있는 경우

 

ff란 fast-forward의 약자이다

 

$ git merge 브랜치명 : 일반적인 병합

$ git merge --no-ff 브랜치명 : 현재 브랜치와 병합대상의 관계가 Fast-forward던 아니던 무조건 병합

$ git merge --ff-only 브랜치명 : 현재 브랜치와 병합대상의 관계가 무조건 Fast-forward일 때만 병합

$ git merge --squash 브랜치명 : 현재 브랜치의 병합대상과 차이나는 커밋을 하나로 병합

 

 

 

 

#이클립스에서의 Merge

 

Merge옵션

  • Commit : 병합 커밋(리모트로 부터 패치를 해서 변경사항이 있을 경우 내용을 하나로 통합함)
  • No Commit : 병합 커밋을 준비하지만 커밋은 하지 않음
  • Squash : Merge할 브랜치의 커밋을 하나로 합친뒤 타겟 브랜치에 커밋하는 방식

Fast forward option

  • If a fast-forward, only update the branch pointer : fast-forward일 경우 브랜치 포인터 업데이트
  • If a fast-forward, create a merge commit : fast-forward일 경우 병합 커밋을 생성
  • If not a fast-forward, fail : fast-forward가 아닐경우 병합하지 않음

fast-forward : 변경내용이 있는 브랜치(작업단위)가 더 최신 내용을 담고 있고,

                  병합하려는 브랜치의 내용을 전부 포함하고 있는 경우

'Tools > GitHub' 카테고리의 다른 글

Git 설치와 사용법(SourceTree)  (0) 2021.01.15
Git 설치와 사용법(Git Bash)  (0) 2021.01.15
[GitHub] Merge 와 Rebase의 차이  (0) 2020.10.26
[GitHub] 개념정리  (0) 2020.10.14
[GitHub] 명령어 모음  (0) 2020.10.04

깃허브에서는 소스코드를 합칠때 2가지 방식이 존재하는데

Marge와 Rebase이다

 

둘다 소스코드를 병합한다는 점은 동일하나

 

Marge는 각각의 개발자들의 브랜치(작업단위)별 커밋 기록을 유지하면서 병합

Rebase는 각각의 개발자들의 브랜치(작업단위를)별 커밋 기록은 하나로 병합

 

Merge의 장점

  • 브랜치(작업단위)별 커밋기록을 유지함(장점이자 단점)
  • 경합같은 소스코드 충돌이 일어났을때 복구가 간단함
  • 크게 신경 쓸필요 없음

Merge의 단점

  • 개발자가 많아지면 커밋기록이 중구난방해서 히스토리 관리가 어지러움

 

Rebase의 장점

  • 커밋기록을 하나로 합치기 때문에 히스토리 관리가 간편함

Rebase의 단점

  • 코드 충돌이나 경합이 일어 났을  때 복잡해짐 

 

현업에서는 기본적으로 Merge를 사용한다

경합이나 소스코드 충돌났을때는 작업한 소스코드를 대피시키고 리모트에서 소스코드를 최신으로 갱신해서

대피시킨 코드를 중복이 있나 비교해서추가 하는방법도 있다

 

'Tools > GitHub' 카테고리의 다른 글

Git 설치와 사용법(SourceTree)  (0) 2021.01.15
Git 설치와 사용법(Git Bash)  (0) 2021.01.15
[GitHub] Merge의 종류  (0) 2020.10.26
[GitHub] 개념정리  (0) 2020.10.14
[GitHub] 명령어 모음  (0) 2020.10.04

backlog.com/git-tutorial/kr/intro/intro1_1.html

 

누구나 쉽게 이해할 수 있는 Git 입문~버전 관리를 완벽하게 이용해보자~ | Backlog

누구나 쉽게 알 수 있는 Git에 입문하신 것을 환영합니다. Git을 사용해 버전 관리를 할 수 있도록 함께 공부해봅시다!

backlog.com

#개념

깃의 구조는 

 

작업환경-준비영역-로컬저장소(로컬 리포지토리)-리모트 저장소(리모트 리포지토리, Origin)

이렇게 4단계로 구분된다

 

작업환경 : 현재 작성중인 코드(준비영역으로 이동 전)

준비영역 : Add를 한 파일(로컬 저장소로 이동 전)

로컬저장소 : Commit을 한 파일(리모트 저장소로 이동 전)

리모트저장소 : Push한 파일(메인 서버)

 

 

Git은 준비영역부터 파일을 인식한다

 

이렇게 단계로 구분되는 이유는 여러사람과의 작업간에 소스코드 충돌을 막기 위함이다

또한 여러사람이 동시에 네트워크에 액세스 할경우 속도가 느려지지만

깃의 경우 리모트 저장소에 푸시 할 경우 외엔 네트워크를 쓸일이 없기때문에 작업속도가 빠르다

 

 

#용어 설명

Branch(브랜치) : 개인 작업 단위

Origin(오리진) : 리모트 저장소 이름(주소), 리모트 리포지토리(Repository) 라고도 부른다

Master(마스터) : 브랜치(작업단위) 중 가장 중심이 되는 브랜치

Head(헤드) :  자신이 현재 작업중인 브런치


Commit(커밋) : 생성, 수정,삭제 된 소스코드를 준비영역에서 로컬 저장소에 보냄
Push(푸시) : 커밋기록(커밋으로 로컬 저장소에 보낸 소스코드)을 로컬 저장소에서 리모트로 보냄
Fetch(패치) : 리모트 저장소에서 최신의 커밋기록(다른 브랜체에서 작성, 수정한 소스코드)를 로컬 저장소로 반영

PULL(풀) : 푸시 + 패치를 동시에 진행
Merge(병합) : 로컬 저장소에서 패치로 갱신한 커밋기록(소스코드)을 자신의 브랜치와 합침,

                   브랜치(작업단위)별 커밋 기록은 합쳐지지 않음

Reset(리셋) : 마지막으로 Merge(병합) 했던 시점으로 복원한다, 시점을 지정해서 복원할 수도 있다

Rebase(리베이스) : 로컬 저장소에서 패치로 갱신한 브랜치를 자신의 브랜치와 합침

                         브랜치(작업단위)별 커밋 기록도 합쳐짐

 

 

#사용법

이클립스에서 작성한 소스코드가 존재하는 곳이 #작업환경이며

Add를 하고 #준비영역에 추가

Commit을 하면 새롭게 작성,수정한 코드를 묶어서 #로컬 저장소로 전송된다

첫번째 커밋은 커밋1

두번째 커밋을 커밋2

이렇게  로컬 저장소에 보관되며

 

그리고 푸시를 하면 커밋 기록(작성, 수정한 소스코드)이 #리모트 저장소로 전송된다

풀을 하면 커밋+푸시 작업이 동시에 진행된다

 

자신이 작성한 코드의 커밋은 작성자 본인의 이름으로 보내진다

 

패치는 자신의 브랜치버전을 리모트 저장소와 비교해 가장 최근 커밋된 수정,반영된 커밋 기록(소스코드)을

나의 로컬저장소로 가져오는 작업이며

Merge를 하면 내 작업환경에 있는 자신의 브랜치(자신이 작업하던 소스코드)와 병합되어 작업환경에 저장된다

 

이때 같은 경로에 같은 파일이 존재하게 되면 병합이 실패한다

SI에서 작업과정은

작업표에서 자신이 개발할 설계도를 선택하고 

패치를 해서 리모트 저장소에서 최신의 소스코드를 갱신해 자신이 작업할 클래스와 메서드가 

중복되는지 확인하고 없다면 Merge(병합)을 해서 자신의 브랜치(소스코드)를 합친다

 

그후 작업을 진행

 

작업이 완료되면 다시한번 패치를 해서 나와 중복되는 작업이 있는지 확인한다

(패치를 했는데 실패하거나 같은 메서드가 보이면 충돌이 일어나게 된다, 이것을 경합(충돌)이라고 함)

이럴 경우 프로젝트 매니저에서 문의해 둘중 하나를 지운다

 

#경합(충돌)이 나면 깃 사용에 문제가 생기는데

마지막으로 자신이 작업한 로컬 저장소 기록으로  리셋을 하면 복구된다

 

문제가 없다면 커밋+푸시 or Pull을 해서  로컬 저장소로 소스코드를 보내는 것으로 

작업은 종료된다

 

 

 

 

'Tools > GitHub' 카테고리의 다른 글

Git 설치와 사용법(SourceTree)  (0) 2021.01.15
Git 설치와 사용법(Git Bash)  (0) 2021.01.15
[GitHub] Merge의 종류  (0) 2020.10.26
[GitHub] Merge 와 Rebase의 차이  (0) 2020.10.26
[GitHub] 명령어 모음  (0) 2020.10.04

sakura-editor.github.io/

 

Sakura Editor

Japanese text editor for MS Windows

sakura-editor.github.io

 

#키매크로

실행하면 지정해논 동작을 1회 실행함

사쿠라에디터의 키매크로 단축키는 Ctrl + Shift + L 이다

 

현업에서는 QUERY를 먼저 테스트한 후 클래스에 넣고 JUnit으로 테스트를 하는데

다음과 같은 코드를 매번 아래처럼 바꿀려고 하면 상당히 번거롭다

컬럼이 많은경우 수백개를 넘어가는데, 이런경우 복사 붙여넣기만 수백번 해야한다

SELECT
    BOARDNUM
    BOARDID
    BOARDTITLE
    BOARDCONTENT
    BOARDDATE
FROM
	TABLE
    
    


buf.append(" SELECT ");
buf.append(" 	BOARDNUM ");
buf.append(" 	BOARDID ");
buf.append(" 	BOARDTITLE ");
buf.append(" 	BOARDCONTENT ");
buf.append(" 	BOARDDATE ");
buf.append(" FROM ");
buf.append(" 	TABLE ");

 

Tool > Start Recording Macro를 실행

 

 

첫번째 행을 감쌀 문구를 적고 

방향키 ->를 눌러 다음행으로 넘긴 후 저장

 

감쌀 단어는 Shift + End키로 문단 끝으로 가는 단축키로 이동해야한다(Ctrl + ->도 가능)

Ctrl+->를 이용하면 한단어씩 건너 뛸수 있고

Ctrl + Shift + ->를 이용하면 한단어씩 선택 할 수 있다

 

buf.append(" SELECT 
여기서 Shift + End를 눌러 커서를 SELECT 끝으로 이동후 "); 입력

 

저장을 했다면 Tool > Load the macro로  저장한 매크로는 불러온다

 

불러온 후 Ctrl + Shift + L을 누르면 

지정해 놓은 문장이 실행된다

 

예시의 경우 buf.append(" ");라는 문장이 QUERY를 감싸도록 했다

 

'Tools > SAKURA Editor' 카테고리의 다른 글

[SAKURA Editor] GREP 폴더 검색  (0) 2020.11.30

#git init

초기화

 

#git status

지정된 저장소의 현재상태를 나타냄

 

#git add 파일명

 

#git commit -m "커밋 메세지"

로컬 저장소의 최종단계인 Head에 파일을 등록

 

#git remote add origin 주소(https://exam/exam...)

현재 로컬 저장소를 깃허브에 있는 특정 리포지토리에 연결

 

#git remote -v

연결이 잘 되었는지 확인

현재 로컬 저장소와 연결된 저장소의 url이 반환 됨

 

#git push 리모트 저장소명 push할 브랜치명

로컬 저장소에 있는 파일을 원격 저장소로 보냄

 

#git fork

리포지토리를 GitHub계정으로 복사

 

#git pull

마지막으로 수정한 파일을 원격 저장소에서 로컬로 가져옴

다른 변경사항을 갱신

 

#git clone

원격 저장소의 사본을 로컬에 생성

 

#git branch "새로운 브랜치 명"

새로운 브랜치를 생성

 

#git checkout "전환할 브랜치 명"

브랜치를 전환

 

#git merge "브랜치 명"

브랜치를 병합함

'Tools > GitHub' 카테고리의 다른 글

Git 설치와 사용법(SourceTree)  (0) 2021.01.15
Git 설치와 사용법(Git Bash)  (0) 2021.01.15
[GitHub] Merge의 종류  (0) 2020.10.26
[GitHub] Merge 와 Rebase의 차이  (0) 2020.10.26
[GitHub] 개념정리  (0) 2020.10.14

+ Recent posts