2012-02-03 5 views
34

git repo에서 임의의 두 파일에 대해 git-merge 알고리즘을 활용하고 싶습니다. 여기 내 작업 디렉토리입니다 :두 개의 개별 파일에서 git merge 알고리즘을 실행하십시오.

folder/ 
    file1 
    file2 

파일 1과 유사한 파일 2,하지만 난 그들이 같은 파일의 다른 버전 인 것처럼 자식이 병합 얼마나보고 싶어요. 다른 말로 표현하면 다음과 같습니다.

이 방법이 있습니까?

답변

43

공통된 조상을 제공하지 않기 때문에 이것은 실제로 이해가되지 않습니다. 그러나 가지고있는 경우 다음을 사용할 수 있습니다.

git merge-file <current-version> <common-ancestor> <other-version> 

결과가 현재 버전 파일에 저장됩니다. 다른 곳에서 사용하려면 다음을 사용하십시오.

git merge-file -p <current> <common> <other> > <dest> 

관련 변경 사항을 고려하기 위해 공통 조상이 필요합니다. 저장소의 히스토리에서 빈 파일이나 그 중 하나의 이전 버전 사본을 제공하여 해킹 할 수 있지만 결과의 품질은 두 조화를 병합하기 때문에 공통 조상을 얼마나 잘 선택 했느냐에 달려 있습니다 , 그 사이에 각각의 새로운 버전. 빈 파일은 두 파일이 매우 같음과 유사하면 (적어도 세 개의 동일한 행이 여러 번 실행되는 경우) 잘 작동합니다. 그없이

, 모든 할 수 있습니다 정말로 차이를 볼 수 있습니다 :

git diff --no-index file1 file2 
+2

파일 중 하나의 사본을 공통 조상으로 사용하는 것은 어떻습니까? –

+1

@CarlG, file2에 file1보다 한 줄 더 많은 내용이 있다고 가정 해 봅시다. 조상으로 file1을 선택하면이 줄이 추가로 해석되어 병합이 파일 2가됩니다. 파일 2를 anchestor로 선택한 경우 해당 줄은 삭제로 해석되고 결과로 file1을 가져옵니다. –

+2

@CarlG 다른 말로하면, A로 시작하고 한면이 B로 변경되고 다른면이 A로 유지되면 병합 된 결과는 분명히 B입니다. – Cascabel

29

을 당신이 뭘 하려는지를 들어 :

touch file3 #empty 
git merge-file file1 file3 file2 

이것은 파일 1의 3 방향 병합을 할 것입니다 file3 (빈 파일)을 file2로합니다.

이렇게하면 file1에 기록됩니다. 물론 원한다면 아래 작업을 수행 할 수 있습니다.

touch file3 
cp file1 merge_of_file1_file2 
git merge-file merge_of_file1_file2 file3 file2 
+1

이 작업이 Git Bash를 통해 작동 함을 확인했습니다. 저는 여기에 하나의 명령으로이를 캡슐화 쓴 bash는 기능입니다 : ''' 기능 병합() { \t 터치 __merge_result__ \t 자식 병합 파일 $ (1) __merge_result__ $ 2 \t RM __merge_result__ } ''' –

관련 문제