"도트 파일"을 버전 관리하에 유지하는 방법?


30

Etckeeper 는에서 구성 파일의 변경 사항을 추적하는 데 유용한 도구입니다 /etc. 그것에 관한 몇 가지 주요 사항이 실제로 눈에.니다. git, mercurial, darcs 또는 bzr과 같은 다양한 VCS와 함께 사용할 수 있습니다. 또한 매일 자동 커밋을 수행하고 패키지를 설치, 제거 또는 업그레이드 할 때마다 수행합니다. 또한 파일 권한 및 사용자 / 그룹 소유권 메타 데이터를 추적합니다.

또한 홈 디렉토리의 "도트 파일"을 버전 제어 (바람직하게는 bazaar)로 유지하고 싶습니다. etckeeper와 같은 도구 가이 목적을 위해 존재하는지 아는 사람이 있습니까?

최악의 경우, 나는 간단한 크론 작업이 실행 상상 bzr add && bzr ci한 번 또는 추가와 함께 하루에 두 번 ~/Documents, ~/Music받는 등 .bzrignore 이미 스크립트와 비슷한 일을하는 사람은?

나는 시장을 선호하지만 다른 옵션은 흥미로울 수 있습니다.


4
Unix Stack Exchange 관련 토론 : ~ 소스 제어에 대한 팁 . 귀하의 질문에 대답하지는 않지만 그럼에도 유용한 정보를 제공 할 수 있습니다.
Gilles 'SO- 악마 그만해

1
이를위한 많은 도구가 있습니다. "범용 도트 파일 유틸리티"섹션에서 dotfiles.github.io 를 참조하십시오 .
Robin Green

@RobinGreen 만약 당신이 그것을 정답으로 만들었다면, 나는 그것을 받아 들일 수있었습니다. bzr확실히 2015 년에 갈 수있는 방법이 아니다
andrewsomething

답변:


7

나는 이것을 수행 한 것이 있는지 알지 못했기 때문에 여기에서 내 저장소를 사용하여 원하는 것을 정확하게 달성하기 위해 몇 가지 코드를 채 웠습니다 : http://github.com/robertmassaioli/config-files

모든 파일이 속한 위치를 나타내는 파일이 있으며 generate_links 프로그램이 파일을 모두 거기에 넣습니다. 당신이하는 일을 알고 하스켈 코드를 컴파일 할 수 있다면 정말 간단하고 쉽습니다. 그것이 실제로 내 개인적인 용도로 만들어진 것임을 경고하지만.


3
하스켈 +1! haskel의 경우 -1! lol. 아뇨
Derek

들었어요 나는 그것을 배우고 있기 때문에 Haskell을 선택했다. 그것은 직업에 가장 적합한 언어 일 수도 있고 아닐 수도있다. :)
Robert Massaioli

3

글쎄, 나는 더 나은 해결책을 찾을 때까지 수동으로 이것을했다. 그래서 내가 한 일을 설명 할 수도 있습니다.

먼저 나는 bzr init ~했지만 다음은이었다 bzr ignore "*". 나는 모든 것을 버전 관리하에두고 싶지 않다고 결정했다. 특히 가치가 없었습니다. 특히 키와 같은 vc에 보관해서는 안되는 것들이 있다고 생각할 때 특히 그렇습니다. 그래서 나는 bzr add내가 원하는 특정 파일을 가져야했습니다. 에 예외를 추가 할 수도 있습니다 .bzrignore. 파이썬 정규 표현식도 유용합니다. 나는 지금 꽤 슬림하게 유지하고 있습니다. 모두가 잘 진행된다면, 나는 모두 추가 할 수 있습니다 ~/.config~/.gconf너무합니다.

또한 크론 작업으로 실행되는 빠른 스크립트를 작성했습니다. 파일이 변경되었는지 확인하고 자동 커밋이 수행되는지 확인합니다.

#! /bin/bash

set -e

TIME=$(date)
STATUS=$(bzr status)

if [ -n "$STATUS" ]; then
    if [ -n "$1" ]; then
         bzr ci ~ -m "$1"
    else
        bzr ci ~ -m "Automatic commit on $TIME"
    fi
fi

exit

나는 이것을 처음 게시했을 때 내 자신의 대답을 다시 선택했지만 그것을 취소하기로 결정했습니다. 그것은 확실히 2015 년에이 질문에 대한 가장 좋은 해답이 아니다
andrewsomething

2

전체 ~디렉토리를 Bazaar 저장소로 바꿨습니다 . 메타 데이터 저장은 홈 디렉토리의 파일에서 문제가되지 않습니다. 모든 것이 동일한 계정 및 그룹에서 소유하며 bzr이미 실행 비트를 저장합니다.

