- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题是在设计另一个 Git .dotfiles
管理系统时出现的。我想使用 $HOME
作为我的工作树,并将存储库存储在其他地方(不在 .git
下,因为这会混淆其他存储库)。
在具有先前复制和可能调整过的点文件的旧机器上,我现在想克隆我的新点文件存储库并(挥手)进入我可以看到(预)我的 $HOME/.*
点文件的现有状态作为对我新克隆的存储库的主文件的修改。这主要是背景,在 Git 中,我只想在不覆盖的情况下谨慎地 check out 脏目录。
(在一般情况下,我可以从一个新目录开始,然后复制我的更改,但是当工作树是我的 $HOME
时,这似乎很难做到。)
我发现一对命令似乎可以让我到达正确的位置,但我不确定这种方法是否存在缺陷或更简单的方法同样的事情:
git read-tree -v HEAD # load HEAD into the index
git checkout-index -a # cautiously check out all files without overwriting
这两个命令是否达到与复制我的家相同的状态,进行普通 checkout ,然后复制回我的文件,这样 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 专家表示认可这种安排有些人含糊其辞地表示“你疯了吗?”一种方式。
我现在有别名 doton/dotoff 和调整 GIT_DIR 和 GIT_WORK_TREE 的源文件,所以我在工作中做了一些调整,尝试一下,推送到 github,然后更新我家里的其他机器。大多数时候它是一个简单的快进或 rebase ,但偶尔会变脏需要更新。
我在这里添加这个,因为它是问题中概述的方法的另一半。
假设我 git 添加我的 ~/.XCompose 并推送它。当我想把它 pull 到机器上时已经有一个 .XCompose 文件,我想获取更改,查看我的差异本地(未添加)复制并从那里 merge 。Git 对此进行检查并退出,这通常是合适的。
我再次使用管道命令来执行大部分更高级别的命令,但没有一些讨厌的安全检查,以便与肮脏的工作副本。文档中没有详细介绍管道命令但似乎有效(不能保证)。
这些说明假定您没有新的本地更改,IE。它不做 rebase 。
(请注意,这最终可能会破坏文件,包括未跟踪的文件。我不知道这是否接近安全,我怀疑如果出现问题,您可能会一团糟。)
git fetch # download FETCH_HEAD
# Check HEAD is an ancestor of FETCH_HEAD
cmp <( git rev-parse HEAD ) <( git merge-base HEAD FETCH_HEAD ) \
|| echo "merge-base is not HEAD, not fast forward"
# merge FETCH_HEAD into HEAD in index (2 tree merge is ff, no local changes)
# (no -u means the work tree is not updated)
git read-tree -v -m HEAD FETCH_HEAD # --trivial ?
# index now merged with FETCH_HEAD
# set HEAD to be FETCH_HEAD with dereferencing
git update-ref HEAD FETCH_HEAD
# update work tree without overwriting existing files (not forced)
# (existing un-added isn't overwritten)
git checkout-index -a
# can now check diffs for conflicts add either commit/edit/checkout
git diff --stat
git pull -vn # should be a no-op
这是我用来检查事物状态的一些命令:
git rev-parse HEAD FETCH_HEAD # what do they point to
git diff --stat HEAD FETCH_HEAD # differences
git merge-base HEAD FETCH_HEAD # common ancestor
for r in HEAD FETCH_HEAD; do echo $r ; git log --oneline $r | head -1; done
git name-rev $( git merge-base HEAD FETCH_HEAD )
# peek at index
git ls-files --directory --exclude-standard --stage
git diff-index --cached FETCH_HEAD # see "local changes" carried forward
关于git - 脏工作树中的非破坏性 Git check out ($HOME/.dotfiles),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10258988/
我正试图让这个 map 功能成为一个更具破坏性的版本。这意味着 map 函数会修改原始数组而不是新数组。 function map (array, callback) { var result =
破坏性 Lisp 函数名称中的“N”缩写是什么词? 最佳答案 这是一个直接的答案from Linearity的 link : The N stands for non-consing, meaning
这是带有数据绑定(bind)元素的 html: div data-bind="foreach: clientRequests" id="test2">
我是一名优秀的程序员,十分优秀!