Post

利用github管理dotfiles

如何使用git bare仓库管理dotfiles?

初始化一个bare git repo

1
2
git init --bare $HOME/github/dotfiles

路径可以自定义

添加alias到.zshrc (或.bashrc,取决与你的shell)

1
alias config='$(which git) --git-dir=$HOME/github/dotfiles/ --work-tree=$HOME'

source .zshrc

设置flag隐藏不需要追踪的文件

设置一个flag –local 以隐藏尚未明确跟踪的文件。 这样,当键入 config status 和其他命令时,我们不感兴趣跟踪的文件将不会显示为 untracked

1
config config --local status.showUntrackedFiles no

开始利用git追踪文件

1
2
3
config add .zshrc
config status
config commit -m "add .zshrc"

创建一个空的github repo,并配置origin

1
config remote add git@github.com:minicoderwen/dotfiles.git

push到远程分支

1
config push -u origin main

恢复dotfiles到新系统

1
2
3
4
5
6
alias config='/usr/bin/git --git-dir=$HOME/github/dotfiles --work-tree=$HOME' # 添加到.zshrc
source .zshrc # 使alias生效
echo "github/dotfiles" >> .gitignore # 添加dotfile目录到gitignore
git clone --bare <git-repo-url> $HOME/github/dotfiles # 克隆裸仓库到本地dotfile目录
config config --local status.showUntrackedFiles no
config 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

可以使用如下脚本备份本地已经存在的配置文件到 .config-backup

1
2
3
4
5
6
7
8
9
10
11
12
13
14
git clone --bare https://bitbucket.org/durdn/cfg.git $HOME/.cfg
function config {
   /usr/bin/git --git-dir=$HOME/.cfg/ --work-tree=$HOME $@
}
mkdir -p .config-backup
config checkout
if [ $? = 0 ]; then
  echo "Checked out config.";
  else
    echo "Backing up pre-existing dot files.";
    config checkout 2>&1 | egrep "\s+\." | awk {'print $1'} | xargs -I{} mv {} .config-backup/{}
fi;
config checkout
config config status.showUntrackedFiles no

参考链接

This post is licensed under CC BY 4.0 by the author.

Trending Tags