2009-05-27 4 views
2

特定のLinuxバージョン、たとえば2.6.25.4に対して完全に動作する一連の変更があります。gitを使って動くターゲット(Linuxなど)に対して変更を保存する

私はgitツリーを持ち、タグv2.6.25.4から追跡ブランチvanilla-2.6.25.4を作成しました。私は私の変更2.6.25.4と呼ばれるブランチを作成し、私のすべての仕事をしました。

ここでは、任意の新しいバージョンのLinuxの上に自分の仕事をリベースしたいと思います。 2.6.28.9と言ってください。これを達成するための最適なgitワークフローは何ですか?

私は2.6.28.9から新しいブランチを作成する方法を知っていますが、 'git merge my-changes-2.6.25.4'のようなことは、私が関心のない他のものからあらゆる種類の競合を与えます。とにかく壊れました。

私の変更my-changes-2.6.25.4から新しいブランチを作成し、git rebase 2.6.28.9を実行しました。これは2.6.25.4からの変更を受け取り、2.6.28.9の上に適用すると仮定していますがこれは、私が変えたものとは関係のない沢山の葛藤を私に与えました。

これを行う正しい方法はわかりません。私は安定したLinuxツリーhttp://www.kernel.org/pub/scm/linux/kernel/git/stable/linux-2.6-stable.gitを使用しています。バージョン管理されたタグv2.6.x.yがすべて同じ系列のものではないという事実から、いくつかの問題が生じると思います。

これを正しく行う方法を知っている人はいますか?インターフェースを変更してLinuxが自分のコードを壊した次の場所を見つけるためにバイナリ検索を使ってできるだけ自動的に前進する方法を考案した余地はありますが、実際に何をしようとしているのか分かったら想像します。 。

答えて

3

2番目の方法は正しいと思われますが、どのようにしてリベースを呼び出しましたか?あなたはあなたのベースリビジョンを変更していることを伝える必要があります。私はあなたがリベースの途中で出てダンプ取得避けるために、別の可能性は、使用してv2.6.28.9に基づいてローカルの変更のリストを取得し、手動で新しいブランチに追加することです

# on changes-2.6.25.4 
# make new branch 
git checkout -b changes-2.6.28.9 
# double-check local changes to transport 
git log --pretty=oneline v2.6.25.4.. 
# transport changes to be against new base 
git rebase --onto v2.6.28.9 v2.6.25.4 
# should now have the same changes 
git log --pretty=oneline v2.6.28.9.. 

ようなものが必要だと思います"git cherry-pick"コマンド。実際にはこれは効果的にリベースと同じですが、ある意味では、自分が行っていることをよりコントロールすることができます。

なぜこれが問題なのかについてのあなたの推論は正しいと思います.v2.6.28.9はv2.6.25.4の子孫ではありません。デフォルトでは、rebaseはv2.6.26のすべての変更を含めようとします。単に "git rebase v2.6.28.9"を実行した場合は、.v2.6.25.4と同様に、 1つの引数のリベースは、ローカル変更を "git log $ 1..HEAD"として取得し、それらを "$ 1"の上に適用しようとします - これはrebaseへのargがブランチである場合にのみ意味があることがわかります更新されました。以前と同じタグをリベースすると、何も起こりません。別のタグをリベースすると、他の人の変更があなたのものと混ざり合ってしまいます。 1つのタグを別のタグにリバースする必要があります。

+0

これは説明のために正しく感謝しているようです。私はあなたがサンプルコードで間違いを犯したと思います。実際に最初のチェックアウトを行うと、2.6.28.9に対して新しいブランチが作成されますが、これはローカルの変更が含まれていないため、リベースは意味をなさないでしょう。 'git checkout -b changes-2.6.28.9 v2.6.28.9'ではなく 'git checkout -b changes-2.6.28.9'に変更すると、何かが動作します。 私の最初の競合は正当なものであるため、動作しているように見えます。今、私は愚かな自動ガベージコレクションを待っています。なぜgitはJavaになろうとしていますか?私はできます... – nosatalian

+0

ああ、私はそれが間違っていたと思って変更し、それは初めてのことだった。今朝はまだコーヒーが足りません。 私は "git gc"に長時間苦労したことはありません...しかし、私はいくつかのリビジョンを引っ張った後で手動で行うことに強く思っているので、自動起動されることはほとんどありません:) – araqnid

関連する問題