2012-03-19 13 views
15

私たちはgit-subtreeをプロジェクト(gitバージョン1.7.9.4)で動作させようとしており、ちょっと複雑になりました。以前他の誰かが数カ月前にこのコマンドを使用してサブツリーを追加しました:git-subtree pull complications

git subtree add --prefix=foo [email protected]:foo.git master 

は今fooへの実質的な変更があったと我々は、理想的にはそれらを退治、それらの変更をマージしたいファイルのいずれも行われていません。それらがインポートされてから修正されました。

私は3つのことを試みて、変更をマージしました。

まず:例外をスロー

git subtree pull --squash -P foo [email protected]:foo.git master 

Can't squash-merge: 'foo' was never added.

第二:

git subtree pull -P foo [email protected]:foo.git master 

これは、(ソートの)動作しますが、コミットのすべての引き込みの問題を持っています変更されたファイルと競合します。

git pull --squash -s subtree [email protected]:foo.git master 

これは、出力Automatic merge went well; stopped before committing as requestedで、私に望ましい結果を与え、(正しい内容で)修正されたすべてのファイルが現れて:

最後に、私はこれを試してみました。

私は理想的には最初のgit-subtreeバージョンを使い続け、最後のバージョンに近い出力を得たいと考えています。一貫して前のバージョンを使用する必要がある場合、私たちはこれを行いますが、中間のものがマージ競合を引き起こさない理由については少し混乱しています。

何か助けていただければ幸いです。

答えて

6

私は同じ問題を抱えていましたが、私の場合、最初のサブツリーコミットがマスターブランチにマージされているようです。サブツリーがgit-subtree-dir: fooのためのあなたのgitのログをgrepするものの、適切なコミットを見つけられないように見えますhttps://github.com/git/git/blob/master/contrib/subtree/git-subtree.sh#L224

:私はこれを見つけたサブツリーソースから探し

。試してみてくださいgit log --grep="git-subtree-dir: foo/*\$"場合は、そのコミットと奇妙な何か、それはマージコミットされているなど、問題があります。

迷惑なマージの競合を除いて、ちょうど踏みつぶさずに私を助けてくれました。私は一時的なブランチでそれをしました。それで、git merge --squashは、より厄介な歴史を避けるために別のブランチに編成されました。代わりにあまりにもリベースされている可能性があります。

+1

プルしようとしたときにプレフィックスオプションにサブフォルダがないために起こったのと同じ問題が発生しました。エラーメッセージがこのエラーの兆候を示さず、トラブルシューティングが私をここに導いたので、これをコメントとして追加してください。 –

+0

ありがとう、これは便利です。私はそれにサブツリーを追加した後にサブディレクトリを移動した関連問題がありました。 –

1

サブツリーをプルするたびに、私は同じエラーCan't squash-merge: 'foo' was never added.をsourcetree 1.7.0で使用しています。 しかし、サブディレクトリを使用しているため、私のケースが異なると思います。
git -c diff.mnemonicprefix=false -c core.quotepath=false subtree pull -P dir1\subdir1 --squash remote-repo master

、明らかに、我々は(Gitのバージョン2.6.1.windowsのGit Bashの中で再びそれをしようとした場合、次のように

Sourcetreeは何かを。1)、それはでしょう:
git subtree pull -P "dir1\subdir1" --squash remote-repo master

しかし、これは失敗します。
git subtree pull -P "dir1/subdir" --squash remote-repo master

私はまだいくつかあることを推測する:私はそれを動作させるために見つかったソリューションは、次のコマンドでGitのバッシュを使用することです
git subtree pull -P dir1/subdir1 --squash remote-repo master

:コマンドの構文は大丈夫ですが、次のようにも失敗しましたGitのコマンドライン処理エンジンのために働くこと。