도트 파일 백업에 대한 또 다른 가이드

도트 파일 백업에 대한 또 다른 가이드

2022-10-04 last update

5 minutes reading unix zsh linux bash
몇 달 전에 나는 베어 git 저장소를 사용하여 *NIX 홈 디렉토리의 도트 파일을 백업하는 방법을 설명하는 이 article 를 보았습니다. 나는 잠시 동안 그것을 엉망으로 만들었고 마침내 시스템 도트 파일을 관리하기 위한 말도 안되는 시스템으로 끝났습니다.

베어 git 저장소는 git init 로 생성할 수 있는 일반 git 프로젝트와 거의 비슷합니다. 유일한 차이점은 특정 작업 트리가 없고 실제 git repo(예: .git 폴더)만 있다는 것입니다.

1단계: git 저장소 초기화



이것은 다음 명령을 실행하는 것만큼 간단합니다.

$ mkdir "${XDG_CONFIG_HOME}/cfg"
$ git init --bare "${XDG_CONFIG_HOME}/cfg/.git/"


일정 기간 동안 git을 사용했다면 git init 명령이 현재 있는 폴더의 빈 저장소를 초기화한다는 것을 알 것입니다. 베어 저장소를 만들고 싶기 때문에 --bare 플래그를 전달합니다. 그리고 git 폴더의 위치. .git~/.config/cfg 폴더가 생성되어야 합니다. 그 내용을 조사하면 다른 저장소의 .git 폴더와 비슷하다는 것을 알 수 있습니다.

2단계: 별칭/함수를 통해 저장소 액세스



나머지 별칭과 함께 .zshrc 또는 .bashrc에 다음 줄을 추가합니다.

cfg() { git --git-dir="${XDG_CONFIG_HOME}/cfg/.git/" --work-tree="$HOME" "[email protected]" ; }


이 기능을 사용하면 백업 저장소에 파일을 준비하고 커밋할 수 있습니다. --git-dir 플래그는 1단계에서 만든 git 리포지토리를 지정하고 --work-tree 리포지토리를 사용하여 $HOME 디렉터리의 모든 파일을 추적할 수 있습니다.

3단계: 백업하고 싶지 않은 파일 무시



실행exec $SHELl하거나 터미널을 다시 시작하여 이전 단계에서 만든 별칭을 사용할 수 있도록 합니다. 그런 다음 다음 명령을 실행하여 리포지토리가 status를 확인할 때마다 홈 디렉터리에 있는 수백 개의 파일을 표시하지 않도록 합니다.

$ cfg config --local status.showUntrackedFiles no


4단계: 원격 저장소 설정



빈 원격 리포지토리를 만들고(GitHub 사용) SSH 또는 HTTP를 가져옵니다. GitHub에서는 리포지토리가 생성된 후 즉시 사용할 수 있습니다. 마지막으로 다음을 사용하여 리모컨을 추가합니다.

$ cfg remote add origin <URL>


이 시점에서 다음과 같이 간단히 할 수 있습니다.

$ cfg add ~/.vimrc
$ cfg commit -m "Adding .vimrc"
$ cfg push origin master


이렇게 하면 리포지토리가 .vimrc를 추적하기 시작하고 파일을 GitHub에 커밋하고 푸시할 수 있습니다. statusdiff와 같은 거의 모든 git 명령을 cfg 기능으로 사용할 수 있습니다.

새 시스템에서 도트 파일 가져오기:



이제 새 시스템에서 다음 명령을 실행하기만 하면 모든 설정을 되돌릴 수 있습니다.

git init --bare "${XDG_CONFIG_HOME}/cfg/.git/"
cfg() { git --git-dir="${XDG_CONFIG_HOME}/cfg/.git/" --work-tree="$HOME" "[email protected]" ; }
cfg config --local status.showUntrackedFiles no
cfg remote add origin https://github.com/nimaipatel/dotfiles.git
cfg pull origin master


새 시스템에 이미 .zshrc가 있는 경우 오류가 발생할 수 있습니다. 이 경우 원격에서 파일을 가져오기 전에 이것을 삭제하고 싶을 것입니다.

이렇게 하면 끝입니다 🥳. 스크립트를 사용하는 경우 스크립트에 문제가 있으면 알려주세요!