我在尝试从TFS中提取最新更改并将其添加到BitBucket存储库时遇到问题。我已成功将我的分支推入BitBucket,但当我尝试从TFS获取任何新的签到时,我总是会遇到合并冲突。
步骤:
git tfs clone http://TFS-ADDRESS/Collection $/Project/Name/Branch
git tfs init-branch $/Project/Name/NewBranch NewBranchName
git push -u origin --all
此时我的BitBukcet repo拥有来自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命令将最后一个checgeset拉下来,但随后尝试进行合并。如果我使用
git tfs fetch --all
我看到列出了变更集,但我无法将其提交/推送到BitBucket存储库。我无法在网上找到一个参考资料来说明我做错了什么,或者我需要采取什么步骤(我是Git的新手)。有人可以帮忙吗?
我最终希望自动执行此操作,以便可以获取TFS中的任何签入并将其添加到BitBucket存储库(直到我们最终将所有开发人员移至BitBucket)
由于
EDIT 我正在尝试从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
答案 0 :(得分:2)
我似乎在使用Git Extensions之后找到了答案。
我似乎需要进行提取
git tfs fetch --all
这将从TFS为我的主干和我已映射的任何分支(init-branch)获取所有变更集
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
调用和传递给它的参数。
干杯
答案 1 :(得分:0)
我并不完全理解你做错了什么,但现在你应该使用git-tfs ......
使用TFS分支 我看到你创建了一个分支(步骤2)并在该分支中提交。 当您检查了您的分支“NewBranchName”时,您应该使用以下命令进行检查:
git tfs rcheckin -i NewBranchName
并通过以下方式进行修改
git tfs pull -i NewBranchName
或(使用rebase)
git tfs pull -r -i NewBranchName
如果未指定带有TFS远程名称的-i选项,则将在主分支中检入您的提交(此处为$ / Project / Name / Branch):(
事实上,我认为您的工作流程存在问题,因为您不应该遇到此问题。尝试在工作流程中找到问题。
我希望它会有所帮助。
随意查看git-tfs wiki:https://github.com/git-tfs/git-tfs/wiki 我希望有非常有用的信息(部分是用爱做的);)
PS:为了更好地帮助您,您能告诉我您使用哪个命令来检查您的提交吗? checkin,checkintoo,rcheckin?强烈建议rcheckin!
我如何自动化您的工作流程:
(这里'bitbucket'是远程bitbucket存储库的假定名称)
=&GT;在你的主分支中:
//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
=&GT;在你的'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告诉我没有什么可以提交。
答案 2 :(得分:0)
git tfs fetch 命令不会更新您的本地git存储库,这就是您之后应该执行 git merge 的原因。
要在一个命令中执行相同操作,只需从TFS遥控器拉取
git tfs pull -r
这应该使用来自TFS服务器的所有新更新来更新本地git存储库
此时您只需将更新推送到git服务器:
git push -u origin --all