GIT中的一对一的映射用git-TFS rcheckin承诺TFS的变更(One-to-one ma

2019-08-17 02:33发布

上下文

  • 我们有一个发布分支一个Git仓库。
  • 我们有一个TFS回购(当前为空)。

我的任务是反映混帐回购协议到TFS的发布分支,以便在git的地图每一个承诺在TFS一个变更。 所有的开发者只致力于Git和(让我们假设),不知道TFS的。

读为rcheckin文档和回答这个相关的问题使我相信rcheckin能够这样做的。

问题

Git中的所有提交都压扁成一个单一的变更。

再现顺序:

git tfs clone http://tfs:8080 $/tfsrepo
cd tfsrepo
git remote add github git@github.com:REPO/Repo.git
git fetch github
git merge github/release
git tfs rcheckin

这导致一个签入到TFS包含所有的提交。

在解决问题的其他尝试

  • 克隆后,合并所述第一从源(GIT)回购提交,rcheckin创建共享基础

    • 这个工作,但随后的git pull github release ,随后git-tfs rcheckin导致犯再次挤压。
  • 对于在原点回购前几个提交,我合并他们一个接一个进入的git-TFS共享回购和每个之后rcheckin'd。

    • 这种工作,为每一个承诺,有在TFS一个变更。 然而,原始提交信息第二下方的“合并c02436de4f ...”的消息。
    • 这是不现实的每一个变更的事,即使有脚本。
    • 正如指出的patthoyts ,这将使我的commiter对这种变化就TFS而言。

我的问题

我有什么做的,让TFS了最新从混帐回购释放分公司,使每一个在git的承诺都有相应的TFS变更?

附加信息

我有两个回购协议的管理控制,我将能够在必要时重订的混帐回购协议,与由此引发的种种后果。 我只是不想失去我们已经创造了历史。

Answer 1:

我想你看到的是混帐TFS使用仅沿HEAD和TFS /默认之间的最短路径提交。 TFS的历史是改变的列表,而Git的是一个图,你打的是两者之间的阻抗失配。 为了得到什么混帐TFS是看到的画面,请尝试git log --graph --oneline --decorate HEAD tfs/default使用rcheckin之前。

如果你想在1:1 ::承诺:变更的东西,试试这个:

git tfs clone http://tfs:8080 $/tfsrepo
cd tfsrepo
git remote add github git@github.com:REPO/Repo.git
git fetch github
git tfs rcheckin github/release

另一种方法是使用摘樱桃或重订 。

git tfs clone http://tfs:8080 $/tfsrepo
cd tfsrepo
git remote add github git@github.com:REPO/Repo.git
git fetch github
git checkout -b about-to-be-rewritten-twice github/release
git rebase tfs/default
git tfs rcheckin

退房的底垫文档为重订的事情可以做更多的例子。

不要git push github about-to-be-rewritten-twice:release



Answer 2:

我不认为这会出来好。 如果修复制作提交,每个人都会有你comitted到TFS时刻的时间戳和用户ID。 comitting这些到TFS时,不能保持原作者或时间。 您可能会更好等待微软已经宣布TFS将在未来支持Git的。 因此,在不久的人需要使用TFS可以升级他们的工具和访问你真正的Git仓库。

我怀疑你的合并作出了合并提交,并导致该壁球。 你可以尝试的git-TFS分支重置您的git主人,然后按下提交。 我们使用git-TFS围绕其中共享的信息库是TFS的其他方式,我们都使用git使用Git TFS进行提交。 如果我创建一个分支,并添加一些,然后提交git tfs rcheckin不压扁到这些人,但提出了一系列配套什么,我有我的地方饭桶。 我也发现,使用“舞台”,然后在unstaging TFS做出承诺压扁一切为一体。 你没有说你为什么要镜像到TFS,但我建议你尝试,并在最近的微软公告指出他们,并告诉他们Git是未来! 即使TFS。 :)



文章来源: One-to-one mapping of git commits to TFS changesets using git-tfs rcheckin