구성 파일 버전 제어에 git을 사용하는 것이 좋습니다?


18

젠투 리눅스를 사용하는데 다소 복잡한 구성입니다. 내 질문은 구성 파일을 버전 제어하는 ​​데 git을 사용하는 것이 현명한 것입니까?

내 집에 git repos가 있습니다 ./home/**을 .gitignore에 넣으면 문제가 발생하지 않습니다.

설명 업데이트 :

git를 사용하여 "/"루트 디렉토리에서 시스템 레벨 구성 파일을 버전 제어하는 ​​것이 현명한 방법입니까?


@AnthonyGeoghegan 나는 내 "/"루트 디렉토리를 추적하여 장래에 흥미로운 결과를 초래할 수있는 것을 추적하기를 원하므로 연결된 스레드가 내 질문에 부분적으로 만 대답합니다. 다른 부분 : 설정 파일을 제어하는 ​​버전으로 git을 사용하는 것이 현명합니다
atevm

1
@AnthonyGeoghegan 감사합니다. 질문을 업데이트했습니다.
atevm

답변:


19

귀하의 질문에 대한 짧은 대답은 입니다.


구성 파일을 추적하기 위해 Git (또는 다른 버전 제어 소프트웨어)을 권장하는 것을 망설이지 않습니다. 그렇게 한 후, 나는 생산성을 높이고 (특히 새 설치를 구성 할 때) 내 구성 파일에 대해 더 큰 확신을 갖게되었습니다. 버전 관리를 통해 어떤 변화가 만들어졌다를하고는 메시지가 이유를 제공 커밋 변경이되었다합니다. 변경으로 인해 의도 치 않은 부작용이 발생하면 로그 / 기록을 쉽게 검토하여 어떤 변경이 영향을 미쳤는지 확인할 수 있습니다.

개인적으로, /루트 디렉토리 에있는 모든 파일을 추적하는 것에주의를 기울일 것 입니다. 무시할 경로 목록이 커지고 다루기 어려워 질 수 있습니다. 각 논리 파일 세트를 자체 저장소에 보관하는 것을 선호합니다.

수동으로 Git을 사용하여 Vim 구성, Bash 기능, 별칭 등과 같은 개인 구성 / 시동 파일 을 추적 합니다. git으로 $ HOME을 추적 하는 방법에 나열된 방법과 비슷합니다 . 각 파일 세트를 자체 저장소에 보관하고 홈 디렉토리에 대한 기호 링크를 사용합니다.

들어 시스템 구성 파일, 내가 함께 힘내를 사용 Etckeeper 내에서 파일을 추적하는 /etc디렉토리.

단점

주의해야 할 한 가지 문제는 추적중인 파일에 하드 링크가 포함되어 있는지 입니다. Git을 사용하여 파일을 체크 아웃하거나 작업 트리를 수정하면 파일 을 연결 해제 한 다음 다시 만듭니다. . 자세한 설명은 Git, Dotfiles 및 Hardlinks 를 참조하십시오 .

기타

Etckeeper는 / etc에 대한 변경 사항의 전체 히스토리를 유지하는 데 사용될 수 있습니다. 수정본 제어 시스템이 일반적으로 지원하지 않는 파일 메타 데이터를 추적하지만 /etc권한은/etc/shadow .

apt 및 yum과 같은 패키지 관리자에 연결하고 (기본 구성으로) 설치 전 및 설치 후를 실행하여 모든 변경 사항을 /etc추적합니다.

패키지가 설치 또는 제거되면 / etc에서 커밋되지 않은 모든 변경 사항이 패키지 작업 전에 커밋되므로 두 가지 커밋이 있습니다.

  1. "yum 실행 전에 / etc에서 커밋되지 않은 변경 사항 저장"
  2. “Yum 실행 후 / etc의 변경 사항 커밋”

데비안 및 Red Hat 기반 배포판에서 사용했으며 아치 패키지 관리를 지원한다는 것을 알고 있습니다. 젠투 시스템에 얼마나 많은 자동화를 추가 할 수 있는지는 알 수 없지만 패키지를 사용할 수 있습니다 .

또한 구성 파일을 원격 저장소 (물론 개인용이어야 함)로 푸시하는 것을 지원합니다 .

구성

패키지를 설치 한 후 /etc/etckeeper/etckeeper.conf우분투 시스템에서 기본 버전 제어 시스템을 Git에서 Bazaar로 변경 ( 예 : 패키지)해야합니다 . 매일 자동 커밋 을 비활성화 할 수도 있습니다. .

매일 자동 커밋

매일 cron 작업으로 변경 사항을 자동으로 커밋 할 수 있습니다. . 저장소가 여러 개의 자동 커밋 메시지로 인해 혼란 스러울 수 있으므로 성 가실 수 있습니다.

적절한 줄을 주석 해제하십시오 /etc/etckeeper/etckeeper.conf.

sed -i '/AVOID_DAILY_AUTOCOMMITS/s|^#* *||' /etc/etckeeper/etckeeper.conf

특정 파일 무시

편집하다 /etc/.gitignore추적하지 않아야 할 파일을 지정하도록 .

첫 실행

구성 후 다음 명령을 실행하십시오.

sudo etckeeper init
sudo etckeeper commit "Initial commit"

현재 디렉토리가 etc인 경우 일반 git명령을 실행할 수 있습니다 ( 예 :

sudo git status
sudo git log

1
와우, 그것은 매우 유용하고 상세했습니다 ... 감사합니다 :)
atevm

아주 잘 작성된 답변 을 업데이트하기 위해 : etckeeper매일 커밋하는 동안 실제로 /etc"불량" 인지 여부 , 즉 커밋되지 않은 파일이 있는지 먼저 확인 합니다. 그렇지 않으면 커밋되지 않습니다. 커밋 로그에 매일 커밋이 가득 찬 경우 파일에 추가하지 않은 매일 변경된 파일이있을 가능성이 있습니다 .*ignore:-)
pepoluan

또한 우분투에서는 즉시bzr init --__--를 수행하는 성가신 경향이 있습니다 ... 설치 후 항상 실행하는 것이 좋습니다 etckeeper uninit -f.
pepoluan

etckeeper는 분명히 더 이상 github에서 호스팅되지 않습니다. 그들은 이제 자신의 시스템을 홈페이지에서 사용합니다. 아마도 저자 측의 일부 M $ 혐오. 개인적으로 나는 불행한 결정이 이제는 이슈를 쉽게보고 할 수없고 프로젝트의 인기도를 알 수 없다는 것을 알게되었습니다.
Michael Härtl

감사합니다 @ MichaelHärtl GitHub 리포지토리에 대한 오래된 링크를 제거했습니다.
Anthony Geoghegan

3

git을 사용하여 홈 디렉토리의 특정 영역을 추적합니다. 개인적으로, 나는 루트 디렉토리를 추적하는 길을 따라 가지 않을 것이지만, 나는 당신의 야망에 감탄한다고 말해야합니다. :)

아마도이 경험 모음은 당신이 무엇을 얻을 수 있는지에 대한 더 나은 아이디어를 제공 할 수 있습니다.

리눅스 루트 디렉토리에서 자식 저장소를 초기화하는 효과 : 3)

단지 코멘트에 링크를 던지는 대신 "답변"에 대한 사과; 그러나 충분한 담당자는 아니지만 차임하기를 원했습니다.

편집하다

와! @AnthonyGeoghegan의 매우 좋은 답변. 나는 이것이 원래 상상했던 것만 큼 힘들지 않다고 믿는다.


0

또한 git을 저장하고 유지 하는 데 사용 dotfiles하지만 git bare repository. 자세한 안내는 여기를 참조하십시오 . 두 개의 리포지토리를 사용하고 있습니다. 하나는 내 사용자 도트 파일 myconf이고 다른 하나는 루트의 도트 파일 rootconf입니다.

또한 여러 시스템, 다른 Linux 배포 또는 가상 시스템에서 두 구성을 모두 사용할 수 있습니다. 고유 한 구성을 위해 새 분기를 작성하십시오. 그런 다음 동일한 파일에서 코드를 섞지 마십시오 (예 .bash_alias:) : 현재 시스템을 더 이상 확인해야한다면 성가신 일이 없습니다. 링크가 필요 없습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.