【发布时间】:2023-03-18 22:32:02
【问题描述】:
这个问题是在设计另一个 Git .dotfiles 管理系统时出现的。我想使用$HOME 作为我的工作树并将存储库存储在其他地方(不在.git 下,因为这会混淆其他存储库)。
在具有先前复制和可能调整的点文件的旧机器上,我现在想克隆我的新点文件存储库并(挥手)进入我可以看到(预)的状态我的$HOME/.* dotfiles 的现有状态作为对我新克隆的存储库的主文件的修改。这主要是背景,在 Git 中我只想小心地在脏目录中签出而不覆盖。
(在一般情况下,我可以从一个新目录开始,然后复制我的更改,但是当工作树是我的 $HOME 时,这似乎很难做到。)
我发现了一对似乎可以让我到达正确位置的命令,但我 不确定这种方法是否存在陷阱或更简单的方法 同样的事情:
git read-tree -v HEAD # load HEAD into the index
git checkout-index -a # cautiously check out all files without overwriting
这两个命令是否与复制我的家、进行普通结帐、然后复制回我的文件的状态相同,这样git diff 将只有我在这台机器上所做的更改并且没有文件被删除?
还有其他应该应用的选项吗?
上下文是我的(alpha)引导脚本:
git clone --bare -n git://github.com/$(git config github.user)/.dotfiles.git ~/.dotfiles/repo.git
git config -f .dotfiles/repo.git/config core.bare false
git config -f .dotfiles/repo.git/config core.logallrefupdates true
git config -f .dotfiles/repo.git/config core.worktree $HOME
export GIT_DIR=~/.dotfiles/repo.git ; export GIT_WORK_TREE=~
git read-tree -v HEAD
git checkout-index -a # all files without overwriting
ln -sf $HOME/.dotfiles/gitignore-dots $HOME/.dotfiles/repo.git/info/exclude
【问题讨论】:
标签: git git-checkout dotfiles working-copy