web-dev-qa-db-ja.com

Bazaar-最後のリビジョンのみをプルします(ブランチ全体ではありません)

Shortly:リモートBazaarリポジトリから最新のリビジョン(のみ)を取得し、それを新しいリビジョンとしてローカルリポジトリに追加するにはどうすればよいですか。

背景:開発システムと本番システムがあります。開発システムには、多くの開発リビジョンを持つブランチを持つBazaarリポジトリがあります。たまに、最新の開発を本番システムに取り入れたいと思っています。なんらかの「プル」でやりたい(セキュリティ上の理由で開発システムは本番に接続できないが、本番は開発への接続を開始できる)。

本番環境では、開発リビジョンの履歴全体は必要ありません。実際に本番環境に移行するリビジョンのみが必要です(通常はブランチのヒントです)。それでも、本番システムのバージョン管理で、毎回実際に本番環境に移行する内容を追跡する必要があります。

bzr pullブランチ全体をプルします。 bzr pull --revision=last:1は、指定されたリビジョンまで、ブランチ全体もプルします。

bzr merge --pull --revision=last:1ブランチ全体もプルします。 bzr merge --pull --revision=last:2..last:1およびbzr merge --pull --change=last:1どちらも、最新のリビジョンで導入された新しいchangesのみをプルしますが、古いリビジョンで導入された変更はプルしません。

軽量チェックアウトでは、本番環境にプルされたリビジョンのトラックがありません-ローカル作業ツリーはリモートリポジトリの一部のままです

私がこれまでに見た唯一の方法は、rsyncまたはscpを使用して作業ツリーをインポートし、後でそれらをローカルブランチにコミットすることです。より良いアイデアはありますか?

1
Sandman4

ある程度、以下を実行することでこれを行うことができます。

$ bzr branch --stacked REMOTE-URL LOCAL-PATH

これにより、最後のいくつかのリビジョンのみを持つローカルブランチが作成されます。これは独立したブランチであるため、ローカルブランチでコミットを実行しても、リモートブランチに自動的にプッシュされることはありません。利用できないローカルブランチのデータにアクセスしようとすると、bzrはリモートブランチにシェルアウトしてそのデータを見つけます。

1
jelmer

まず、各リビジョンには前のリビジョンとの違いのみが保存されるため、最後のリビジョンのIMOをプルするだけではこれを実現できません。それが、例えばbzr merge --pull --change=last:1は機能しません。

私は本当にブランチ全体を引っ張るだけですが、これが必要ない場合は、次のようなことを行うことができます

bzr diff -rx -p1

ここで、xは、本番環境にすでに含まれている最後のリビジョンです。これにより、現在の作業ディレクトリとリビジョンxの間のすべての変更の概要が作成されますが、その間のリビジョンの詳細はすべて含まれません。 -p1フラグは、出力がパッチ形式であることを確認します( http://doc.Bazaar.canonical.com/beta/en/user-reference/diff-help.html )。次に、このパッチを実動システムに適用できます。

醜いと思いますが、うまくいくかもしれません。

0
Gerhard Burger

私が正しく理解していれば、本番ブランチを開発ブランチのヒントと同じ状態に同期したいのですが、リビジョン履歴はありませんよね?

あなたはそれをすることができます:

bzr merge OTHER_URL
bzr revert --forget-merges
bzr commit

その結果、不足しているすべてのリビジョンの変更をチェリーが選択し、それらを一度にコミットしたかのように効果的になります。

ただし、ここには大きな注意点があります。改訂履歴が保存されていないため、Bazaarは、チェリーが選択した変更がすでに適用されていることを認識していません。その結果、次にこれらの同じ手順を実行すると、競合が発生します。したがって、これは使用可能なソリューションではないと思います。

別の方法(別の警告があります)はこれです:

bzr diff --new OTHER_URL | patch -p0

これにより、現在のブランチと参照ブランチの差分がパッチとして適用されます。ここでの注意点は、パッチは名前の変更を処理できないことです。

全体として、あなたがやろうとしていることは奇妙だと思います。プルまたはマージして履歴を保持する必要があります。または、機能ブランチを操作してみることもできます。機能ブランチについてのことは、機能が完了すると、作業を停止することです。この場合、機能ブランチ全体をマージして、中間リビジョンを忘れることができます。これは、機能ブランチから再度マージすることはないため、ダブルチェリーピッキングの問題が発生しないためです。

0
janos