2013-04-23 98 views
6

我有一個問題,試圖從TFS中提取我的最新更改並將它們添加到BitBucket回購。我已經成功地將我的分支推入BitBucket,但是當我嘗試從TFS獲得任何新的簽入時,我總是遇到合併衝突。使用git-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」,即使NewBranch是最新的代碼。 ptfs pull命令將最後一個checgeset拉下來,但隨後嘗試執行合併。如果我使用

git tfs fetch --all 

我看到列出的變更集,但我無法將其提交到/推送到BitBucket存儲庫。我找不到網上的參考資料,說我做錯了什麼,或者我需要採取什麼措施(我是Git的新手)。誰能幫忙?

我最終想要使自動化此TFS中的任何檢查插件可以獲取並添加到位桶庫(直到我們最終將所有開發人員到位桶)

感謝

編輯 我想從TFS到BitBucket進行更改。 BitBucket沒有添加到TFS中。

所有工作都在分支上完成(見下文)。用戶正在使用TFS。用戶在那裏提交更改。注意:沒有人正在編輯BitBucket回購。它是TFS的複製品。 每天一次,我想將每個TFS分支的最新變更集放到我的本地git文件夾中,然後將它們推送到BitBucket中。該「混帳TFS取」檢索的變更:

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

但「混帳地位」告訴我有什麼承諾

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

當我試圖把這一變更成到位桶,混帳告訴我沒有什麼可以提交的。

分行

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

回答

0

我完全不明白你做的不好,但有出頭的,你現在應該在使用Git TFS ...

  • 與TFS分支 我看到你創建一個分支(步驟2)工作,並承諾在該分支。 當你checkouted你的分支 'NewBranchName',你應該用命令籤:

    混帳TFS rcheckin -i NewBranchName

,並與拉修改:

git tfs pull -i NewBranchName 

或(與變基)

git tfs pull -r -i NewBranchName 

如果不指定-i選項與TFS遠程的名字,你會在你提交的主分支(在這裏,$ /項目/名/店)檢查:(

  • 在TFS 簽入你的提交我給你的命令以上檢查你的提交。但是您應該知道,出於某些原因,當您在TFS中檢入git提交時,會創建一個TFS中的新變更集(這就是我們想要的;))並在創建新的git提交後。它幾乎與原始的一樣,但有一些信息(你可以在git註釋中看到)。 由於這個事實,根據你所做的事情(我不完全明白是什麼),你可能會遇到問題,因爲git試圖在同一個地方合併提交和完全相同的修改,所以未能合併automaticaly。

事實上,我認爲你的工作流程有問題,因爲你不應該遇到這個問題。嘗試在您的工作流程中找到問題。

我希望這會有所幫助。

隨意看到的git-TFS維基:https://github.com/git-tfs/git-tfs/wiki 我希望有相當多有用的信息(部分做到了,用愛;))

PS:爲了幫助你更好,你能告訴我哪些命令你用來檢查你的提交? checkin,checkintoo,rcheckin? rcheckin非常建議!

我做自動化您的工作流程:

(這裏 '到位桶' 是遠程到位桶倉庫的所謂名)

=>在master分支:

//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之前在您的工作目錄中發生了無法完成的更改,則隱藏您的修改...

編輯:您編輯,我編輯;)

之前,我想你已經定義了一個遠程爲您到位桶庫:

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 

的「混帳TFS拉」給出上述合併牽強犯了您的分支,這樣會很好!

「混帳地位」告訴我有什麼承諾

此命令告訴你,在工作目錄修改的文件。所以,這是正常的,你看不到變化。這確實表示你的提交沒有被取消!

當我嘗試將此變更集推入BitBucket時,git告訴我沒有什麼要提交的。

你應該有!你確定要定義遠程端口到你的bitbucket存儲庫嗎? (見上) 你使用哪個命令?什麼混帳告訴你?

+0

感謝您的回覆@Philippe。 – 2013-04-23 16:30:03

+0

你有沒有發現你的問題?我認爲這是忘記-i選項... – Philippe 2013-04-23 16:47:41

+0

我想我沒有描述我的問題。我已經編輯我的問題與更多的信息。基本上,我試圖在BitBucket中複製TFS存儲庫。我不想從BitBucket添加任何東西到TFS – 2013-04-23 17:11:01

2

我似乎在使用Git擴展後找到了答案。

看來我需要做一個獲取

git tfs fetch --all 

這將讓我從TFS所有變更爲我的樹幹,我已經映射(INIT分支)的任何分行

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(-) 

最後,把我的更改到位桶

git push --all 

所以,看來我還是缺少git merge調用和參數傳遞給它。

乾杯

+0

fetch - 都有點矯枉過正(請參閱所有tfs遠程獲取更改和TFS,需要時間),並且只能合併如果你在好分支,否則你會有一些你不希望的!所以「git tfs pull -r -i NewBranchName」會更好。 然後推送到bitbucket ... PS:「pull」=「fetch 「+」合併「 – Philippe 2013-04-24 14:53:40

+0

git tf fetch --deep – hfrmobile 2015-04-15 14:10:26

0

混帳TFS獲取命令不更新本地git倉庫,這就是爲什麼你應該做的混帳合併後

做同樣的在一個命令根本就從TFS拉遠程數據庫

git tfs pull -r 

這應該與TFS服務器

所有新的更新。在這一點上,你只需要推送更新更新本地的Git倉庫到git服務器:

git push -u origin --all