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 への 1 回のチェックインです。

NewBranch で次の操作を行うと、マージの競合が発生します。

git tfs pull

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

私が知る限り、NewBranch は最新のコードですが、「マスター」から「NewBranch」に変更をマージしようとしています。ptfs pull コマンドは、最後のチェックセットをプルしていますが、マージを試みます。私が使用する場合

git tfs fetch --all

変更セットが一覧表示されていますが、それを BitBucket リポジトリにコミット/プッシュできません。私が間違っていること、または実行する必要がある手順をオンラインで参照することができません (私は Git を初めて使用します)。誰でも助けることができますか?

最終的にはこれを自動化して、TFS のすべてのチェックインを取得して BitBucket リポジトリに追加できるようにしたいと考えています (最終的にすべての開発者を BitBucket に移行するまで)

ありがとう

編集 TFS から BitBucket に変更を加えようとしています。BitBucket から TFS に何も追加されません。

すべての作業はブランチで行われます (以下を参照)。ユーザーは TFS で作業しています。ユーザーはそこで変更をコミットします。注: BitBucket リポジトリを編集している人はいません。TFS のレプリカです。1 日に 1 回、各 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 NewBranchName

そして次のように変更をプルします:

git tfs pull -i NewBranchName

または(リベースあり)

git tfs pull -r -i NewBranchName

TFS リモートの名前で -i オプションを指定しない場合、メイン ブランチ (ここでは $/Project/Name/Branch ) でコミットをチェックインします:(

  • TFS でコミットをチェックインする コミットをチェックインするコマンドの上に示します。ただし、いくつかの理由で、TFS で git commit をチェックインすると、TFS で新しい変更セットが作成され (それが私たちが望んでいることです;))、新しい git commit が作成された後に、それを知っておく必要があります。元のものとほぼ同じですが、いくつかの情報があります (git コメントで確認できます)。この事実により、あなたが何をするかによって (そして私は何を正確に理解していないのか)、git が同じ場所でまったく同じ変更を含むコミットをマージしようとするため、問題が発生する可能性があり、自動的にマージに失敗します。

実際、この問題に遭遇するべきではないため、ワークフローに何か問題があると思います。ワークフローの問題を見つけてみてください。

それが役立つことを願っています。

お気軽に git-tfs wiki をご覧ください: https://github.com/git-tfs/git-tfs/wiki 非常に役立つ情報があることを願っています (部分的に、愛情を込めて ;) )

PS : より役立つように、コミットをチェックインするために使用するコマンドを教えていただけますか? チェックイン、チェックイン、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 を実行する前に、作業ディレクトリにコミットされていない変更がある場合は、変更を隠しておく必要があります...

編集:あなたが編集し、私が編集します;)

以前に、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 リポジトリに対して定義してもよろしいですか? (上記参照) どのコマンドを使用しますか? 何を教えてくれますか?

于 2013-04-23T16:06:16.013 に答える