9

git은 우리가 상점에서 구축하는 대부분의 웹 응용 프로그램에 사용되며 응용 프로그램 자체는 다양한 기술 (PHP, Rails 등)을 사용하지만 일반적으로 스테이징 및 프로덕션 각 사이트의 서버. 일반적으로 이러한 서버는 데이터베이스 자격 증명 집합과 환경 기반 구성 설정 (예 : 캐싱)이 다릅니다. 우리의 워크 플로우는 일반적으로 프로덕션 서버를 반영하는 마스터와 스테이징을 반영하는 스테이징과 같이 프로젝트 당 두 개의 자식 브랜치를 유지 관리해야합니다. 새로운 기능은 스테이징 (또는 하위 브랜치)에서 개발되고 완료 및 배포시 마스터로 병합됩니다.Git : 응용 프로그램 구성 및 다른 환경

내 질문은 지점 및 환경 별 구성 파일을 유지 관리하는 가장 좋은 방법과 관련이 있습니다. 비슷한 질문 인 herehere의 답변을 보았지만 실제로는 만족스럽지 않습니다. 주된 두 가지 접근 방식은 a) git의 범위 밖에서 설정 파일을 남기기 위해 .gitignore 제외를 사용하는 것, 또는 b) 환경을 인식하고 반영하는 코드를 작성하는 것입니다. 호스트 이름에 따라 사용할 데이터베이스 자격 증명 내 문제는) 현재 설정되어있는 설정 파일 중 하나만이 현재 브랜치와 관계없이 코드베이스에 존재할 수 있도록 허용하므로 다른 환경의 설정 파일이 손실된다. b)는 애플리케이션의 기능성과 관련이없는 방식으로 코드베이스를 불필요하게 수정해야하는 것처럼 보인다.

이상적으로, 특정 분기 내에서 구성 파일을 "잠그는"방법을 원합니다. 따라서 체크 아웃 마스터가 될 때마다 마스터 구성 파일을 가져오고 체크 아웃 준비가 될 때마다 준비 구성 파일을 가져옵니다. 또한 마스터에 스테이징 병합이 어떤 식 으로든 마스터 구성 파일에 영향을 미치지 않아야합니다. 지금까지 우리는 git 루트 외부에 환경 특정 설정 파일을 포함하고있는 폴더를 가지고 배포 할 때 수동으로 적절한 파일을 코드베이스로 옮겨 놓았지만, 물론 불필요하게 해킹 당했을 가능성이 있습니다.

git를 사용하여 이것을 수행 할 수있는 방법이 있습니까?

감사합니다.

+0

http : // stackoverflow와 결합 된 http://stackoverflow.com/questions/2154948/how-can-i-track-system-specific-config-files-in-a-repo-project/2155355#2155355 .com/questions/3207575/open-source-my-rails-apps-without-giving-away-the-apps-secret-keys-and-3207608 여기에서 도움을 받으시겠습니까? – VonC

답변

12

사람들이 왜 일종의 설치 도구없이 도망 갈 수 있다고 생각하는지 확신 할 수 없습니다. 힘내는 소스를 추적하는 것이지 배포하는 것이 아니다. git repo에서 실제 배포로 이동하는 "make install"-type 도구가 있어야하며이 도구는 템플리트 확장 또는 대체 파일 선택과 같은 다양한 작업을 수행 할 수 있습니다.

예를 들어 "config.staging"및 "config.production"을 git에 체크 인하 고 준비로 배포하면 설치 도구는 "config.staging"을 선택하여 "config"로 복사합니다. 또는 하나의 "config.template"파일이있을 수도 있습니다.이 파일은 배포시 "config"를 만들기 위해 템플릿으로 만들어집니다.

+0

네, 그게 일반적으로 제가하는 일입니다. 배포 도구를 사용합니다 (대부분 Django와 함께 작업하기 때문에 Rails 응용 프로그램에서 작동하는 Fabric 또는 Capistrano를 사용합니다). 배포시 적절한 구성 파일로 심볼릭 링크를 자동으로 이동 시키거나 설정합니다. – mipadi

0

일반적으로 master에는 이미 staging에있는 커밋 만 있다고 가정합니다. 두 브랜치 간의 구성 차이가 포함 된 master에 추가 커밋을 추가 한 경우 staging에서 가져온 것이 무엇이든 위의 커밋을 다시 리베이스해야 구성을 유지 관리 할 수 ​​있습니다. 이것은 "master 로의 병합이 어떠한 방식 으로든 master config 파일에 영향을 미치지 않아야합니다"와 같이 간단하지는 않지만 이러한 경우에는 병합 충돌이 발생하므로 충분히 가깝습니다.

3

post-merge 또는 post-checkout 후크를 사용하여 모든 것이 올바른지 확인하고 다른 방법으로 해결할 수 있습니다. 실제로는 seems to be suggested by the ProGit book입니다.

개념은 기본적으로 브랜치, 호스트, 다른 파일의 존재 여부 또는 내용에 따라 올바른 구성을 보장하는 미니 "make install"스크립트로 작동하도록 해당 후크를 작성하는 것입니다.후크는 설정 파일을 다시 작성하거나 템플릿을 채워서 다시 만들 수도 있습니다.