0 起因 Linux 下面会有大量的配置文件,他们多是以.
开头的隐藏文件,放置在HOME
下面,后者~/.config/
文件夹下面,如果需要在多台电脑上保持这些配置文件的一致,可以使用git的办法去管理,这里用到了一个git的特殊用法。
1 建立 bara 的仓库 1 2 3 4 git init --bare $HOME /.dotconfig alias dotconfig='/usr/bin/git --git-dir=$HOME/.dotconfig/ --work-tree=$HOME' dotconfig config --local status.showUntrackedFiles no echo "alias dotconfig='/usr/bin/git --git-dir=$HOME /.dotconfig/ --work-tree=$HOME '" >> $HOME /.bashrc
2 添加需要管理的dot files 1 2 3 4 5 6 dotconfig status dotconfig add .config/lvim/config.lua dotconfig commit -m "Add lvim config.lua" dotconfig add .bashrc dotconfig commit -m "Add bashrc" dotconfig push
3 github 上建立名为 dotconfig 的仓库,并在本地设置 remote 地址 1 2 3 git remote add origin https://github.com/zhydong258/dotconfig.git git branch -M main git push -u origin main
4 在新的电脑上同步 4.1 clone 到本地 1 2 3 4 5 git clone --bare https://github.com/zhydong258/dotconfig.git $HOME/.dotconfig alias dotconfig='/usr/bin/git --git-dir=$HOME/.dotconfig/ --work-tree=$HOME' dotconfig checkout dotconfig config status.showUntrackedFiles no echo "alias dotconfig='/usr/bin/git --git-dir=$HOME/.dotconfig/ --work-tree=$HOME'" >> $HOME/.bashrc
4.2 脚本的形式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # !/bin/bash git clone --bare https://github.com/zhydong258/dotconfig.git $HOME/.dotconfig function dotconfig { /usr/bin/git --git-dir=$HOME/.dotconfig/ --work-tree=$HOME $@ } mkdir -p .dotconfig-backup dotconfig checkout if [ $? = 0 ]; then echo "Checked out config."; else echo "Backing up pre-existing dot files."; dotconfig checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | xargs -I{} mv {} .dotconfig-backup/{} fi; dotconfig checkout dotconfig config status.showUntrackedFiles no
其中,$?
中存储的是上个命令执行的结果,如果成功返回0
,如果失败,则返回值非0
。这里上一条命令是dotconfig checkout
,如果出现类似如下错误,表明本地目录已经有文件存在了。
1 2 3 4 5 error: The following untracked working tree files would be overwritten by checkout: .bashrc .gitignore Please move or remove them before you can switch branches. Aborting
在后续的else
中,这些已经存在的文件会移动到.dotconfig-backup
文件夹里面。