【问题标题】:Migrate code between unrelated repositories在不相关的存储库之间迁移代码
【发布时间】:2021-07-20 00:17:30
【问题描述】:

短背景

在我们的团队中,我们刚刚从 TFS 迁移到 git(我知道!)。不过我们还是要对TFS代码库进行维护,需要合并到git上的develop分支中。

我们已决定新的 git 存储库将不会镜像 TFS 的历史记录。相反,我们从包含来自 TFS 的整个代码库的初始提交开始。

所以,我们有这样的东西:

|   Dev (TFS)   |   tfs-default (git-tfs)   |   develop (git)   |
|---------------|---------------------------|-------------------|
|    CS0001     |          tfs0001          |                   |
|     ...       |           ...             |                   |
|    CS1000     |          tfs1000          |       c0000       |
|    CS1001     |          tfs1001          |       c0001       |
|    CS1002     |          tfs1001          |       c0002       |

...CS1000、tfs1000 和 c0000 之后的代码库相同,之后后续的变更集和提交再次发散。

作为旁注,我正在使用tfs bridge 将 TFS 变更集导入本地 git 存储库。 但是,这应该没有任何区别。 编辑:确实如此。 最后,我们在本地 repo 中得到了一个与我的 git develop 分支无关的分支(我们称之为 tfs-dev)。

挑战

我无法确定一个可以提供良好合并/重新定位体验的工作流程。无论我尝试什么,最终都会遇到将完整文件标记为不同的冲突(git 似乎没有检测到只有一行代码发生了变化)。

我正在使用的 git 版本:

▶ git --version
git version 2.28.0.windows.1

到目前为止我已经尝试过什么

  • tfs-dev 的交互式 rebase 超过 c0000。
  • cherry-pick CS1001 进入开发
  • git replace --graft tfs1001 c0000,然后在 c0000 上重新设置 tfs-dev(有和没有 -X theirs)
  • git replace --graft tfs1001 c0000 后跟 git filter-branch CS1001..HEAD
  • git replace --graft tfs1001 c0000 然后将分支推送到远程并重新基于不同的存储库

所有这些解决方案都导致我遇到完整的文件冲突,即使更改实际上是一行。

有人可以提出替代方案或告诉我我做错了什么吗? :)

提前致谢!

【问题讨论】:

  • tfs-dev 和 develop 都是 Git 分支吗?
  • 是的。 tfs-dev 源自 tfs 但它是一个 git 分支。
  • 来自develop,你能用git checkout tfs-dev .吗?这将从tfs-dev 分支暂存对跟踪文件的所有更改。
  • 这个问题没有详细说明平台。您可能需要检查 core.autocrlf 是否按照自述文件中的说明设置为 true。
  • 克隆到 git 时,autocrlf 默认为 false。 Issue #246 描述了细节。导入更改时,git replace 将引用存储库设置。对齐 autocrlf 可能会有所帮助。

标签: git git-tfs


【解决方案1】:

克隆到 git 时,autocrlf 默认为 false。 Issue #246 描述了细节。使用git replace 导入更改时,它将引用存储库设置。对齐autocrlf 是必要的,以避免混淆行尾。

【讨论】:

    猜你喜欢
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多