2012-02-24 12 views
30

を選択:この警告はについては何のgitのsvn桜私は<code>git svn fetch</code>を実行すると、それは時々警告以下印刷し、無視警告

W:svn cherry-pick ignored (/path/in/svn:<svn revision number list>) missing 55 commit(s) (eg 9129b28e5397c41f0a527818edd344bf264359af) 

を?

+0

こんにちは、私はチェリーピッキングが歴史を破壊すると思います!おそらく、彼が55コミットの「歴史」を紛失していると言っているのかもしれません。 –

+0

@ SG86、「破壊する」とはどういう意味ですか? –

+0

チェリーピッキングは歴史を破壊しません。チェリーピッキングはそれを複製します。 Gitは実際に歴史を正常に破壊しません。 Rebaseはそれを孤立させますが、リポジトリにはまだガベージコレクションが行われるまで存在します。それまではgit-reflogで回復できます。 – bambams

答えて

43

誰かがSubversionで「cherry-pick merge」を実行すると、Subversionは関連するファイルとフォルダのメタデータにマージされたコミットを記録します。

git svn fetchを実行すると、Gitはそのメタデータを見て、それをGitリモートブランチ間のマージとして解釈しようとします。このメッセージは、Gitがそれを試みたが失敗したため、マージではなく通常のコミットとして記録することを意味しています。

GitがSubversionコミットを取り上げる方法でバグが表示されない限り、心配する必要はありません。あなたが戻ってブランチAに枝Bを再統合した場合

A B 

* r6 
| * r5 
* | r4 
| * r3 
|/  
* r2 
* r1 

が一致するGitのSVNリポジトリで、次の2本の枝 ABでSubversionリポジトリを持って言う:より詳細には

ブランチの作業コピーをsvn merge -r 3:HEAD ^/branches/Bまたはちょうどsvn merge --reintegrate ^/branches/Bのようなコマンドを使用してください。 Subversionはこのマージが行われたことを記録するsvn:mergeinfoタグのメタデータを記録し、次のgit svn fetchはこのメタデータを表示します。そのブランチBがブランチAに再統合され、マージとして履歴に対応するコミットも記録されます。

あなたは1つだけ(たとえばR3はあなたが必要とする機能を追加しました)ブランチAに枝Bからコミットたかったのですが、あなたはまだ全体のブランチを再統合したくない場合は、代わりにsvn merge -c 3 ^/branches/BのようなSubversionのコマンドを使用したいです。ここでも、Subversionはマージメタデータを記録し、Gitはこれを見て、前の例のようにブランチマージを記録できるかどうか試してみるでしょう。この場合、ブランチAにブランチBのr5のようなものは含まれていません。それがこの警告を引き起こすのです。

+0

「あなたはブランチからr3を引っ張ったと言っていいでしょうか? –

+1

例を少し書き直しました。それは明確ですか? –

+0

ありがとう、今それは明確です –

関連する問題