Ult*_*ter 5 git version-control merge git-svn
我有两个存储库:
7个月前,当我们的项目开始时,有人在github上拍摄了gephi项目的快照并将其保存到公司svn =>更改历史记录丢失
现在我决定将我们的项目移动到git存储库并将更改与原始项目合并
我现在有git存储库从svn迁移到git-svn
我的文件在项目开始之后没有更改历史记录
我可以将存储库的初始状态映射到原始存储库的状态吗?换句话说,我想从特定版本开始将我们的更改应用于原始存储库.
更新:
今天我发现了另一个障碍.架构优先:

红色分支是原始项目
<alpha1>并且<alpha2>是主项目插件的提交(与提交的代码无关<E' E'' E'''>)
in <E'> <E''> <E'''>是从主项目(红色)存储库添加代码<E>(在每个提交cca的三分之一项目中<E>)
我把红色和蓝色的存储库合二为一.在第二个模式我有所需的状态.是否有可能做到这一点?(例如,从使<E' E'' E''>只有一个提交(<E'>),然后标记该承诺作为从分支合并<ABCD>和<alpha1 alpha2>)
谢谢Julien的回复.这似乎非常有帮助.
免责声明:我现在已经对此进行了测试,看起来它的工作正常(假设我当然理解正确).但是,还有很多可能出错的地方.绝对只能在项目存储库的单独工作副本上进行尝试,并确保在将其推送到任何地方之前检查所有内容.在执行此操作之前,请保持状态的完整目录备份.
所以我假设你有两个独立的存储库.原始项目(Gephi):
A---B---C---D---E
^ HEAD of Gephi
Run Code Online (Sandbox Code Playgroud)
您的项目,其第一个修订版看起来与原始项目的最新修订版完全相同:
E'---V---W---Y---...---Z
^ HEAD of your project
Run Code Online (Sandbox Code Playgroud)
(可能有一些分支,但这在这里并不重要.)
你想拥有的(如果我理解正确的话)是:
A---B---C---D---E---V---W---Y---...---Z
Run Code Online (Sandbox Code Playgroud)
您可以尝试以下方法.再次,在您自己的独立工作树上执行此操作,并在将其推送到任何中央存储库之前确保一切正常!
在您自己的工作树的目录中,获取原始Gephi存储库的头部和对象:
git fetch /path/to/original/gephi
Run Code Online (Sandbox Code Playgroud)
如果您还没有克隆Gephi存储库,那么您也可以指定github URL而不是本地文件系统路径.
这将导致当前工作树中出现以下情况:
A---B---C---D---E
^ FETCH_HEAD
E'---V---W---Y---...---Z
^ HEAD
Run Code Online (Sandbox Code Playgroud)
我们没有改变很多.目前,这两个元首并行地完全独立地共存,但您现在可以访问两个存储库中的对象,并可以尝试将它们组合在一起.
我们现在想要丢弃E'(它应该与E相同),而是使E成为项目第一次提交的父级,即V.为此,您可以使用git filter-branch:
git filter-branch -f --parent-filter 'test $GIT_COMMIT = <V> && echo "-p <E>" || cat'
Run Code Online (Sandbox Code Playgroud)
更换<V>以及<E>由分别提交伏且E的哈希值.为了找到这些,你可以git log检查你的项目的提交,并且,因为我们已经提取它们,git log FETCH_HEAD检查Gephi的提交.
这将有效地将V直接连接到E.
如果事实证明原始Gephi存储库的头部(即最新提交)不是您基于项目的内容,这甚至可以工作,这意味着Gephi中有新的提交(你还没有?)已搞定.请确保,再次<E>使用基于您的更改的提交的哈希替换,而不是使用头部.
相反,请确保<V>使用您所做的第一个更改的哈希替换.也许您的存储库不包含与E相同的E',但第一次提交已包含对原始的更改.然后这个第一个提交哈希将是你的<V>,而不是它之后的哈希.
总结最后几段:如果您的情况如下所示,上述命令也应该起作用,例如:
A---B---C---D---E---F---G---H---I
^ ^ FETCH_HEAD
point where your project branched off
V---W---Y---...---Z
^ ^ HEAD
first change based on E
Run Code Online (Sandbox Code Playgroud)
只需确保使用在此上下文中有意义的提交哈希.