我在git上添加了一个子树,它似乎正在工作。我进入目录,做了一些更改,然后按。
我注意到这些更改显示在父项目中,但我用作源的存储库尚未更新。
我尝试了git subtree push
,它返回:
您必须提供--prefix选项。
还有返回的git subtree push --prefix=my/folder git@mygitrepo.com
:
您必须提供
<repository> <ref>
将更改推送到我的git子树的原始repo的正确方法是什么?
编辑:有人建议我这样做:
git subtree push --prefix=my/folder origin master
当我运行上面的程序时,它开始了这个过程,但最后说分支落后了。所以我运行:
git subtree pull --prefix=my/folder origin master
返回"已更新">
因此,通过与@PhilipKirkbride的共同努力,我们成功地解决了以下问题:
你需要把所有的细节放在命令中:
git subtree push --prefix=my/folder subtree_origin master
其中master
是子树中的分支,而subtree_origin
只是另一个远程,它恰好指向子树的git存储库。您也可以键入完整的repo URL。
使用Git 2.32(2021年第二季度),Dan 2017年的答案可以应用于任何提交,而不仅仅是HEAD。
请参阅提交9a3e3ca、提交49470cd、提交94389e7、提交cb65514、提交6468784、提交e9525a8、提交534f90、提交5cdae0f、提交cbb5de8、提交e4f8baa、提交bbffb02、提交22d5507、提交a94f911、提交e2b11e4、提交6d43585、提交f664304、提交8dc3240、提交d2f0f81、提交5a35697、提交b04538d、提交b269976、提交db6952b、提交f1cd2d9、提交63ac4f1,Luke Shumaker(LukeShu
)的commit c4566ab、commit 40b1e1e、commit f700406、commit f2bb7fe、commit 914d512、commit 4c996de(2021年4月27日)
(由Junio C Hamano合并——gitster
——于2021年5月10日提交44ccb76)
subtree
:push:允许指定HEAD以外的本地rev签字人:Luke Shumaker
git subtree split
允许您指定除HEAD之外的版本
'git push
'(man)允许您指定本地事物和远程引用之间的映射因此,将它们粉碎在一起,使用git-subtree-push可以指定在哪个本地对象上运行拆分,并将拆分结果推送给远程引用
git subtree
手册页现在包括:
push <repository> [+][<local-commit>:]<remote-ref>
使用
<local-commit>
的子树执行"split",然后执行"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上工作。
参见Johannes Schindelin(dscho
)的提交77f37de,提交f7ee88f(2021年6月14日)
(由Junio C Hamano合并——gitster
——于2021年7月8日提交e22ac8b)
subtree
:修复GIT_EXEC_PATH
健全性检查以在Windows上工作签字人:Johannes Schindelin
在22d5507("
subtree
:不要对PATH大惊小怪",2021-04-27,Git v2.32.0-rc0——第15批中列出的merge)中,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
实用程序,这种构造是不可移植的
然而,在实践中这并不重要,因为我们仍然首先查看$GIT_EXEC_PREFIX
是否与$PATH
的第一个组件相同
这将为我们提供预期的结果,但在Git for Windows中除外,而Git for Windows自己的Bash也处理-ef
运算符。如果确实需要显示错误消息和正在一个不支持
-ef
的shell中运行,我们只需抑制该部分的错误输出。这修复了
git-for-windows/git
问题3260
使用Git 2.35(2022年第一季度),git subtree
(在contrib/
中)更快。
参见James Limbouris提交的3ce8888(2021年12月8日)(jamesl-dm
)
(由Junio C Hamano合并——gitster
——于2022年1月10日提交9b6ed10)
subtree
:修复check_parents
中的参数处理签字人:James Limbouris
315a84f("
subtree
:在重新加入之前使用提交进行拆分",2018-09-28,Git v2.20.0-rc0——第6批中列出的merge)将check_parents
的签名从"check_parents
[RREV…]"更改为"check_parents
PARENTS_EXPR
INDENT">
换句话说,父修订的变量列表变成了嵌入字符串中的列表
但是,在将列表发送到cache_miss,
之前,它忽略了再次解压缩列表,导致无论何时出现多个父级,都会进行不正确的调用
每当处理合并提交时,都会出现这种情况,最终结果是由于不必要的重新检查而导致性能损失。indent参数随后在e9525a8中被删除("
subtree
:have$indent actual impact indentation",2021-04-27,Git v2.32.0-rc0——第15批中列出的merge),但参数处理错误仍然存在。为了保持一致性,在
check_parents
中取多个参数,并将所有参数分别传递给cache_miss
。
通常输出目录,如dist
或public
在.gitignore中被忽略。如果你想在这些路径上使用git subtree
,你必须
git add <DIR to be subtree pushed>
然后是CCD_ 58。
完成以上两个步骤后,您可以将生成的目录git subtree push
放到存储库的单独分支中。