두 개의 분기에서 다른 구성 파일이 있습니다. 이 구성 파일은 각 분기 내에서 추적되지만 분기를 병합 할 때는 항상 무시되기를 원합니다.병합하는 동안 항상 파일을 무시할 수있는 방법
그래서 두 분기를 병합 한 후에 파일은 병합하기 전과 동일한 방식으로 각 분기에 남아 있습니다.
두 개의 분기에서 다른 구성 파일이 있습니다. 이 구성 파일은 각 분기 내에서 추적되지만 분기를 병합 할 때는 항상 무시되기를 원합니다.병합하는 동안 항상 파일을 무시할 수있는 방법
그래서 두 분기를 병합 한 후에 파일은 병합하기 전과 동일한 방식으로 각 분기에 남아 있습니다.
먼저, ours
병합 드라이버가 없으면 만들어야합니다. 이렇게하려면 다음 명령을 실행하십시오.
git config merge.ours.driver true
이 드라이버를 사용하면 병합 세션 중에 대상 지점의 버전을 선호 할 수 있습니다.
둘째, 지점 A
과 B
으로 전화를 걸어 봅시다.
A
에
, 파일의 디렉토리에, 그것은이 라인 .gitattributes
라는 파일을 만듭니다
myconfig.conf merge=ours
그런 다음 추가하고 .gitattributes
파일을 커밋합니다. A
에 B
을 병합 할 때
이 자식은 항상 myconfig.conf
의 A
의 버전을 유지 할 수 있습니다. A
을 B
으로 병합해야하는 경우에도 B
분기에 대해 동일한 단계를 반복하십시오.
아래에서 후크를 사용하려면 다음과 같이하십시오.
echo path/to/protected/file config >> .git/info/attributes
git config --add branch.server1.protect-attr config
속성 config
과 protect-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, gitattributes 및 git config 맨 페이지를 참조하십시오.
더 많은 임베딩 친화적 인 방식으로 git를 다시 구현하는 프로젝트가 있는데, git가 아니라 git이 모두 필요하지 않은 경우 장점이 있습니다. 불행히도 아직 처리가 완료되지 않았으므로 제한된 클라이언트가 아닌 the full git thing을 사용해야합니다.
'git config --global merge.ours.driver true'를 의미 했습니까? – codiac
이것은 작동하지 않습니다. 충돌이 없다면 여전히 병합됩니다. – codiac
깨끗한 병합을 수행 하시겠습니까?'git checkout -f HEAD'에 의해 모든 변경을 버린 다음 병합을 다시 시도하십시오. – shakurov