Git 저장소의 모든 도트 파일을 백업하는 간단한 방법을 찾고 있습니다.
내 목표 솔루션:
- 내 도트 파일 콘텐츠에 대한 정보 소스로 git 사용
- 내 홈 디렉터리에서 백업 파일은 저장소에 있는 파일에 대한 심볼릭 링크가 됩니다. 따라서 편집하면 저장소에서도 편집됩니다.
- 하나의 명령을 사용하여 저장소의 모든 파일에 대한 심볼릭 링크를 생성할 수 있습니다(디렉토리 구조는 유지되지만 파일만 링크해야 함)
예를 들어 다음과 같은 백업 저장소 구조가 있습니다.
.config
|_ nvim
|_ init.lua
.tmux
|_ tmux.conf
.zshrc
나는 이 구조를 얻고 싶습니다.
home
|_ .config
| |_ (other contents)
| |_ nvim
| |_ (other contents)
| |_ link to init.lua
|_ .tmux
| |_ (other contents)
| |_ link to tmux.conf
|_ link to .zshrc
|_ (other home files and directories)
백업 프로세스가 시작되기 전에 다른 콘텐츠가 존재할 수 있으므로 백업하거나 백업 프로세스의 영향을 받아서는 안 됩니다.
놀랍게도 기존 솔루션을 찾을 수 없습니다. 나는 할 수 있다고 생각 rsync
하지만 인터넷 검색에서는 이를 수행하는 방법에 대한 답변을 제공하지 않습니다. 간단한 bash 스크립트를 해킹하려고 하는데 테스트와 수많은 엣지 케이스에 빠져 있습니다(예: 무시하고 .
각 디렉토리에 대해 하위 디렉토리로 재귀 ..
하는 .git
등).
이 작업을 수행하는 유틸리티가 있어야 한다고 확신합니다. 누군가가 나에게 그것을 지적할 수 있을까요? 아니면 이를 수행할 수 있는 스크립트가 이미 있습니까?
고쳐 쓰다:
Stéphane의 의견에 나온 아이디어를 사용하여 cp
사용 사례를 완벽하게 다루는 이 스크립트를 작성했습니다.
find ./dotfiles -maxdepth 1 -mindepth 1 | xargs realpath | xargs -i cp {} $HOME -rs --remove-destination
답변1
Git에서 추적할 심볼릭 링크를 생성할 때 중요한 주의 사항이 있습니다. 소스 파일에 대한 참조 경로는 머신에 대한 절대 경로가 아니라 리포지토리에 상대적이어야 합니다.
Git 저장소에는 적합하지 않습니다.
ln -s /Users/gio/repo/foo.md ./bar/foo.md
Git 저장소에 적합
cd ./bar && ln -s ../foo.md foo.md
이것이 당신이 원하는 것입니다.
디렉토리 만들기(예: 백업)
mkdir backup
그 다음에cd backup
그런 다음 git 저장소로 만듭니다 git init
(선택적으로 구성을 위한 폴더 생성).
나중에 해라ln -s /path/to/file/
그런 다음 테스트해 보세요git add .
git commit "test a symlink"
git push
완료 후 파일을 편집하고 커밋/푸시를 다시 시작하세요.
이제 파일을 업데이트할 수 있으며 올바르게 업데이트되고 GitHub가 파일을 멋지게 렌더링합니다.