나는 "흥미로운"파일들을 수동으로 파일에 추가한다 (예를 들어, 내 음악 콜렉션이나 파이어 폭스 캐시가 버전 관리하에있는 것을 원하지 않는다). 그러나 스크립트로 이것을 자동화하고 싶다면 간단한 해결책이라고 생각한다. 일을 bzr add && bzr ci선택한 디렉토리 나의 출력에 find명령하는 것은 바로 일을 할 것입니다.


2

zsh 및 vim 파일을 git에 보관하고 github에 다른 저장소에 넣습니다.

예를 들어, zsh의 경우 ".zsh"를 작성하고 zshrc와 zshenv를 여기에 넣고 zshrc를 ~ / .zshrc에 연결하고 zshenv를 ~ / .zshenv에 연결하는 스크립트를 작성하십시오.

while true
do
read -p "do you want to link zshenv to ~/.zshenv (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshenv ~/.zshenv; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

while true
do
read -p "do you want to link zshrc to ~/.zshrc (Y/N)" yn
case $yn in
    [Yy]*) ln -s ~/.zsh/zshrc ~/.zshrc; break;;
    [Nn]*) break;;
    *) echo "please answer yes or no";;
esac
done

그래서 나는

git clone git://git@github.com:tshirtman/.zsh
cd .zsh
./init.sh

vim의 경우, 병원체와 함께 플러그인에 하위 모듈을 사용한다는 점을 제외하면 거의 동일합니다. 따라서 init.sh에 추가했습니다.

git submodule init
git submodule update

vim 플러그인을 추가하고 싶을 때

git submodule add git://github.com/nathanaelkane/vim-indent-guides.git bundle/vim-indent-guides

예를 들어.

좋아, 관리하고 싶은 도트 다이어가 몇 개 이상인 경우 약간의 작업이 필요하지만 모두 같은 디렉토리에 두거나 활동으로 분리하는 것을 막을 수는 없습니다 (모든 그래픽 편집기의 경우 웹 활동…) 정도. 어쨌든, 그것이 내가 한 일이므로 내 2 센트 :).


1

나는 etckeeper처럼 자동적이지 않은 솔루션을 사용하지만 (수동으로 커밋해야 함) 잘 작동했습니다. 내가 좋아하는 것만 큼 개발되지는 않았지만 작동합니다.

나는 스토우가 내가 원하는 모든 것을하지 않았기 때문에 GNU Stow 와 비슷한 자체 유틸리티를 작성 했습니다. 나는 그것을 Stow in Home 이라고 부른다 . 실행되면 "HOME"이라는 디렉토리를 찾습니다. 그런 다음 해당 디렉토리 아래의 모든 것을 가져와 $ HOME의 해당 위치로 심볼릭 링크하여 필요한 디렉토리를 만듭니다. 또한 파일 이름을 번역합니다. 파일이 '_'로 시작하면 '.'로 바뀝니다. 도트 파일이 숨겨져 있지 않을 때 편집하는 것이 더 좋기 때문에이 작업을 수행했습니다 (기본적으로 디렉토리 목록에서 해당 파일 참조). 그런 다음 응용 프로그램이 기대하는 이름으로 넣습니다.

따라서 구성에 대한 여러 개의 git 리포지토리가 있습니다. 개인적으로 편집 한 도트 파일 만 넣습니다. 이것의 장점은 다른 사람들과 공유 할 수있는 도트 파일 (Emacs 구성과 같은)과 개인 (다른 ssh 구성, 호스트 이름 및 작업 등)을위한 저장소를 가질 수 있다는 것입니다. stow-in-home을 사용한 심볼릭 링크는 모든 것을 올바른 위치에 배치하지만 각각에 대한 소스 제어는 분리 될 수 있습니다.

그것은 나를 위해 잘 작동했습니다. 실제로 자동으로 커밋을 수행하기 위해 무언가를 설정할 수 없었습니다. 또는 모든 도트 파일을 적절한 저장소로 옮기고 집에 보관하십시오. 그러나 이것이 내가 한 일입니다.


0

dot filesEtckeeper에서 사용 된 저장소에 를 추가 할 수 없습니까?


1
어떻게해야합니까? 그들 모두 어딘가에 symlink /etc?
andrewsomething

음 .. 그건 하나 개의 옵션입니다
txwikinger

0

소스 제어하에 유지하려는 모든 내 도트 파일을 / home / 디렉토리의 "dotfiles"폴더에 복사하여이 작업을 수행했습니다. 물론 이것은 필요할 때 복제본을 유지하고 앞뒤로 복사하는 것을 의미하지만 이것이 가장 쉬운 해결책이라는 것을 알았습니다.


1
중복을 관리하는 대신 도트 파일에 대한 심볼릭 링크를 만들 수 없었습니까?
Ryan

나는 당신이 확실히 할 수 있다고 생각합니다!
데릭

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