2011-12-04 14 views
2

使用https://github.com/AndreyNikiforov/vault2git我能够将Vault repo转换为Git,然后使用Mercurial的hg convert来获得hg repo。唯一的问题是在运行hg convert后,更改集合提交日期的日期不正确。Vault to Git到Mercurial不能保存日期

日期显示更改集从got到mercurial而不是提交日期转换的时间。

我还需要做些什么来保存日期吗?

+0

可能是多余的问题,但为什么你会进一步从git转换为mercurial? :) – favoretti

+0

我的目标是让repo进入mercurial,而vault2git是我找到的唯一的x库。 – Omar

+0

@Omar git仓库中的时间戳是否正确? – Rudi

回答

2

我得到这个通过删除检查在hg convertgit扩展提交者信息的文件中https://www.mercurial-scm.org/repo/hg-stable/file/09b200396384/hgext/convert/git.py125130代码工作:

 if n == "committer": 
      p = v.split() 
      tm, tz = p[-2:] 
      committer = " ".join(p[:-2]) 
      if committer[0] == "<": committer = committer[1:-1] 
      committer = self.recode(committer) 

一旦你删除此,hg convert将用于作者信息日期。您需要复制repo链接中的convert扩展名,对其进行修改,然后将其添加到TortoiseHg。

为什么这需要做:

git犯,有两个记录在变更元数据:committerauthor

  • 作者是代码负责人。

  • 提交者实际上是对存储库进行了更改的人员。

这种区别是一个开源项目,其中谁编写代码的人并不一定是其提交至仓库的人员很重要:通常有接受拉项目的维护者(提交者)来自贡献者(作者)的请求并将其提交到存储库。

Vault2Git使用Vault签入信息(提交者和提交日期)作为git changeset作者信息。 git提交者信息使用git用户的信息和提交的实际日期(您的存储库的默认用户)。您可以通过对Vault2Git所做的更改集执行git cat-file <rev hash>来查看此差异。

这适用于git,但是当您运行hg convert时,Mercurial使用author名称和committer日期创建Mercruial变更集元数据。

1

您可以尝试hg-git而不是转换扩展名。这是两者之间的双向桥梁,意味着无损。这必须包括日期,否则每次你拉时哈希值都会改变。

+0

尝试这样做,但由于某种原因,它不会克隆使用vault2git创建的git repo。 – Omar

+0

让我想知道vault2git创建的git repo是否有点奇怪。它设法导致两种方法(通常工作)失败。 –