【发布时间】: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可能会有所帮助。