====== GNU stow ====== * https://www.gnu.org/software/stow/ * [[https://www.gnu.org/software/stow/manual/stow.html|Stow]] * ''stow'' 의 원래 목적은 다중 버전의 애플리케이션을 버전을 선택해가면서 사용하고자 하는 것이다. ===== 실행 ===== * ''~/.dotfiles'' 안에 ''vim'', ''bash'' 등의 디렉토리가 있다고 할때, * 기본적으로 **현재 디렉토리(stow dir)**에서 지정된 이름의 디렉토리에 있는 파일들을 현재** 디렉토리 바로 위의 디렉토리(target dir)**에 링크한다. cd ~/.dotfiles # vim 안의 각종 파일을 ~/ 를 기준으로 link 해준다. stow vim ls ~ .vimrc -> ~/.dotfiles/vim/.vimrc # 아무 디렉토리에서나 명시적으로 stow dir과 target dir 을 명시하려면 stow -d ~/.dotfiles -t ~/ vim stow -d ~/.dotfiles -t ~/ -S vim # 명시적으로 stow 하라는 옵션. 생략과 동일 # unstow : 링크 제거 stow -d ~/.dotfiles -t ~/ -D vim # -R restow : unstow -> stow 를 수행한다. ===== 충돌 ===== * stow 하려는 파일이 이미 대상 디렉토리에 존재할 경우 충돌이 발생하면서 stow 를 거부한다. * ''--adopt'' 옵션을 사용하면 대상 디렉토리의 파일을 stow 패키지로 가져와서(adopt) 다시 stow를 한다. * 이는 [[:git|git]]등으로 버전관리를 할 때만 사용해야한다. * 충돌이 나서 버전 관리 대상 stow 패키지로 파일이 옮겨지면 diff 를 해서 충돌을 해결하고 commit/push 해서 최종 사용하면 된다. ===== 주의 ===== * 예를들어 ''~/.dotfiles/local_bin/.local/bin/파일들'' 구조일 때 ''~/.local/bin'' 디렉토리가 존재하지 않으면 ''~/.dotfiles/local_bin/.local/bin'' 디렉토리 자체를 링크해버린다. * 하지만 이미 디렉토리가 존재하면 ''~/.dotfiles/local_bin/.local/bin''아래에 있는 파일들만 링크한다. * 목적에 맞게 미리 디렉토리를 생성해주거나 해야한다. ===== 참조 ===== * [[https://alexpearce.me/2016/02/managing-dotfiles-with-stow/|Managing dotfiles with GNU stow - Alex Pearce]]