【发布时间】:2012-04-02 10:57:14
【问题描述】:
我发现 git 有一个奇怪的行为,我每次都可以在我的机器上重现它。
如果我有两个本地存储库,一个在文件夹 express.git 中裸露,另一个在文件夹 express 中带有工作树的非裸露,两者都在同一个父文件夹中,我可以执行命令 git pull ../express.git from在express 文件夹内。这会自动更新 express 中的所有内容。
但是,如果我从任何一个 git 存储库中都不存在的位置运行命令 git --git-dir /home/cisw470p/stu006/express/.git pull /home/cisw470p/stu006/express.git master,那么 express 存储库将提取更改,但不会自动更新工作树。然后我必须运行git add . 来添加所有更改,然后从express 内部再次提交,现在一切都很好。
为什么使用 --git-dir 选项的命令的长版本不会自动更新 express 的工作树?这是有原因的,还是我发现了一个错误?
编辑:我又试了一次,但编辑了一个不同的文件,现在它可以工作了。我完全迷路了。
【问题讨论】:
-
你期望 git 如何找到长格式的工作树?您是否尝试添加
--work-tree=...参数? -
在
express内部是工作树以及.git文件夹,就像一个普通的repo。 -
当给
git一个明确的 git-dir 时,你为什么期望它只是假设 git dir 的父级是一个工作树?在许多情况下,这可能是一个相当危险的假设(特别是,如果 git 目录实际上是一个裸仓库) -
好点。我仍然熟悉 git。到目前为止,我只遇到过裸仓库或工作树位于 .git 文件夹的父级的仓库,所以我认为它就像一个默认值。让我看看工作树选项是否解决了所有问题。
-
大多数人甚至从不使用
--git-dir或--work-tree标志。它们大多只在编写需要访问和访问其他存储库的深奥脚本时才有用。使用这些选项时,您需要指定所有内容,因为您明确告诉 git 不要遵循其默认的启发式方法来检测它们。
标签: git