不适合 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 脚本,但淹没在测试和大量边缘情况中(即对于每个目录ignore ...and .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

完成后编辑文件,重新 git commit/push

现在,您可以更新文件,文件将会正确更新,并且 GitHub 也会很好地呈现它。

来源

相关内容