Team Foundation Server 2015 (tfs2015) 运行 git gc --p运行e=现在 orgin/remote

Team Foundation Server 2015 (tfs2015) run git gc --prune=now on orgin/remote

有没有办法在远程 Team Foundation Server 2015 (tfs2015) 上 运行 git gc --prune=now?或者是在本地 运行 git gc --prune=now 然后在 tfs2015 上创建新存储库并将其推送到新远程,然后删除旧存储库并将新存储库重命名为旧名称的唯一方法。这样做时不要忘记关闭喜欢的提交。

参见 https://blogs.msdn.microsoft.com/congyiw/2015/12/14/why-does-cloning-from-vsts-return-old-unreferenced-objects/ - 这是 TFS 托管 git 的已知限制,它没有 gc 命令。

Microsoft 提供了两种解决方法:

  • 克隆存储库,在本地清理它,从服务器上删除它,创建一个新的并将清理过的存储库推送到它(你在问题中描述的内容)
  • 不要 git clone,而是像这样获取本地存储库:

    mkdir newRepo
    git init
    git remote add origin 
    #fetch one branch first
    git fetch origin master
    #fetch everything else
    git fetch origin
    

    这会欺骗 TFS 实际上只向您发送您真正需要的对象。

选项 1 对我来说似乎更合理,如果你能承受丢失你的拉取请求等(例如,如果这是一个相对较新的回购)。

选项 2 感觉非常糟糕,因为回购协议的任何用户都必须以这种方式手动创建他们的克隆。

有关在 TFS 中使用此功能的更新 v.Next 并且已准备好在 VSTS 中推出 https://blogs.msdn.microsoft.com/congyiw/2015/12/14/why-does-cloning-from-vsts-return-old-unreferenced-objects/“更新 (2017-08-09): 我们推出了提交可达性位图索引到 VSTS 并删除了下面提到的克隆作弊。克隆将不再下载无法访问的对象!。我们在服务器上还没有真正的对象级 git gc,但克隆大小现在会更小。

本地 TFS 将在 v.Next 中获得这些更改(不是在任何 TFS 2017 更新中,而是在下一个主要版本中)。正如 Brian Harry 提到的,我们应该在几周内有 v.Next 的候选版本。”