折腾癌发作,想要在多台电脑上利用同一个github repository来同步管理配置文件dotfiles,研究下来好像有这么几个主流的解决方案:
dotfiles丢在git仓库中,删除本地对应的文件,用symbolic link取代
在别的位置建立git裸仓库,然后把dotfiles添进来并建立alias
使用gnu/stow
使用chezmoi
根据我的观察比较,1和2有点笨拙,先排除;stow有个巨大优势就在于可以单独安装配置,比如i3装i3的配置,emacs装emacs的配置,比较分离,但是一个缺陷(可能是我自己没发现好的解决方案)在于,无法为不同机器做不同配置,比如在debian中我会alias zz = sudo apt update -y && sudo apt upgrade
,在arch上就是alias zz = yay
,或者不同屏幕大小下,i3wm的字体大小、background不同,这点好像stow没法单独做针对性的配置(如果有的话请务必告诉我,跪求!)
chezmoi则有template,方便针对不同机器做单独配置(虽然这方面我也有点半懂不懂orz),但是没法对配置文件做独立的安装,一装就全装上了,比如kde的桌面环境加上一份i3的配置文件就没啥必要,强迫症有点儿难受
以上是我的一些观察和思考,不知道论坛里大神都是怎么管理的?
不管理,除了最开始复制一下之前用过的 config 作为模版以外从来都是有需求再改配置,有啥用啥,更不会要求不同平台上都要配成一样。
用的方案1,感觉这个方案简直完美。只需要一个 git
2 个赞
我用最简单最笨拙也是对自己最有效的办法管理,可以参考 Dotfiles
SPQR
2021 年6 月 13 日 04:59
6
我是用git bare repo,两个branch分别是两台机器,gentoo和msys2,缺点就是合并分支的时候,每个分支都有不能被另一个分支覆盖或者修改的东西,据我所知git-merge好像没有这种根据文件名跳过merge的机制,所以我写了个bash脚本,先merge但不commit,然后从一个文件里面读取文件名,把不能merge的restore,然后再commit。。。
直接用一个 git仓库通过github 管理配置,配置中区分不同系统(Mac,Linux,Win)。但是对于Linux的不同发行版就懒得管了,微小差异(比如字体)就直接本地改一下就好了。
我有三台机器需要同步,平时使用git加符号链接管理,基本满意。 有一点不爽的是不同机器(平台)有些差异,不知道有何好办法处理? 目前都是手动调整有点小烦。
引入其它的文件,引入的那个文件 gitignore 就好了。
其实 很多时候我们忽略了 shell 本身的可编程能力, 对于楼主的跨平台(*nix)dotfiles 管理完全可以用标准shell像emacs一样搞一份自己配置去管理这些dotfiles,不同平台对应不同的if-else,完全可以搞一个自己的框架出来,这样以后增加配置都方便,或者既然是emacs党那就直接用elisp做,这样win也可以用。
额外:
其实bashrc也是可以框架化的, 这样都省略了每次make了。
1 个赞
用的方案1,Symbol link + bonclay + Alias
针对不同的机器和环境,设置不同的yaml文件来进行同步,比如 common.yaml + (work, home,manjaro,macos…).yaml 共有的配置写在 common.yaml 中,特殊的分开写。
再写几个alias : alias bs='bonclay sync common.yaml && bonclay sync'
到新机器直接 bs macos.yaml 即可
我也是最近才切换到 zinit 上来的,按官方文档配了,然后抄了点,哈哈
yuequ
2021 年6 月 13 日 15:12
18
我切换到 zinit 很久了,不过文档我没怎么看懂,当时教程也几乎没有,勉勉强强弄了个版本,有几个地方的 bug 我一直懒得处理,现在有的抄我得重新整理下…
zinit的文档写的不好,有很多配置只能自己琢磨。不过性能是真不错,为了跨平台我也切到zinit上了。
Kaguya
2021 年6 月 13 日 22:13
20
经过对比之后,我选择使用 dotdrop,可以选择符号链接可以复制文件,文件对应关系通过 yaml 配置,不同系统可选择保留和映射到的文件,可作为 git submodule 使用也可以pip安装