상세 컨텐츠

본문 제목

통합 Branch로의 Merge에 실패합니다.

Katalon studio

by 아롱둥실 2020. 11. 19. 23:04

본문

지난 포스팅에서 협업을 위해 Github를 연동하고 각자의 Branch를 생성해보았습니다.

일반적인 통합작업의 프로세스인

Local에서 작업 > 개인 Branch로 업로드 > Master Branch로 Merge (Master에서 Confirm)

과정 중 개인 Branch > Master Branch로 Merge 하는 방법과 이 과정에서 Merge가 실패했을 경우 해결 방안에 대해 다뤄보겠습니다.

2020/11/16 - [Katalon studio] - 협업을 위한 Katalon studio와 Github 연동하기

 

협업을 위한 Katalon studio와 Github 연동하기

이번 포스팅에서는 공동 작업을 위한 Github 연동에 대해 다뤄보겠습니다. - Github 연동이 필요한 이유 구성원들이 각자 파트를 맡아 자동화 스크립트를 작성할 경우, 각자의 Branch에서 작업한 후 Ma

qaest.tistory.com

지난 포스팅에서 진행한대로 Git에 개인 Branch 생성 후 연동된 상태에서 

작업내역을 개인 Branch에 Push한 후 Github에 접속해봅니다.

Pull requests 탭에서는 각 브랜치간 Merge 작업을 할 수 있습니다.

만약 Test라는 이름의 개인 Branch를 Master에 Merge하려면 base에는 Master를 선택하고 compare에는 Test를 선택합니다.

서로 병합작업에 이슈가 없다면 브랜치 선택박스 오른쪽에 녹색으로 Able to merge. 문구가 나옵니다.

여기서 Create pull request를 클릭하고 적당한 메시지를 입력한 후 Request합니다.

Master로 request가 도착했네요. 

병합에 이슈가 없고 자동으로 Merge가 가능하다고 하네요.

여기서 Master가 Confirm merge를 클릭해주면 개인 Branch의 작업내용이 Master로 Merge됩니다.

그런데 협업 인원이 많은수록 이렇게 한번에 Merge에 성공할 확률은 낮아집니다..

그 이유는 아래 도식을 보시면 이해가 쉬울 것 같습니다.

출처 : Katalon docs (https://docs.katalon.com/katalon-studio/docs/git_conflict_resolve.html#why-do-we-have-git-conflicts)

Tom이 Master를 clone하여 작업하고 Push한 시점에 Emma가 fetch를 시도하면 이미 Tom의 변경사항이 적용된 상태이기때문에 코드 버전이 맞지 않아 충돌이 발생합니다. 

이에 대한 예방으로

1. 항상 Commit 하기 전에 Pull 작업을 하라.

2. 작업 파트에 있어 가급적 독립적 영역을 유지하라

3. 자주 Commit 하라

이런 방법을 강조하지만.. 사실상 위의 주의사항을 지키더라도 실제 Merge과정에서의 Conflict를 완벽하게 피할 수는 없었습니다. (실무에서자주 발생했습니다..)

이쯤에서, 고장난 집을 고쳐줄 가벼운 코드 에디터 하나를 소개하도록 하겠습니다.

https://visualstudio.microsoft.com/ko/

저는 Visual Studio Code를 설치했습니다.

Visual Studio Code를 설치 후, 작업중인 프로젝트 폴더를 읽어왔습니다.

.project 파일에 오류가 있다고 하네요. 열어보겠습니다.

<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<<<<<<< HEAD // 이 줄을 삭제해줍니다
	<name>%Users%*****%git%cddbag%cddbag.prj</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
	<filteredResources>
		<filter>
			<id>1605511906984</id>
			<name></name>
			<type>10</type>
			<matcher>
				<id>org.eclipse.core.resources.regexFilterMatcher</id>
				<arguments>.*\.svn$</arguments>
			</matcher>
		</filter>
		<filter>
			<id>1605511906998</id>
			<name></name>
			<type>6</type>
			<matcher>
				<id>org.eclipse.core.resources.regexFilterMatcher</id>
				<arguments>(.*\.svn-base$)|(.*\.png$)|(.*\.log$)|(.*\.xlsx$)|(.*\.xls$)|(.*\.csv$)|(.*\.txt$)</arguments>
			</matcher>
		</filter>
		<filter>
			<id>1605688058671</id>
			<name></name>
			<type>10</type>
			<matcher>
				<id>org.eclipse.core.resources.regexFilterMatcher</id>
				<arguments>.*\.svn$</arguments>
			</matcher>
		</filter>
		<filter>
			<id>1605688058677</id>
=======
	<name>%Users%******%git%cddbag_Test%cddbag_Test.prj</name>
	<comment></comment>
	<projects>
	</projects>
	<buildSpec>
		<buildCommand>
			<name>org.eclipse.jdt.core.javabuilder</name>
			<arguments>
			</arguments>
		</buildCommand>
	</buildSpec>
	<natures>
		<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
		<nature>org.eclipse.jdt.core.javanature</nature>
	</natures>
	<filteredResources>
		<filter>
			<id>1605511996311</id>
			<name></name>
			<type>10</type>
			<matcher>
				<id>org.eclipse.core.resources.regexFilterMatcher</id>
				<arguments>.*\.svn$</arguments>
			</matcher>
		</filter>
		<filter>
			<id>1605511996317</id>
>>>>>>> branch 'cddbag' of https://github.com/******.git // 이 줄도 삭제해줍니다
			<name></name>
			<type>6</type>
			<matcher>
				<id>org.eclipse.core.resources.regexFilterMatcher</id>
				<arguments>(.*\.svn-base$)|(.*\.png$)|(.*\.log$)|(.*\.xlsx$)|(.*\.xls$)|(.*\.csv$)|(.*\.txt$)</arguments>
			</matcher>
		</filter>
	</filteredResources>
</projectDescription>

HEAD 영역이 설정되어 충돌이 발생합니다.

"<<<<<" 와 ">>>>>" 가 붙은 줄을 삭제한 후 저장합니다.

다시 Push -> Merge과정을 거치니 충돌 없이 Master Branch에 성공적으로 Merge 되었습니다.

.project외에 다른파일에서 충돌이 발생하더라도 동일하게 HEAD 영역을 삭제해 주면 정상적으로 Merge 되니 참고해두시면 좋습니다.

 

다음 포스팅에서는 실전 자동화 스크립트 작성 예제를 다뤄보도록 하겠습니다.

관련글 더보기