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文件夹里面。