2013-04-23 1 views
6

У меня проблема с попыткой вытащить мои последние изменения из TFS и добавить их в репозиторий BitBucket. Я успешно ввел свои ветви в BitBucket, но когда я пытаюсь получить какие-либо новые проверки из TFS, я всегда получаю конфликт слияния.Использование git-tfs fetch для получения последних причин конфликта слиянием

Шаги:

  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. Затем я проверил меня $/Project/Name/NewBranch на TFS.

Теперь я хочу получить последние изменения из 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, могут быть выбраны и добавлены в хранилище Bitbucket (пока мы в конечном итоге переместить все разработчиков BitBucket)

Благодаря

EDIT Я пытаюсь для перехода от TFS к BitBucket. Ничто не добавляется в TFS из BitBucket.

Все работы выполняются на ветке (см. Ниже). Пользователи работают в 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 

И когда я пытаюсь нажать эту ревизию в BitBucket, мерзавец говорит мне нечего совершать.

Отрасли

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

ответ

0

Я не совсем понимаю, что вы делаете плохо, но есть нечто, что вы должны сейчас с помощью мерзавца-ТПО ...

  • Работа с ответвлением TFS Я вижу, что вы создали ветку (шаг 2) и совершать в этой отрасли. Когда вы checkouted ваш филиал 'NewBranchName', вы должны с приезда команды:

    мерзавец ТФС rcheckin -i NewBranchName

и тянуть изменения с:

git tfs pull -i NewBranchName 

или (с rebase)

git tfs pull -r -i NewBranchName 

Если вы не указали опцию -i с именем удаленного TFS, вы будете проверять в вашей фиксации в главной ветви (здесь, $/Проект/название/Branch) :(

  • Отметиться ваши коммиты на TFS я даю вам выше команды на проверьте свои коммиты. Но вы должны знать, что по некоторым причинам, когда вы проверяете git-фиксацию в TFS, создается новый набор изменений в TFS (это то, что мы хотим;)) и после создания нового git-коммита. Это почти то же самое, что и оригинал, но с некоторой информацией (которую вы можете видеть в комментарии git). Из-за этого, в зависимости от того, что вы делаете (и я точно не понимаю), у вас могут быть проблемы, потому что git пытается объединить фиксацию с точно такими же изменениями в одном и том же месте, поэтому автоматическое слияние невозможно.

Фактически, я думаю, что в вашем рабочем процессе что-то не так, потому что вы не должны сталкиваться с этой проблемой. Попытайтесь найти проблему в своем рабочем процессе.

Надеюсь, это поможет.

Вы можете увидеть GIT-ТПО вики: https://github.com/git-tfs/git-tfs/wiki Я надеюсь, что весьма полезные сведения (частично это сделал, с любовью;))

PS: Для того, чтобы помочь вам лучше, вы можете сказать мне, какую команду вы используете для проверки своих коммитов? checkin, checkintoo, rcheckin? 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 ...

EDIT: редактируются, я редактировать;)

Перед тем, я полагаю, что вы определили пульт для вашего хранилища 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 ТФС тянуть», приведенные выше слияния извлеченной совершить с вашей отрасли, так что будет хорошо!

«статус мерзавец» говорит мне, что нет ничего, чтобы совершить

Эта команда покажет вам файлы, измененные в рабочем каталоге. Итак, это нормально, что вы не видите никаких изменений. Это говорит о том, что ваша фиксация не была вытащена!

И когда я пытаюсь подтолкнуть этот набор изменений к BitBucket, git говорит мне, что совершить нечего.

Вы должны иметь! Вы уверены, что определили свой пульт дистанционного управления в своем репозитории bitbucket? (см. выше) Какую команду вы используете? Что вы говорите?

+0

Спасибо за ответ @Philippe. –

+0

Нашли ошибку? Я думаю, что это забыть о опции -i ... – Philippe

+0

Думаю, я не описал свою проблему. Я уточнил свой вопрос, чтобы узнать больше. В основном, я пытаюсь дублировать репозиторий TFS в BitBucket. Я не хочу ничего добавлять из BitBucket в TFS –

2

Кажется, я нашел ответ после использования Git Extensions.

Кажется, что мне нужно сделать выборку

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

И, наконец, раздвигать изменения Bitbucket

git push --all 

Итак, я, кажется, не хватало git merge вызова и параметры, чтобы пройти к нему.

Приветствия

+0

fetch - все это немного перехитрить (см. Все tfs remote для получения изменений и из-за TFS, требуется время), и ваше слияние работает только если у вас есть хорошая ветка, иначе у вас будет то, чего вы не ожидаете! Так что «git tfs pull -r -i NewBranchName» будет лучше. Затем нажмите на битбакет ... PS: «pull» = «fetch "+" merge " – Philippe

+0

git tf fetch --deep – hfrmobile

0

В Git ТФС команды начнут извлекать не обновляет свой локальный репозиторий, поэтому вы должны сделать мерзавец объединить после этого.

Чтобы сделать то же самое в одной команде просто вытащить из TFS пультов

git tfs pull -r 

Это должно обновить локальный репозиторий со всеми новыми обновлениями от TFS сервера

На этом этапе нужно просто нажать обновления to git server:

git push -u origin --all 
Смежные вопросы