随着Git 2.32 (2021年第二季度)的到来,丹在2017年提出的答案现在可以应用于任何提交,而不仅仅是HEAD。
查看
提交 9a3e3ca,
提交 49470cd,
提交 94389e7,
提交 cb65514,
提交 6468784,
提交 e9525a8,
提交 534ff90,
提交 5cdae0f,
提交 cbb5de8,
提交 e4f8baa,
提交 bbffb02,
提交 22d5507,
提交 a94f911,
提交 e2b11e4,
提交 6d43585,
提交 f664304,
提交 8dc3240,
提交 d2f0f81,
提交 5a35697,
提交 b04538d,
提交 b269976,
提交 db6952b,
提交 f1cd2d9,
提交 63ac4f1,
提交 c4566ab,
提交 40b1e1e,
提交 f700406,
提交 f2bb7fe,
提交 914d512,
提交 4c996de (2021年4月27日) 由
Luke Shumaker (LukeShu
)合并。
(由Junio C Hamano -- gitster
--在提交 44ccb76中合并,2021年5月10日)
子树
: push:允许指定本地版本而不是HEAD
签名作者:Luke Shumaker
git subtree split
允许你指定一个不同于HEAD的版本。
'git push
'(man) 允许你指定本地内容和远程引用之间的映射关系。
把它们结合起来,使得git子树推送可以让你指定运行分离操作的本地内容,并将该分离操作的结果推送到远程引用。
git subtree
手册现在包括:
push <repository> [+][<local-commit>:]<remote-ref>
使用<local-commit>
的子树进行“分离”,然后执行“git push”将结果推送到<repository>
和<remote-ref>
。
这可以用于将您的子树推送到远程存储库的不同分支。
与“split”一样,如果没有给出<local-commit>
,则使用HEAD。
可选的前导“+
”会被忽略。
这意味着这将起作用:
git subtree push --prefix="sub dir" --annotate="*" ./"sub proj" HEAD^:from-mainline
^^^^^^
在Git 2.33(2021年第三季度),git subtree
实际上可以在Windows上工作。
请参阅提交77f37de,提交f7ee88f(2021年6月14日)由Johannes Schindelin(dscho
)。
(由Junio C Hamano -- gitster
--合并于提交e22ac8b,2021年7月8日)
subtree
:修复在Windows上GIT_EXEC_PATH
的健全性检查问题
签名作者:Johannes Schindelin
在
22d5507 ("
subtree
: don't fuss with PATH", 2021-04-27, Git v2.32.0-rc0 --
merge listed in
batch #15) 中,git子树在Windows上被彻底破坏了。
原因是它假定Unix语义,其中
PATH
是以冒号分隔的,并假定
$GIT_EXEC_PATH:
是
$PATH
的字面前缀。
这两个都不是真的,尤其是后者,因为
GIT_EXEC_PATH
是Windows样式的路径,而
PATH
是Unix样式的路径列表。
让我们确保
$GIT_EXEC_PATH
和
$PATH
的第一个组件引用不同的实体,然后才会出错。
我们通过使用命令
test <path1> -ef <path2>
来执行此操作,该命令验证
<path1>
和
<path2>
的inode是否相同。
不幸的是,根据
test
utility,这种结构是不可移植的。
但是,在实践中这并不重要,因为我们仍然首先查看
$GIT_EXEC_PREFIX
是否与
$PATH
的第一个组件字符串相同。
这将在Git for Windows之外的任何地方都给我们预期的结果,而Git for Windows自己的Bash确实处理
-ef
运算符。
以防我们
确实需要显示错误消息并且正在运行不支持
-ef
的shell,我们只需抑制该部分的错误输出即可。
这解决了
git-for-windows/git
issue 3260。
在 Git 2.35(2022 年第一季度)中,git subtree
(位于 contrib/
)的速度更快了。
请参见 提交记录 3ce8888(由 James Limbouris(jamesl-dm
) 于 2021 年 12 月 08 日提交)。
(由 Junio C Hamano -- gitster
-- 在提交记录 9b6eda0 中合并,时间为 2022 年 01 月 10 日)
子树
: 修复check_parents
中的参数处理问题
签名作者: James Limbouris
315a84f ("
subtree
: use commits before rejoins for splits", 2018-09-28, Git v2.20.0-rc0 --
merge listed in
batch #6) 更改了
check_parents
的签名,从 '
check_parents
[REV...]' 变为 '
check_parents
PARENTS_EXPR
INDENT'。
换句话说,父提交的变量列表变成了嵌入字符串的列表。
然而,在将其发送到
cache_miss
之前,它忽略了再次解包列表,导致每当存在多个父项时就会出现错误调用。
这种情况发生在处理合并提交时,最终结果是性能损失,因为进行了不必要的重新检查。
随后在 e9525a8 ("subtree
: have $indent actually affect indentation", 2021-04-27, Git v2.32.0-rc0 -- merge listed in batch #15) 中删除了缩进参数,但参数处理错误仍然存在。
为了保持一致性,在 check_parents
中接受多个参数,并将它们全部分别传递给 cache_miss
。
git subtree push --prefix=my/folder origin master
。 - Dan