programing

협업시 구성 파일을 관리하는 방법은 무엇입니까?

javaba 2021. 1. 15. 19:09
반응형

협업시 구성 파일을 관리하는 방법은 무엇입니까?


페이지 상단에 몇 가지 간단한 변수가있는 간단한 스크립트를 작성하고 있습니다. 친구와 함께 작업하고 싶지만 우리 중 한 명을 위해 매번 가져 와서 git 상태에 불필요한 정크를 추가 한 후 변경해야하는 변수를 관리하는 방법을 모르겠습니다. 나는 우리 각자를 위해 다른 이름의 브랜치를 만드는 것에 대해 생각했고, 마스터는 단지 예제 사용자 이름을 설정하게 될 것입니다. 그러나 모든 추가 작업 병합을 수행해야하는 것은 어리석은 것 같습니다. 변수를 옵션으로 스크립트에 전달할 수 있지만 이는 바람직하지 않으며 다른 별도의 구성 파일로 분리하지도 않습니다. .gitignore와 같은 것을 갖는 것이 좋지만 파일에서 몇 줄만 무시하는 것이 좋습니다.

이것을 어떻게 우아하게 관리 할 수 ​​있습니까? 이 문제는 일반적으로 어떻게 관리됩니까?


파일의 특정 줄에 대한 변경 사항을 쉽게 무시할 수는 없습니다. 두렵기 때문에 별도의 구성 파일을 가지고있을 수 있습니다. 아래에이 문제를 다루는 두 가지 일반적인 방법과 약간 더 이국적인 방법을 나열했습니다.

git에 샘플 구성 파일이 있습니다.

여기에서, 당신은 파일을 유지하는 것입니다 config.sample예를 들어 자식에 있지만 응용 프로그램이 실제로 파일의 값을 사용하는 것 config입니다 .gitignore. 그런 다음 애플리케이션이없는 경우 오류가 발생 config합니다. 새 구성 변수를 개인 config파일에 추가 할 때 샘플 파일의 값을 변경해야 합니다. 이 경우 누군가가 config샘플을 변경 한 후 파일 을 업데이트하는 것을 잊은 경우를 대비하여 애플리케이션에서 필요한 모든 구성 변수가 실제로 설정되었는지 확인하도록하는 것도 좋습니다 .

git에 기본값 파일이 있습니다.

config.defaults가능한 한 합리적인 기본 구성 값을 가진 git에 파일 보관 합니다. 애플리케이션은 먼저 기본값을 재정의하기 위해 먼저 구성을 소싱 config.defaults한 다음 config(에 있음 .gitignore) 에서 구성 합니다. 이 방법을 사용하면 일반적으로 config존재하지 않는다는 오류가 발생 하지 않으므로 .NET Framework를 만들지 않은 사람들을 위해 응용 프로그램이 즉시 작동 할 수 있습니다 config.

--assume-unchanged와 함께 단일 구성 파일 사용

이 경우 개인적으로 권장하지 않는 세 번째 가능성은 git에서 커밋 된 단일 구성 파일을 가지지 만을 사용 git update-index --assume-unchanged <FILE>하여 git에 변경 사항을 무시하도록 지시하는 것입니다. (이 내용은 이 유용한 블로그 게시물에 자세히 설명되어 있습니다.) 즉, 구성 파일에 대한 로컬 변경 사항이에 커밋 git commit -a되거나 표시 되지 않습니다 git status.


Python / Django 관련 솔루션은 settings.py저장소에 체크인 된 공유 파일 과 머신 관련 값으로 일부 설정을 재정의 하는 로컬 파일을 settings_local.py의 끝에 가져 오는 것 settings.py입니다.


제 경우에는 팀의 다른 모든 개발자처럼 별도의 (작은) 파일에 "config"변수가 있습니다. 내 데이터베이스 위치 등이 거기에 보관됩니다. 이 파일의 이름은 .gitignore버전이 제어되지 않고 "sample_config"파일을 체크인하여 새 사용자가 사본을 만들어 자신의 용도로 사용할 수 있도록합니다.


기타 옵션 (우아하지는 않지만 도움이 될 수 있음) :

  • 구성 파일에 git stash사용git stash pop
  • 로컬 구성 파일 변경 사항이있는 config 라는 브랜치 를 가지고git checkout config <your config file>

두 번째 옵션은 저장소 (어딘가)에 로컬 구성 변경 사항을 유지해야하는 경우 유용합니다.


이와 같은 짧은 스크립트가 몇 개 있고 별도의 구성 파일을 만드는 대신 별도의 setenv.sh (또는 setenv.bat) 파일을 만듭니다. 몇 가지 간단한 변수를이 새 파일로 이동하고 기본 스크립트에서 setenv.sh 파일을 호출합니다. 사용자별로 변경되지 않는 변수는 기본 스크립트에 남아 있습니다. 이 setenv.sh 스크립트의 크기에 따라이 setenv.sh를 만드는 방법에 대한 문서를 작성하거나 템플릿으로 사용할 setenv.sh.sample을 커밋합니다.

이에 대한 변형은 setenv.sh를 만들거나 호출하지 않고 사용자가 기본 스크립트에서 사용되는 환경 변수를 설정하도록하는 것입니다. 기본 스크립트는 변수가 존재하지 않으면 불평합니다.

일부 짧은 스크립트는 큰 스크립트로 성장하거나 본격적인 응용 프로그램이됩니다. 이런 일이 발생하면 구성 파일로 이동합니다. http://www.configapp.com 에서 Config라는 구성 파일을 관리하는 응용 프로그램이 있습니다. Config에는 환경 및 인스턴스의 개념이 있습니다. 귀하의 예에는 1 개의 로컬 환경과 2 개의 인스턴스가 있습니다. 공통 변수는 로컬 환경으로 이동하고 머신 특정 변수 (귀하와 친구)는 인스턴스로 이동합니다. 이것은 작은 스크립트에는 너무 많지만 응용 프로그램에서는 잘 작동합니다.


요즘에는 python / django에서 예를 들어 ENV vars를 사용하며 기본값을 추가 할 수도 있습니다. docker의 컨텍스트에서 ENV vars를 docker-compose.yml 파일 또는 버전 제어에서 무시되는 추가 파일에 저장할 수 있습니다.

# settings.py
import os
DEBUG = os.getenv('DJANGO_DEBUG') == 'True'
EMAIL_HOST = os.environ.get('DJANGO_EMAIL_HOST', 'localhost')

참조 URL : https://stackoverflow.com/questions/4743770/how-to-manage-configuration-files-when-collaborating

반응형