2013-04-05 1 views
2

두 개의 분기에서 다른 구성 파일이 있습니다. 이 구성 파일은 각 분기 내에서 추적되지만 분기를 병합 할 때는 항상 무시되기를 원합니다.병합하는 동안 항상 파일을 무시할 수있는 방법

그래서 두 분기를 병합 한 후에 파일은 병합하기 전과 동일한 방식으로 각 분기에 남아 있습니다.

답변

0

먼저, ours 병합 드라이버가 없으면 만들어야합니다. 이렇게하려면 다음 명령을 실행하십시오.

git config merge.ours.driver true 

이 드라이버를 사용하면 병합 세션 중에 대상 지점의 버전을 선호 할 수 있습니다.

둘째, 지점 AB으로 전화를 걸어 봅시다.

지점 A

, 파일의 디렉토리에, 그것은이 라인 .gitattributes라는 파일을 만듭니다

myconfig.conf merge=ours 

그런 다음 추가하고 .gitattributes 파일을 커밋합니다. AB을 병합 할 때

이 자식은 항상 myconfig.confA의 버전을 유지 할 수 있습니다. AB으로 병합해야하는 경우에도 B 분기에 대해 동일한 단계를 반복하십시오.

+0

'git config --global merge.ours.driver true'를 의미 했습니까? – codiac

+0

이것은 작동하지 않습니다. 충돌이 없다면 여전히 병합됩니다. – codiac

+0

깨끗한 병합을 수행 하시겠습니까?'git checkout -f HEAD'에 의해 모든 변경을 버린 다음 병합을 다시 시도하십시오. – shakurov

0

아래에서 후크를 사용하려면 다음과 같이하십시오.

echo path/to/protected/file config >> .git/info/attributes 
git config --add branch.server1.protect-attr config 

속성 configprotect-attr 브랜치 (branch) 아이템은 이것에 대한 발명이다.

  • .git/hooks/post-merge : foo 또는 당신이 설정로 태그 한 모든 다른 파일에 대한 변경 사항이 표시된 것 지점에 병합받을 때

    #!/bin/sh 
    protect="$(git config --get-all branch."$(git branch|sed -n 's/^\*.//p')".protect-attr)" 
    if test ! -z "$protect"; then 
        git diff --name-only [email protected]{1} HEAD \ 
        | git check-attr --stdin $protect \ 
        | sed -n '/: unspecified$/!s,:.*,,p' \ 
        | sort -u \ 
        | sed -e 's,^,git checkout [email protected]{1} -- ",' -e 's,$," # protected file changed by merge,' 
    fi 
    

및 복귀 명령 나타납니다 지점 설정에 병합 그들을 보호하기 위해 ..

$ git merge wip 
Updating 9906beb..888556e 
Fast-forward 
foo | 1 + 
1 file changed, 1 insertion(+) 
git checkout [email protected]{1} -- "foo" # protected file changed by merge 

|sh -x 파이프 스테이지는 되돌리기를 수행합니다. 심지어는 git commit --amend --no-edit을 수행하면 자동으로 진행됩니다. 이것은 거의 시작 키트입니다. 자세한 내용은 githooks, gitattributesgit config 맨 페이지를 참조하십시오.

더 많은 임베딩 친화적 인 방식으로 git를 다시 구현하는 프로젝트가 있는데, git가 아니라 git이 모두 필요하지 않은 경우 장점이 있습니다. 불행히도 아직 처리가 완료되지 않았으므로 제한된 클라이언트가 아닌 the full git thing을 사용해야합니다.