- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
关于 git-filter-branch ,据说:
To set a commit (which typically is at the tip of another history) to be the parent of the current initial commit, in order to paste the other history behind the current history:
git filter-branch --parent-filter 'sed "s/^\$/-p <graft-id>/"' HEAD
(if the parent string is empty - which happens when we are dealing with the initial commit - add graftcommit as a parent).
这正是我想要的,即设置一些根提交(A
)的父级(提交B
)。参见 here一个相关的问题。
但是那个命令中的 graft-id 到底是什么?那是新的 parent 吗,即A
?
进一步,给出了一个更简单的例子来实现同样的目的:
or even simpler:
echo "$commit-id $graft-id" >> .git/info/grafts
git filter-branch $graft-id..HEAD
同样,什么是 $graft-id
应该在这个例子中?和 $commit-id
= A
, 正确的?或者是$commit-id
= B
和 $graft-id
= A
?
我还读了this但我仍然不太明白为什么我需要这样一个概念。为什么我不能做 git filter-branch A..HEAD
还是这样?
好吧,我想我明白了,看看我自己的答案。
解释我为什么需要它:
在我们的项目中OpenLieroX ,我们曾一度包含 Google Breakpad。
我们没有从官方 SVN 中获取它(因为它当时对我不起作用)而是从最新的 LastFM stable 中获取(它只是随机的,来自那里 - 我也有它我的磁盘,并且知道 LastFM 的人可能使用了一些稳定的 Breakpad 版本)。
然后,随着时间的推移,我们对自己的 Google Breakpad 副本应用了几个补丁。
现在,几个月后,我们想要稍微清理一下历史记录,对我们所有的 Breakpad 补丁有一个很好的了解,也许还可以让它们上游。最重要的是(对我们而言),我们想更新我们的 Breakpad 副本。
所以,我认为最好的办法是创建一个新的 Git 存储库,从某个地方获取官方源代码历史记录并通过 git filter-branch
从我们的主存储库中获取所有 Breakpad 特定的东西|进去。我用了this Breakpad mirror作为基地。 filter-branch
也有点复杂,因为我们将整个 Breakpad 目录移动到 OpenLieroX 存储库中的一个位置。
所以我最终得到了三个分支:
breakpad-in-mainsrc
: git filter-branch
-Breakpad 在 src/breakpad/external
时的首次运行.breakpad-in-libs
: git filter-branch
-Breakpad 在 libs/breakpad
时的第二次运行.official
:master
的副本来自 Breakpad mirror .然后我在 official
中搜索提交最接近 breakpad-in-mainsrc
中的根.我没有得到任何完美匹配,所以我使用了最接近的一个(写了一个小的 Python 脚本来解决这个问题)。这个现在被标记为 olx-closest-initial-breakpad
.
然后我想将这三个历史 merge 在一起。这按照上述方式进行得很好(并在下面给出了我自己的答案)。
最佳答案
好的,它似乎按我预期的方式工作。回答我自己的问题:
$commit-id
= B
(但它必须是 SHA1,没有标签等)$graft-id
= A
(同样,必须是 SHA1)然后给定的更简单的方法按预期工作。
关于Git:什么是 graftcommit 或 graft-id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6088551/
当hg graft失败,它留下.hg/graftstate它发出嫁接命令,表明嫁接正在进行中并且可以继续。除了删除.hg/graftstate ,有没有更干净的方法来中止嫁接? 最佳答案 你要hg u
在 git 中进行浅克隆时(使用 --depth 选项),根提交被标记为 grafted。 谷歌搜索没有找到任何令人满意的文档。 好像和git grafts没有关系,类似的术语暗示。 它只是一个标志,
我使用 git replace --graft 来记录一个版本实际上是两个版本之间的(手动执行的) merge : git replace --graft 这对我的(本地、私有(private
我想弄清楚 Git 中的“嫁接”是什么。 例如,在最新评论之一here , Tobu 假设使用 git-filter-branch 和 .git/info/grafts 加入两个存储库。 但我不明白为
关于 git-filter-branch ,据说: To set a commit (which typically is at the tip of another history) to be t
因此我们创建了一个模板项目“template_proj.git”。 更新 git 版本是:Windows 7 prof 上的 2.14.1 我们有一些新的项目是空的,除了它们有一个带有 .gitign
关于 git grafts 与 replace 的问答很少。搜索 [git] +grafts +replace 只找到两个与 5 相关的。what-are-git-info-grafts-for和 g
我正在使用 Rails 4 并在尝试启动 Rails 控制台时收到此错误 undefined method `graft' for class `ActiveRecord::Associations:
我正在从 Subversion 过渡到 Mercurial,在 Subversion 中我习惯使用 svnmerge.py 来跟踪已 merge 或已被阻止 merge 的更改: # Mark cha
我是一名优秀的程序员,十分优秀!