在不相关的存储库之间迁移代码
Migrate code between unrelated repositories
短背景
在我们的团队中,我们刚刚从 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 存储库。 但是,这应该没有任何区别。 编辑:确实如此。
最后,我们在我的本地仓库中得到了一个分支(我们称之为 tfs-dev),它与我的 git 开发分支无关。
挑战
我很难找到可以提供良好 merging/rebasing 体验的工作流程。无论我尝试什么,我最终都会遇到冲突,其中完整文件被标记为不同(git 似乎没有检测到只有一行代码发生了变化)。
我使用的git版本:
▶ git --version
git version 2.28.0.windows.1
到目前为止我尝试了什么
- tfs-dev 在 c0000 上的交互式 rebase。
- cherry-pick CS1001 开发
git replace --graft tfs1001 c0000
然后将 tfs-dev 变基到 c0000(有和没有 -X theirs
)
git replace --graft tfs1001 c0000
后跟 git filter-branch CS1001..HEAD
git replace --graft tfs1001 c0000
然后将分支推送到远程并在不同的存储库上变基
所有这些解决方案导致我遇到完整的文件冲突,即使更改实际上是一行。
有人可以提出替代方案或告诉我我做错了什么吗? :)
提前致谢!
克隆到 git 时,autocrlf
默认为 false
。 Issue #246描述了细节。使用 git replace
导入更改时,它将引用存储库设置。必须对齐 autocrlf
以避免行尾混淆。
短背景
在我们的团队中,我们刚刚从 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 存储库。 但是,这应该没有任何区别。 编辑:确实如此。 最后,我们在我的本地仓库中得到了一个分支(我们称之为 tfs-dev),它与我的 git 开发分支无关。
挑战
我很难找到可以提供良好 merging/rebasing 体验的工作流程。无论我尝试什么,我最终都会遇到冲突,其中完整文件被标记为不同(git 似乎没有检测到只有一行代码发生了变化)。
我使用的git版本:
▶ git --version
git version 2.28.0.windows.1
到目前为止我尝试了什么
- tfs-dev 在 c0000 上的交互式 rebase。
- cherry-pick CS1001 开发
git replace --graft tfs1001 c0000
然后将 tfs-dev 变基到 c0000(有和没有-X theirs
)git replace --graft tfs1001 c0000
后跟git filter-branch CS1001..HEAD
git replace --graft tfs1001 c0000
然后将分支推送到远程并在不同的存储库上变基
所有这些解决方案导致我遇到完整的文件冲突,即使更改实际上是一行。
有人可以提出替代方案或告诉我我做错了什么吗? :)
提前致谢!
克隆到 git 时,autocrlf
默认为 false
。 Issue #246描述了细节。使用 git replace
导入更改时,它将引用存储库设置。必须对齐 autocrlf
以避免行尾混淆。