2013-03-05 3 views
46

리모컨 beanstalk 서버에 myrepo이라는 리포가 있습니다.Git - 병합 중에 파일 무시

로컬 컴퓨터에 복제했습니다. 추가 분기 두 개를 만들었습니다 : stagingdev. 이 브랜치를 원격으로 밀어 넣었습니다. 이제

:

local     remote     server 
-------------------------------------------------------- 
master ==> Pushes to `master` ==> deployed to `prod` 
staging ==> Pushes to `staging` ==> deployed to `staging` 
dev  ==> Pushes to `dev`  ==> deployed to `dev` 

나는 각 지점에서 다른 config.xml라는 파일이 있습니다.

이 파일은 병합 중에 만 무시하고 싶습니다. 그러나 내가 체크 아웃하거나 repo 지점에서 커미트 할 때 이것을 포함하기를 원합니다.

내가 원하는 이유는 특정 분기를 가져오고 (체크 아웃) 배치하고 해당 서버에 배포하는 배포 스크립트가 있기 때문입니다. 따라서 특정 브랜치의 config.xml 파일을 배포 할 때 위에서 설명한대로 특정 서버로 이동해야합니다.

나는 .gitignore가 작동하지 않을 것으로 생각합니다. 다른 옵션은 무엇입니까? 무시 된 파일은 체크 아웃 및 커밋의 일부 여야하며 중요합니다. 병합 중에 만 무시해야합니다.

감사합니다.

+0

는 자식 풀은 자식에 대한 속기는 FETCH_HEAD를 병합 자식 다음에 인출입니다. 그래서 당신은 서로 충돌한다고 말합니다. – zzk

+0

글쎄, 나는 그 계산대를 말할 것이다. 당기지 마라. 질문을 명확하게 업데이트하겠습니다. –

+0

[Git : 병합 중 일부 파일 무시 (일부 파일을 하나의 브랜치로 제한)] (http://stackoverflow.com/questions/3868491/git-ignore-some-files-during-a-merge- keep-some-files-one-branch) – givanse

답변

26

나는 attributes을 찾았습니다. 그것을 시도. 지금까지 일하고있어. 아직 모든 시나리오를 확인하지 않았습니다. 그러나 그것은 해결책이되어야합니다.

Merge Strategies - Git attributes

+1

링크가 깨졌습니다 ... –

+2

하지만 이걸 찾았습니다 [git-scm.com/book/ch7-2.html#Merge-Strategies](http://git-scm.com/book/ch7- 2.html # Merge-Strategies) –

+0

새 링크 : https://git-scm.com/docs/merge-strategies – Liosan

3

git merge --no-commit을 사용하여 시작할 수 있습니다. 즉, config.xml 또는 다른 파일을 언 스테이징하여 병합 한 다음 병합하여 편집 할 수 있습니다. 후크를 사용하여 추가 작업을 자동화하는 것이 좋을지 모르지만 적어도 한 번은 수동으로 수행 할 가치가 있다고 생각합니다.

+0

'git attributes '는 어떤 스트레이트 솔루션을 제공합니까? 나는 이것을 이해할 수 없다. http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Merge-Strategies –

2

당신은 서버에 적절한 config.xml 파일을 업로드 할 post commit hook를 사용하여 다음 저장소 밖으로 config.xml을 유지하기 위해 .gitignore을 사용하고 있었다.

+1

그 종류의 해킹을 알고 있습니다. 나는 깨끗한 해결책을 찾고있다. git'속성 '은 어떻습니까? 그것이 어떻게 작동하는지 어떤 생각? 나는 이것을 이해할 수 없다. http://git-scm.com/book/en/Customizing-Git-Git-Attributes#Merge-Strategies –

+1

나는 이것들에 대해 들어 보지 못했고, merge = ours 속성을 적용하려하고있다. – tlehman

+1

힘내는 속성은 굉장합니다! git에게 텍스트가 아닌 파일을 비교하는 방법을 알 수 있으므로 pdf2text를 사용하여 PDF를 비교할 수 있습니다! – tlehman

42

나는 '--no-커밋'옵션으로 명령을 병합 한 후 명시 적으로 준비된 파일을 제거하고 파일의 변경 사항을 무시하고 자식을 사용하여이 문제를 극복했다. 예 : 나는 다음과 같이 내가 진행 MYFILE.TXT 어떤 변경 사항을 무시하고 싶은 말은 : 당신은 건너 뛸 파일의 목록이있는 경우 루프에 대한 2 & 3 문을 넣을 수 있습니다

git merge --no-commit <merge-branch> 
git reset HEAD myfile.txt 
git checkout -- myfile.txt 
git commit -m "merged <merge-branch>" 

.

+0

빨리 감기 전략에서 병합이 발생할 때 파일을 덮어 쓰지 않으려면 "--no-ff"를 추가하십시오. –

1

여기서 git-update-index - 작업 트리의 파일 내용을 색인에 등록합니다.

git update-index --assume-unchanged <PATH_OF_THE_FILE> 

예 : - 기본 모드에서

git update-index --assume-unchanged somelocation/pom.xml

+0

푸시 할 때 좋지만 당겨서 파일을 덮어 쓸 때 불평을합니다. – Rolf

+0

.gitignore 파일에 파일 항목을 추가하려고 시도 했습니까? @ 롤프 –