如何解决 Git-TFS verify 发现的差异

How to resolve discrepancies found by Git-TFS verify

Git-TFS 有一个 verify 命令,帮助描述如下: "The verify command helps identify inaccuracies of a fetch, clone or quick-clone from TFS." 我有一个专有存储库,我正在从 TFS 迁移到 Git。 运行 git tfs verify 显示我的 Git 存储库中缺少大量文件,这些文件存在于 TFS 中,并且在进行同步后立即出现。这发生过一次,我炸毁了整个存储库并重新开始,但现在我又遇到了同样的问题。我之前已经用 Git-TFS 成功克隆了这个存储库(在我们开始迁移到 Git 之前,当时我只是在本地使用它)所以我知道它可以成功,但我不想爆炸整个存储库并重新开始。

是否有一种自动修补验证命令显示的差异而无需重新克隆整个存储库的方法?我可以在 TFS 中检查项目并在必要时手动复制所有文件,但我希望有更好的方法。

我希望像 git tfs repair 这样的某种命令与验证命令相对应。但是,我没有找到类似的东西,而是能够通过两种不同的方式解决这个问题。我有两个存储库被搞砸了,其中一个我有另一个很好的副本(在部门开始从 TFS 迁移到 [=45 之前,我已经成功克隆它供我自己私人使用 Git =]).另一个我没有预先存在的副本,每次我尝试克隆它时都会遇到同样的问题。

之前的两个解决方案都可以修补 repo 的当前状态,但当然没有说出历史的真相。如果有任何可能的方法可以按照 git tfs repair.

的方式做某事,那就太好了

当您已经有另一个没有差异的回购时

我将我的好回购作为远程添加到我试图修补的回购:

git remote add goodclone C:/path/to/good/clone

然后我从那个遥控器获取:

git fetch goodclone

Git 发出警告,指出 none 的提交是相同的(这是它们在不同时间通过 Git-TFS 从 TFS 克隆的功能)。我知道这是真的所以没关系。这只是意味着克隆需要更长的时间。

我从 master 中查看了一个 b运行ch 来完成这项工作。

git checkout -b repair

我还从 good repo 的远程检查了一个 b运行ch,以备不时之需:

git checkout -b goodclone-master goodclone/master

然后我合并了:

git checkout repair
git merge --squash goodclone-master

我不得不修补一些东西,然后我承诺了。我再次 运行 TFS-Git 同步过程,切换到 master 并拉下最新的更改,将修复 b运行ched 重新定位在 master 上,将其合并到 master 中,然后推送。

据我所知,现在一切都很好!

当你没有另一个没有差异的回购时

我通过 TFS 克隆了存储库,然后使用 Vim 根据验证命令的输出创建了一个脚本,以从 TFS 存储库复制文件。在脚本中,我必须在复制文件之前对包含目录执行 mkdir -p。然后我提交了文件来修补问题。它似乎奏效了,但有点像 hack。