Git 저장소에는 적합하지 않습니다.

Git 저장소에는 적합하지 않습니다.

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가 파일을 멋지게 렌더링합니다.

원천

관련 정보