2016-10-29 5 views
2

여기에 대한 질문이 있습니다. 오랜 시간 동안 당황스럽지 만 보편적 인 해결책을 찾지 못했습니다.git을 사용한 지점 별 구성 파일 유지

는 두 가지 자식 지점, productiondev가 말할 수 있습니다; 각각은 일부 작업 (예 : 자격 증명, 빌드 경로, 테스트/배포 스크립트 전환 등)에 대해 자체 구성 가능한 매개 변수를 사용합니다. 같은 시간 구현 스크립트 & 코드는 두 가지 분기에 공통입니다.

이제는 문제가 발생합니다. - git 저장소 내에서 지사 별 구성을 필요한 방식으로 유지 관리하는 방법입니다. 거기 일반적인 솔루션 중 하나는 심볼릭 링크와 특정 지점의 콘크리트를 무시하고,

$ cat .gitignore | grep conf 
/concrete.conf 
$ ls -l *.conf 
lrwxrwxrwx 1 1000 100 12 Oct 29 10:23 concrete.conf -> generic.conf 
-rw-r--r-- 1 1000 100 0 Oct 29 10:16 generic.conf 

차단하기 추천하고 다음으로 개발 상자에 concrete.conf을 조정, 자식 내에서 '템플릿'구성 파일을 사용하는 것입니다. 그러나 내가 추구하는 해결책은 아닙니다.

내 요구 사항은 (확인, 소원)은 다음과 같습니다 자식 지점 당

  • 지원 별도의 구성 파일 및
  • 는 자식 같은 시간에 의해 관리 지점 별 구성 파일을 유지

심지어 가능할까요? (실제로, 다른 파일에 의해 소스 화되는 것이 선호되었지만 관련이 없습니다 ...)

내 마음에 지금까지 온 최선의 결론은 분기 후 구성을 조정하기 위해 병합 후크를 사용하는 것입니다 그 자체로는 다른 소스에서 나온이 git에서 무시되지만 아주 처음부터 악취가납니다.

설명 된 문제 해결에 대한 제안 사항은 무엇입니까?

PS : * nix에서 스크립트 관련 제안 (즉, 사용 심볼릭 링크/하드 링크) 제안이 절대적으로 괜찮습니다, 나는 M $ 그것은 가능하다

답변

2

을 대상으로하고 심볼릭 링크를 포함하지 않습니다에 관심을 가지고해야합니까.

당신은

prod.conf 
dev.conf 

그런 하지 버전 my.config하지만, 템플릿 파일 my.config.tpl 및 (각 지점에 대한 값) 값 파일을, 당신은 .gitattributes declaration를 사용하여 content filter driver 사용할 수 있습니다.

스크립트

smudge ("Pro Git book"에서 "Customizing Git - Git Attributes"에서 이미지 등) <branch.conf> 파일의 값으로 자리 표시 자 값을 교체하여 my.config 파일을 생성 할 때마다 당신은 분기를 체크 아웃.
당신이 가진 현재의 지점 이름에 대해 알 수 있습니다 :

branch=$(git rev-parse --symbolic --abbrev-ref HEAD) 

생성 된 실제 my.config합니다 (.gitignore에 의해) 무시 상태로 유지됩니다.
즉, 실제 작업 트리가 "더티"가되지 않습니다.

문지르 스크립트는 올바른 값 파일을 선택하고, 는 얼룩 스크립트가 git checkout 중에 적용되는 템플릿 기반 올바른 web.config를 생성한다.

전체 예제는 "git smudge/clean filter between branches"을 참조하십시오.

+0

감사합니다. 이것은 언뜻보기에 합리적입니다. 나는 당신의 대답을 받아들이 기 전에 잠시 씹고 소화 할 필요가있다. – agg3l

+0

그것은 커밋/체크 아웃/etc 후크를 자연스럽게 포함한다; 나도 내 자신을 들여다보고 있었다. 일부 후크를 사용하지 않으면 가능한 해결책이 없다고 생각합니다. 문제에 대한 논리적 인 결과는 – agg3l

+0

이 정확히 후크는 아니지만, 네.'.gitattributes' 스머지 스크립트를 활성화하려면 로컬 설정이 필요합니다. – VonC