我把我的dotfiles存储在Github上,但没有自动化,所以非常费劲。我必须亲自更新它。
是否有一种方法可以自动安装/更新/同步dotfiles? 我的意思是,在新的服务器上,我可以下载dotfiles并执行一个install
脚本将dotfiles复制到本地。过了一段时间后,我可以执行updateToRemote
脚本将本地更改推送到远程仓库,在另一个服务器上,我可以执行updateToLocal
脚本将远程更改拉取到本地。
类似这样的东西。
关于 dotfiles 的主要信息来源是 dotfiles.github.io
。
它引用了类似「使用Git和Github管理您的Dotfiles」的博客文章,基于符号链接方法。
首先,我们将把所有的dotfiles放到一个名为dotfiles的文件夹中,就像这样:
/home/smalleycreative/dotfiles/vimrc
。
然后,我们只需从我们的主目录中创建符号链接即可。
Jaime 提到 Atlassian 的教程 "存储 dotfiles 的最佳方式:一个裸的 Git 存储库"
该技术的原理在于在一个“侧”文件夹(如
$HOME/.cfg
或$HOME/.myconfig
)中存储一个 Git 裸存储库,并使用特别制作的别名使命令针对该存储库而不是通常的.git/
本地文件夹运行,这会干扰周围任何其他 Git 存储库。
(然后 dotfiles 文件夹被管理为一个 git 存储库)
$ cd $HOME
$ git init
Initialised empty Git repository in $HOME
$ git add .bashrc .emacs .gitconfig # for example
$ git commit -m "Initial import of dotfiles"
[master (root-commit) xxxxxxxx] Initial import for dotfiles
3 files changed, xxx instertions(+)
create mode 100644 .bashrc
create mode 100644 .emacs
create mode 100644 .gitconfig
# The following two lines just add an "upstream" purely for backup purposes.
$ git remote add origin /z/Backups/Dotfiles.git
$ git push -u origin master
<< snip >>
接下来,我将以下内容放入$HOME/.gitignore文件中:
# First exclude everything.
*
# then re-include all "dotfiles"
!/.*
# then a bunch of specific excludes as they are more-or-less "cache" data rather than configuration.
/.bash_history
/.dbus-keyrings/
/.emacs.d/
/.gimp-2.8/
/.git/
/.gitk
/.idlerc/
/.lesshst
/.saves/
/.thumbnails/
$ cd $HOME
$ git add .gitignore
$ git commit -m "Added some rules so git status on the dotfiles is useful."
$ git push
$ cd $HOME
$ touch NewFile.txt
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
$ touch .funkychicken
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Untracked files:
(use "git add <file>..." to include in what will be committed)
.funkychicken
nothing added to commit but untracked files present (use "git add" to track)
到目前为止,这个方法一直运作良好,即使有些子目录是它们自己(无关)的Git仓库。有时候非Git子目录会出现一些“怪癖”,但目前还没有出现任何问题。
三年过去了,没有人想出什么好办法来解决这个问题,所以我尝试着解决它。这个方案不依赖于平台和shell类型,除了你可用的Bourne兼容Shell(如bash、zsh、ksh等),没有其他的依赖。它可以在Mac、Linux和Windows上运行:
Dotsys会自动将您的点文件与GitHub和多台计算机同步,还有许多其他功能。
我正在使用git仓库(github)和bash脚本创建符号链接。但现在我发现了这个工具,它似乎更加强大。看看这个: https://github.com/shanx/python-dotfiles。
git init --bare $HOME/.myconf
alias config='/usr/bin/git --git-dir=$HOME/.myconf/ --work-tree=$HOME'
config config status.showUntrackedFiles no
config status
config add .vimrc
config commit -m "Add vimrc"
config push
好处
更多信息
$ dotfile_manager install
$ dotfile_manager setup
我也在寻找一种以最少的步骤设置新机器的方法,花了一些时间后,我发现几乎所有开发人员都使用git来存储和共享这些文件,并使用符号链接将它们同步。
好吧,符号链接可以工作,但这并不是将本地文件同步到git仓库的最佳方式。有一个更好的解决方案,由Atlassian的人编写 - https://www.atlassian.com/git/tutorials/dotfiles。
因此,对于git bare仓库而言,这是将您的文件与远程副本同步的最佳且最优雅的方式,创建一个bash脚本来自动安装和设置。
管理这些dotfiles的诀窍是创建一个裸的git仓库。如果您从头开始并且以前没有跟踪过您的dotfiles,请在$HOME目录中创建一个裸仓库。
git init --bare $HOME/.dotfiles
alias dotfiles="/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME"
现在我们可以使用dotfiles命令来跟踪我们的点文件,以下是一些示例:
# to check the version history
dotfiles log
# to check the status of the tracked and untracked files
dotfiles status
# to add a file for tracking
dotfiles commit .vimrc -m ".vimrc added"
# push new files or changes to the github
dotfiles push origin main
我也使用这种方法同步和存储我的点文件,请查看我的点文件存储库,并可以在使用Git存储点文件-这是最佳方法中阅读,其中我写了关于为多个设备管理点文件的文章。
对于裸的 Git 仓库,我建议使用 Git alias 而不是 Bash alias。这样可以更好地集成,因为 Git 命令的自动补全仍然能够正常工作:
git init --bare ~/dotfiles.git
git config --global alias.dotfiles '!git --git-dir=$HOME/dotfiles.git/ --work-tree=$HOME'
它的使用方式如下:
git dotfiles add .gitconfig
git dotfiles commit -m 'Add gitconfig'
在这篇博文中有一些进一步的信息。
主要思想是创建一个单独的目录(通常称为.dotfiles),其中包含您想要在git中跟踪的所有真实dotfiles,并在主目录中使用符号链接。
已经有很多工作针对这种方法完成了,因此我建议您检查DFM(dotfiles管理器):
chezmoi:
太复杂了!
我的软链接变成了递归,看起来是chezmoi引起的。
子模块(像软链接。vim-plug使用子模块管理插件)
子树(像复制。"互联网上充满了关于为什么不应该使用Git子模块的文章。使用子树!)