5

我在尝试从 TFS 中提取我的最新更改并将它们添加到 BitBucket 存储库时遇到问题。我已经成功地将我的分支推送到 BitBucket 中,但是当我尝试从 TFS 获取任何新的签入时,我总是会遇到合并冲突。

脚步:

  1. git tfs clone http://TFS-ADDRESS/Collection $/Project/Name/Branch
  2. git tfs init-branch $/Project/Name/NewBranch NewBranchName
  3. git push -u origin --all

此时,我的 BitBukcet 存储库包含了我所有来自 TFS 的文件和历史记录。然后我在 TFS 上检查了我的 $/Project/Name/NewBranch。

现在我想从 TFS 获取最新的变更集并将它们添加/提交到 BitBucket 存储库 注意:此时,TFS 或 BitBucket 中的其他分支没有更改。唯一的变化是我单次签入到 TFS

当我在我的 NewBranch 上执行以下操作时,我遇到了合并冲突:

git tfs pull

Auto-merging Source/build.version
CONFLICT (content): Merge conflict in Source/build.version

据我所知,即使 NewBranch 是最新的代码,它也正试图将我的“master”的更改合并到我的“NewBranch”。ptfs pull 命令正在拉下最后一个检查集,但随后尝试进行合并。如果我使用

git tfs fetch --all

我看到列出的变更集,但我无法将其提交/推送到 BitBucket 存储库。我在网上找不到参考资料来说明我做错了什么,或者我需要采取哪些步骤(我是 Git 新手)。任何人都可以帮忙吗?

我最终希望将其自动化,以便可以获取 TFS 中的任何签入并将其添加到 BitBucket 存储库(直到我们最终将所有开发人员移至 BitBucket)

谢谢

编辑我正在尝试将更改从 TFS 更改为 BitBucket。BitBucket 没有向 TFS 添加任何内容。

所有工作都在一个分支上完成(见下文)。用户正在 TFS 中工作。用户在那里提交他们的更改。注意:没有人对 BitBucket 存储库进行编辑。它是 TFS 的副本。每天一次,我想将每个 TFS 分支的最新变更集拉到我的本地 git 文件夹,然后将它们推送到 BitBucket。“git tfs fetch”检索变更集:

D:\development\workspaces\git\anothertry>git tfs fetch --all
C83419 = 3abdaedf571369dce15f74a52697d86069f87d6d

但是“git status”告诉我没有什么可以提交的

D:\development\workspaces\git\anothertry>git status
# On branch Feature
nothing to commit, working directory clean

当我尝试将这个变更集推送到 BitBucket 中时,git 告诉我没有什么可以提交的。

分支机构

Master---o---------------o----o--o-o--o-------
          \             /    /  / /  /
           Feature-----o----o--o-o--o
4

3 回答 3

2

在使用 Git Extensions 之后,我似乎找到了答案。

看来我需要提取

git tfs fetch --all

这将为我的主干和我映射的任何分支(init-branch)从 TFS 获取所有变更集

D:\development\workspaces\git\anothertry>git tfs fetch --all
C83454 = f65ba8d0cc7b40f42148ba2c06d0da8b7e968c4d
C83455 = 6c25feb6e74a09d0d3d84344002e7546044900ab
C83459 = 91c4450d702d5a97e862aedd7ad1b5af3ff2c375
C83460 = 5cacaba5bfe4197c1bf9fab498f51c1ba435e6ea

接下来我需要执行合并

git merge <guid>

注意:这是最新的变更集(在本例中为 5cacaba...)

Updating 6c25feb..5cacaba
Fast-forward
 Source/Common/w32threads.h             | 1238 ++---
 Source/xxxxxxx_Service/ServerAgent.cpp | 3638 ++++++-------
 Source/xxxxxxx_Service/ServerAgent.h   |  449 +-
 Source/xxxxxxx_Service/User.cpp        | 9073 ++++++++++++++++----------------
 Source/xxxxxxx_Service/User.h          |  647 +--
 Source/build.version                   |    2 +-
 6 files changed, 7562 insertions(+), 7485 deletions(-)

最后,将我的更改推送到 BitBucket

git push --all

