다른 OS (예 : osx 및 우분투)에 대한 도트 파일을 유지 관리하는 전략


5

Git 리포지토리를 사용하여 내 도트 파일 (vimrc, zshrc, tmux.conf 등)을 유지 관리합니다. 두 가지 운영 체제 (집에서 OSX와 직장에서 우분투)를 사용하면서 각 시스템에 대한 지점을 지정했습니다. OS가 동일한 도구 / 라이브러리를 사용하여 작업을 수행하는 데 사용되지 않기 때문에 다른 버전의 도트 파일이 생성됩니다. 이렇게하면 모든 브랜치 (확산 된 도트 파일)에 대한 도트 파일의 유지 관리가 어렵습니다. 더 나은 전략이 있는지 생각하고있었습니다. 다른 파일에 시스템 특정 도트 파일을 포함시키고 도트 파일에 포함시킬 수 있습니다.

즉, 다른 OS를 가진 컴퓨터의 도트 파일을 유지 관리하기위한 크로스 플랫폼 전략을 찾고 있습니다.

도움을 주셔서 감사합니다.


답변:


1

.zshrc와 같은 쉘 스크립트의 경우 환경 변수를 사용하거나 uname과 같은 일부 명령에 대한 응답을 사용할 수 있습니다. 그러나 .vimrc와 같은 쉘이 아닌 도트 파일의 경우 한 지점에서 다른 지점으로 (OS에서 다른 지점으로) 패치를 커밋하는 수동 작업을 수행해야합니다.


1

Envite의 답변 외에도 : 하나의 공통 .zshrc파일을 사용 합니다. 쉘 파일 정의와 같은 모든 휴대용 파일이 포함됩니다. 또한 .zshrc-MACHINE_A공유 구성을 사용하는 모든 컴퓨터에 추가 파일 등이 있습니다. 여기서는 PATH현재 설치된 프로그램을 반영하는 별칭 등을 정의 합니다.

공통 .zshrc파일 의 마지막 부분을 읽습니다.

# load $HOST specific setting

if [[ -f ~/.zshrc-$HOST ]]; then
   [[ ! -f ~/.zshrc-$HOST.zwc || ~/.zshrc-$HOST -nt ~/.zshrc-$HOST.zwc ]] && { zcompile ~/.zshrc-$HOST; print - compiled \~/.zshrc-$HOST. }
   source ~/.zshrc-$HOST
fi

따르면 man zshparam파라미터 $HOST따라서 휴대용되어야 현재 호스트 이름을 포함하고, 외부 프로그램의 호출을 저장한다. 그리고 해당 .zshrc-$HOST파일이 변경 될 때마다 (를 통해 zcompile) 컴파일됩니다 . 컴파일은 (I quote man zshbuiltins) 의 목적을 제공합니다 .

(...) 파일을 읽을 때 텍스트의 구문 분석을 피함으로써 기능의 빠른 자동 로딩 및 스크립트 실행.

아마도 요즘에는 차이 (?)를 느끼지 못하지만 아프지 않을 것입니다. Btw. 컴파일 *.zwc파일은 아키텍처에 따라 다르며 다른 시스템간에 교환 할 수 없습니다.


0

내 솔루션은 각 컴퓨터마다 별도의 리포지토리를 갖는 것입니다.

git은 심볼릭 링크를 따르지 않고 (단지 저장) 하드 링크도 작동하지 않기 때문에 두 컴퓨터에서 동일한 파일 목록을 포함하는 스크립트를 작성했습니다. 리포지토리 중 하나를 변경 한 후 스크립트를 실행합니다.

이 저장소에서 공유 파일이 변경되었음을 감지하면 (체크섬 계산) 다른 저장소로 파일을 복사합니다. 그런 다음 해당 저장소로 변경하고 변경 사항을 적용합니다.


0

내가 만난 최고의 솔루션 은 다음과 같습니다 . 여기를 읽지 말고 링크를 클릭하는 것이 좋습니다.

아이디어

파일 이름이 ".symlink"로 끝나는 @holman의 심볼릭 링크 이데아를 수정 한 대신 파일 이름이 정규식과 일치하는 파일을 심볼릭 링크하고 있습니다 \.(<os>-)?symlink$. 이렇게하면 항상 심볼릭 링크 된 파일과 특정 환경에서만 심볼릭 링크 된 파일을 가질 수 있습니다.

예를 들어, OS 특정 구성을 포함하는 내 ~/.gitconfiginclude ~/.gitconfig_include를 포함합니다.

[include]
    path = ~/.gitconfig_include

그런 다음 두 개의 .gitconfig_include 파일이 있습니다. 하나는 Linux 용이고 다른 하나는 Windows 용입니다.

dotfiles
|-- git
    |-- .gitconfig.symlink
    |-- .gitconfig_include.linux-symlink
    |-- .gitconfig_include.windows-symlink

이를 통해 OS에 따라 심볼릭 링크의 이름은 같지만 대상이 다를 수 있습니다.

불행히도이 전략으로는 크로스 플랫폼 도트 파일에 대한 모든 요구 사항을 처리하기에 충분하지 않았습니다.

Windows에서 Vim의 잘못된 결정

어떤 이유로 Vim은 Windows ~/vimfiles대신 파일을 찾습니다 ~/.vim. 즉, 동일한 전략을 유지하려면 분명하지 않은 이유로 파일 폴더를 복제해야합니다.

dotfiles
|-- vim
    |-- .vim.linux-symlink
    |-- vimfiles.windows-symlink

files 폴더를 복제하는 대신 ".symlinks"확장자를 가진 폴더 이름과 일치하는 파일을 만들었습니다.

dotfiles
|-- vim
    |-- .vim
    |-- .vim.symlinks

.vim.symlinks 파일에는 각 환경의 심볼릭 링크 이름이 포함되어 있습니다.

linux: .vim
windows: vimfiles

이것은 OS에 따라 심볼릭 링크가 다른 이름을 갖지만 동일한 대상을 가질 수 있도록합니다.

작업 솔루션

모든 것이 어떻게 끝났는지 확인하려면 GitHub의도트 파일을 방문하십시오 .

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