当前位置:  开发笔记 > 运维 > 正文

什么是.git/info/grafts?

如何解决《什么是.git/info/grafts?》经验,为你挑选了3个好方法。

我试图弄清楚Git中的"移植物"是什么.

例如,在这里的一个最新评论中,Tobu假设使用git-filter-branch.git/info/grafts来连接两个存储库.

但我不明白为什么我需要这些移植物?似乎所有工作都没有最后两个命令.



1> Oli..:

来自Git Wiki:

移植点或移植物使得两个不同的开发线能够连接在一起.它的工作原理是让用户记录提交的伪造祖先信息.通过这种方式,您可以使git假装提交的父项集与创建提交时记录的不同.

使用移植物的原因

将开发移动到git时,移植可能很有用,因为它允许您克隆从另一个SCM可选项导入的旧历史.这为那些只想关注最新版本的用户保留了初始克隆,而开发人员可以获得完整的开发历史记录.

当Linus开始使用git来维护他的内核树时,没有任何工具可以转换旧的内核历史记录.之后,当旧的内核历史从bkcvs网关导入git时,创建了移植物作为一种方法,可以将两个不同的存储库绑定在一起.



2> VonC..:

Chris Johnsen 提到的用于加入两个存储库的移植方法不再完全有效(仅使用移植物). 使用Git 2.18(2018年第二季度)," " 的功能已被" "机制取代(现在已经有一段时间了). 内部代码在许多地方都支持它,为了放弃对"移植"机制的支持,这些代码已被清理 .
$GIT_DIR/info/graftsrefs/replace/

见提交a3694d9,提交f42fa47,提交8d0d81a,提交e2d65c1,提交f9f99b3,提交0115e03,提交fb40429,提交041c98e,提交e24e871(2018年4月28日),以及提交d398f2e,提交fef461e,提交c5aa6db(2018年4月25日)由约翰Schindelin (dscho).
(由Junio C gitsterHamano合并- -在提交352cf6c,2018年5月23日)

而不是

echo "$commit-id $graft-id" >> .git/info/grafts

你现在做:

git replace --graft $commit-id $graft-id
git filter-branch $graft-id..HEAD

弃用支持 .git/info/grafts

移植物特征是一种方便的方式,将古代历史"缝合在一起"的新起点linux.git.

然而,它的实现不符合Git的标准,因为它有太多的方式可以导致令人惊讶和不受欢迎的行为.

例如,当从具有活动移植物的存储库推送时,可能会错过已经"移植"的提交,从而导致另一端的破坏状态.

此外,移植功能仅限于"重写"提交的父母列表,它不能替代任何其他内容.

实施的更年轻的功能是git replace为了弥补这些限制和危险的错误.

眼见为git replace是相当成熟的现在(因为4228e8b (更换:添加--graft选项,2014年7月19日,Git的2.1.0),它可以进行移植文件的职责),现在是时候弃用对移植文件支持,并退最终.

现在(再次,Git 2.18,2018年第二季度),你有:

replace:添加--graft选项

此选项的用法字符串是:

git replace [-f] --graft  [...]

首先,我们创建一个与 其父项相同的新提交[...]

然后我们创建一个替换ref替换为我们刚创建的提交.

使用这个新选项,转换移植物以替换refs应该是直截了当的.


在Git 2.20(Q8 2018)之前,最近引入的提交图辅助数据与诸如替换和移植等"破坏"对象引用关系的不可变特性的机制不兼容.
在存储库中使用这些不兼容的功能时,根据其使用(以及更新现有的提交图)禁用优化.

请参阅Derrick Stolee()提交829a321,提交5cef295,提交20fd6d5,提交d653824,提交b775896,提交950c62b(2018年8月20日). 请参阅Stefan Beller()提交212e0f7,提交4a6067c(2018年8月20日).(由Junio C Hamano合并- -提交6d8f8eb,2018年10月16日)derrickstolee
stefanbeller
gitster



3> 小智..:

使用git-svn时:

git grafts对于将Git树导入Subversion存储库非常有用.

例如,我创建了一个本地Git存储库作为开始.经过几天的工作,创建了很多提交,我不得不将它发布到中央Subversion存储库中,我不想丢失历史记录.

我找到了以下How-to文章:http: //eikke.com/importing-a-git-tree-into-a-subversion-repository/

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有