所以,似乎我错过了git merge调用和传递给它的参数。

干杯

于 2013-04-23T22:29:35.607 回答
0

我不完全明白你做错了什么,但你现在应该在使用 git-tfs 时做一些事情......

  • 使用 TFS 分支我看到您创建了一个分支(步骤 2)并在该分支中提交。签出分支“NewBranchName”后,应使用以下命令签入:

    git tfs rcheckin -i 新分支名称

并使用以下命令进行修改:

git tfs pull -i NewBranchName

或(使用变基)

git tfs pull -r -i NewBranchName

如果您没有使用 TFS 远程名称指定 -i 选项,您将在主分支(此处为 $/Project/Name/Branch )中签入您的提交:(

  • 检查您在 TFS 上的提交我在命令上方为您提供检查您的提交的命令。但是您应该知道,由于某些原因,当您在 TFS 中签入 git 提交时,会在 TFS 中创建一个新的变更集(这就是我们想要的;))并且在创建新的 git 提交之后。它与原始版本几乎相同,但包含一些信息(您可以在 git 评论中看到)。由于这个事实,根据您所做的事情(我并不完全理解),您可能会遇到问题,因为 git 尝试在同一位置合并提交与完全相同的修改,因此无法自动合并。

事实上,我认为你的工作流程有问题,因为你不应该遇到这个问题。尝试在您的工作流程中找出问题所在。

我希望它会有所帮助。

随意查看 git-tfs wiki:https ://github.com/git-tfs/git-tfs/wiki 我希望有非常有用的信息(部分做到了,很喜欢;))

PS:为了更好地帮助你,你能告诉我你使用哪个命令来检查你的提交吗?签入,签入,重新签入?强烈建议 rcheckin !

我做什么来自动化你的工作流程:

(这里的 'bitbucket' 是您的远程 bitbucket 存储库的假定名称)

=> 在您的主分支中:

//Do your job & commit with git & ...
//rebase your work on TFS work
git tfs pull -r
//rcheckin with git-tfs
git tfs rcheckin
//commit in bitbucket repo
git push bitbucket master

=> 在您的“NewBranchName”分支中:

//Do your job & commit with git & ...
//rebase your work on TFS work
git tfs pull -r -i NewBranchName
//rcheckin with git-tfs
git tfs rcheckin -i NewBranchName
//commit in bitbucket repo
git push bitbucket NewBranchName

PS2:也许,如果在执行 pull -r 和 rcheckin ...

编辑:你编辑,我编辑;)

之前,我假设您已经为您的 bitbucket 存储库定义了一个远程:

git remote add bitbucket https://bitbucket.org/yout_login/your_project.git

你只需要:

//checkout your branch
git checkout NewBranchName
//fetch the TFS changesets and merge your branch into
git tfs pull -r -i NewBranchName
//push your commit on bitbucket
git push bitbucket NewBranchName

并解释一下你在做什么(但不完全理解:()......

使用“git tfs fetch --all”,您将获取所有分支的 TFS 变更集,但不会与您的本地分支合并(或变基)。因此它们不会出现在您的本地分支中。您可以使用以下命令查看 DAG 以更好地理解:

git log --oneline --graph --decorate

上面给出的“git tfs pull”将获取的提交与您的分支合并,这样会很好!

“git status”告诉我没有什么可以提交的

此命令显示在工作目录中修改的文件。所以,你看不到任何变化是正常的。那确实表明您的提交没有被取消!

当我尝试将这个变更集推送到 BitBucket 中时,git 告诉我没有什么可以提交的。

你应该有!您确定已将远程定义到您的 bitbucket 存储库吗?(见上文)您使用哪个命令?git告诉你什么?

于 2013-04-23T16:06:16.013 回答
0

git tfs fetch命令不会更新您的本地 git 存储库,这就是您应该在此之后执行git merge的原因。

要在一个命令中执行相同操作,只需从 TFS 遥控器中拉取

git tfs pull -r

这应该使用来自 TFS 服务器的所有新更新来更新本地 git 存储库

此时你只需要将更新推送到 git 服务器:

git push -u origin --all
于 2017-07-18T01:31:21.597 回答