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

Kei*_*son 5 migration git version-control tfs git-tfs

Git-TFS 有一个verify命令,帮助描述如下:“verify 命令有助于识别从 TFS 获取、克隆或快速克隆的不准确之处。” 我有一个专有存储库,我正在将其从 TFS 迁移到 Git。运行后git tfs verify发现 TFS 中存在的 Git 存储库中丢失了大量文件,并且在进行同步后立即执行此操作。这之前发生过一次,我炸毁了整个存储库并重新开始,但现在我又遇到了同样的问题。我之前已经用 Git-TFS 成功克隆了这个存储库(在我们开始迁移到 Git 之前,当时我只是在本地使用它)所以我知道它可以成功,但我宁愿不炸毁整个存储库并重新开始。

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

Kei*_*son 2

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

之前的两个解决方案都致力于修补回购协议的当前状态,但当然并没有说出历史的真相。如果有任何可能的方法可以按照 的思路做一些事情,那就太好了git tfs repair

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

我将我好的存储库作为远程添加到我试图修补的存储库中:

git remote add goodclone C:/path/to/good/clone
Run Code Online (Sandbox Code Playgroud)

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

git fetch goodclone
Run Code Online (Sandbox Code Playgroud)

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

我检查了一个分支来master进行这项工作。

git checkout -b repair
Run Code Online (Sandbox Code Playgroud)

为了更好地衡量,我还检查了好仓库远程的一个分支:

git checkout -b goodclone-master goodclone/master
Run Code Online (Sandbox Code Playgroud)

然后我合并:

git checkout repair
git merge --squash goodclone-master
Run Code Online (Sandbox Code Playgroud)

我必须修补一些事情,然后我就承诺了。我再次运行 TFS-Git 同步过程,切换到 master 并拉下最新的更改,重新调整 master 上的修复分支,将其合并到 master 中,然后推送。

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

当您没有另一个没有差异的存储库时

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