gpt4 book ai didi

git - 非常大的 TFS 存储库——来自子文件夹的

转载 作者:太空狗 更新时间:2023-10-29 14:05:04 25 4
gpt4 key购买 nike

我将非常感谢有关如何继续手头以下任务的所有建议。我已经相当彻底地阅读了有关 git-tfs clonegit-tfs quick-clonegit-tfs branch 的文档,但仍然没有能够攻破这个问题。

我们的 TFS 代码库非常大(之所以如此,是因为出于令人厌恶的原因,它包含大型 BLOB 等)。然而,它组织得相当好,具有以下结构:

 $/TeamProject/Dev (TERRIBLY LARGE)
|
+- $/TeamProject/Dev.EpicX (TERRIBLY LARGE)
|
+- $/TeamProject/Dev.EpicY (TERRIBLY LARGE)
|
+- $/TeamProject/Dev.EpicZ (TERRIBLY LARGE)

这些分支中的每一个都是“合法的”TFS 分支(-vs- 只是分支的“文件夹”)。我们可以将 Dev 分支视为主要的集成分支。这些分支包含我们的解决方案和项目,以及一些其他资源(如我提到的,BLOB 等...)

正如我所说,由于这些分支的大小荒谬,我们大多数人甚至都懒得去获取一个完整的分支,而只是获取我们正在处理的相应目录或解决方案。例如,我在 Dev.EpicY 分支的 $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory 工作。 SolutionDirectory 下源的大小更易于管理(~200MB)。这是我需要创建一个 git 存储库来完成工作的目录,同时享受所有 git 优点(本地分支等),而不会影响我将继续使用 TFS 的同事.

最重要的是:我需要能够通过从不断开发的相应“父级”$/TeamProject/Dev/Foo/Bar/SolutionDirectory“merge ”来进行前向集成。


我尝试过的

第一次尝试:克隆所有分支

我对项目过去的历史不感兴趣,所以我想使用 git tfs quick-clone

git tfs quick-clone http://tfs-server/Collection $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory . --branches=all

其次是:

git tfs quick-clone http://tfs-server/Collection $/TeamProject/Dev/Foo/Bar/SolutionDirectory . --branches=all

当我这样做时,我没有得到 DevDev.EpicY 之间的父子分支关系。例如:

git tfs branch

Git-tfs remote details:
default -> http://tfs-server/Collection $/TeamProject/Dev/Foo/Bar/SolutionDirectory
refs/remotes/tfs/default - 04ddfd8641096a2d02eed4c087423bc0cdeb4ed7 @ 44016

第二次尝试:显式初始化分支

克隆后。现在我什至得到一个错误:

git tfs branch --init --all

error: The use of the option '--branches=all' to init all the branches is only possible
when 'git tfs clone' was done from the trunk!!! '$/TeamProject/Dev/Foo/Bar/SolutionDirectory'
is not a TFS branch!

第三次尝试:转到 TFS 并将子文件夹转换为分支

对于 git tfs 来说,常规文件夹 与 TFS 中的 分支 之间的区别似乎很重要,所以我去了 TFS 并转换了 < strong>SolutionDirectory 到一个分支,连同它的层次结构:

 $/TeamProject/Dev/Foo/Bar/SolutionDirectory
|
+- $/TeamProject/Dev.EpicX/Foo/Bar/SolutionDirectory
|
+- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
|
+- $/TeamProject/Dev.EpicZ/Foo/Bar/SolutionDirectory

现在当我运行 git tfs branch --init --all 时有一些进展,但它仍然失败并出现一个奇怪的错误:

git tfs branch --init --all

Tfs branches found:
- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
=> Working on TFS branch : $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
Branches to Initialize successively :
-$/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory (43506)
The name of the local branch will be : Dev.EpicY/Foo/Bar/SolutionDirectory
error: an error occurs when initializing the branch. Branch is ignored and continuing...
=> Working on TFS branch : $/TeamProject/Dev/Foo/Bar/SolutionDirectory
warning: Some Tfs branches could not have been initialized:
- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory

Please report this case to the git-tfs developers! (report here : https://github.com/git-tfs/git-tfs/issues/461 )
warning: Some Tfs branches could not have been initialized or entirely fetched due to errors:
- $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
=>error:error: Couldn't fetch parent branch

最佳答案

文档有些简洁,但我最终成功地实现了创建一个仅包含必要历史记录和来自 TFS 子目录的分支代码库的 git 存储库的精确目标。

事实证明,建议克隆一个主干并不意味着你必须克隆主干及其分支的整个历史,而不是强制你作为分支留在顶级TFS文件夹中。

的确,为了让 git-tfs 从 TFS 中选取一个分支,它必须是一个 TFS 分支(而不仅仅是一个已经被分支的文件夹)。但您可以暂时将所需的 SolutionDirectory 文件夹转换为 TFS 分支!这是关键。

这是采取行动的正确顺序:

  1. $/TeamProject/Dev 分支到 $/TeamProject/Dev.EpicY 以开发 ~/Foo 时,识别 TFS 变更集/Bar/SolutionDirectory

    • 假设这个变更集是:43541
  2. 确保 $/TeamProject/Dev/Foo/Bar/SolutionDirectory$/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory TFS 分支机构

  3. 假设您要在当前目录中初始化 git 存储库,请运行以下命令:

    PS> git tfs clone --changeset=43541 --branches=all `
    http://tfs-server/Collection $/TeamProject/Dev/Foo/Bar/SolutionDirectory .
  4. 显示的输出将显示如何在整个过程中选择 TFS 分支并获取相应的提交

    Initialized empty Git repository in E:/git-tfs/SolutionDirectory/.git/
    Fetching from TFS remote 'default'...
    1 objects created...
    C43541 = 731d29764d88e424b9d6dfb9a34c107aa4cca9c3
    C43608 = aebc94b96079e73e88ea74ed859eec65440c3b03
    C43609 = 64c03137f555345ec7f24fefc992162e6e082a98
    ...
    C44016 = e1b5c55efa528733ecaa3afba31b05cf1a310cb4
    Tfs branches found:
    - $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
    => Working on TFS branch : $/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory
    Branches to Initialize successively :
    -$/TeamProject/Dev.EpicY/Foo/Bar/SolutionDirectory (43506)
    The name of the local branch will be : Dev.EpicY/Foo/Bar/SolutionDirectory
    C43541 = 73589d08398415549fbad191b06c55a272c7ca37
    C43666 = c4bbe9b09138331041cb958cbc8b89f16f7a2902
    C43670 = e7c1e4c787c6c4a745baed46da0eb5d0e3f2fc79
    ...
    C44019 = b2401575dec8347e1debc701073f523aa09e668c
    => Working on TFS branch : $/TeamProject/Dev/Foo/Bar/SolutionDirectory
  5. 开心:)

关于git - 非常大的 TFS 存储库——来自子文件夹的 <git tfs branch>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37055047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com