我想分享我的类似经历并给予一些希望。
背景
在我的公司,我们还没有迁移到 git 并且仍然使用 TFVC 进行版本控制。由于 git 在一切方面都非常出色,因此我开始使用本地 git 存储库来完成我的工作。工作流程基本上是使用 git 作为草稿工作区,然后在准备就绪时分块提交到 TFVC。问题是我的 git 存储库只是本地的。
程序
为了签入到 TFVC,我保留了一个 sync 分支,该分支与 TFVC 分支保持同步。所以我有本地 git 分支feature-1、feature-2 等。然后我检查我的sync 分支。确保它与 TFVC 同步,将我要提交到 TFVC 的 git 内容合并到 sync,提交到 TFVC。
问题
很难描述 TFVC 造成的痛苦和折磨,而不是完全抨击创造它的人,我至少希望这是他们的最佳意图。假设 git 在我看来是一款出色的软件,而我使用 TFVC 的经历并不完全愉快。
为了控制我的提交(并且因为 TFVC 不够出色),我通过将本地工作区与服务器同步来启动该过程。为此,您可以使用命令tf reconcile 和选项clean,本质上是“获取服务器工作区”。现在,我的 git 存储库位于 TFVC 存储库中(错误)。 TFVC 背后的好人决定 tf reconcile /clean 的合适默认值是清理被忽略的文件 (??)。通常,这不是问题,因为您会得到一个可爱的 (/s) GUI(???),它会提示您要清理的文件。
也许你是一个不喜欢终端的人,在这种情况下你可能会使用 Power Shell 之类的东西。或者,也许你喜欢它是可怕的,所以你使用命令提示符。我,我喜欢 bash。问题是由于未知的原因,在 bash 中没有显示上述提示。我的意思是,你在 bash 中,所以你为什么要打开一个愚蠢的 GUI 窗口。由于 GUI 没有显示,失败或其他什么,接下来发生的事情是一件美丽的事情。 TFVC 只是继续。
结果
$ tf reconcile //clean
Deleting .git
$ git status
fatal: not a git repository (or any of the parent directories): .git
...
解决办法
谢天谢地,TFVC 并没有彻底摧毁一切。事实证明,不理会一些事情已经足够好了(这似乎有些武断)。
在恐慌之后,我下载了 Recuva,试图解开 TFVC 刚刚做了什么。
原来它能够恢复.git 文件夹中的一些文件。一堆二进制哈希文件,但似乎更重要的是,像HEAD 这样的文件。
我恢复了可以恢复到单独驱动器上的单独文件夹的删除文件(以避免写入扇区)。然后将原始位置复制到恢复的位置(不覆盖)。瞧:
$ git status
On branch main
与原始位置进行比较得到:
Only in .git: COMMIT_EDITMSG
Only in .git: config
Only in .git: config_1
Only in .git: description
Only in .git: HEAD
Only in .git: HEAD_1
事实证明,TFVC 使大部分存储库完好无损,文件恢复足以让本地存储库重新启动并运行。有些东西似乎丢失了,比如存储,但我在 git 中而不是在 TFVC 中提交给分支的工作似乎可以恢复。
外卖
- 取决于已删除的内容和可以恢复的内容,它是
您可能可以恢复已删除的 git 存储库。我想象它
取决于哪些文件被删除/可恢复。
- 只有在讨厌生活的情况下才使用 TFVC
编辑
如果在我的情况下,大部分 git repo 都完好无损(或者如果大部分是可恢复的),则可能只运行 git init