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

时间:2015-02-16 15:27:06

标签: git version-control tfs migration git-tfs

Git-TFS有一个verify命令,帮助描述如下:“验证命令有助于识别从TFS获取,克隆或快速克隆的不准确性。”我有一个专有的存储库,我正在从TFS迁移到Git。运行git tfs verify显示我的Git仓库中存在大量文件,这些文件存在于TFS中,并在执行同步后立即生效。这发生过一次之前,我抨击整个存储库并重新开始,但现在我又遇到了同样的问题。我之前已经使用Git-TFS成功克隆了这个存储库(在我们开始迁移到Git之前,当时我刚刚在本地使用它)所以我知道它可以成功,但我宁愿不爆炸整个存储库并重新开始。

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

1 个答案:

答案 0 :(得分:1)

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

之前的两个解决方案是为了修补当前的回购状态,但当然并没有说出历史真相。如果有任何可能的方法可以按照git tfs repair的方式做某事,那将会很好。

当您已经有另一个没有差异的仓库时

我将我的好回购添加为我试图修补的回购的遥控器:

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

然后我从遥控器中取出:

git fetch goodclone

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

我从master检出了一个分支来完成工作。

git checkout -b repair

我还从好的回购遥控器上检查了一个分支,以便做好准备:

git checkout -b goodclone-master goodclone/master
然后我合并了:

git checkout repair
git merge --squash goodclone-master

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

据我所知,现在情况很好!

当您没有其他没有差异的回购时

我通过TFS克隆了存储库,然后使用Vim从verify命令的输出创建一个脚本,以从TFS存储库复制文件。在脚本中,我必须在复制文件之前对包含目录执行mkdir -p。然后我提交了文件来补丁。它似乎已经奏效,但却是一种黑客行为。