問題タブ [svn-merge-reintegrate]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
svn - pre-commit スクリプトでのブランチの再統合またはマージの検出
pre-commit スクリプト内で、? に起因するコミットを特定することは可能svn merge
ですか?
svnlook changed ...
変更されたファイルを表示しますが、マージと手動編集を区別しません。
merge
理想的には、標準とを区別したいと思いmerge --reintegrate
ます。
バックグラウンド:
プロジェクトに SVN の使用ポリシーを適用するために pre-commit フックを使用する可能性を探っています。
ポリシーの 1 つは、一部のディレクトリ ( など/trunk
) を直接変更してはならず、機能ブランチの再統合によってのみ変更する必要があると述べています。したがって、pre-commit スクリプトは、ブランチの再統合を除いて、これらのディレクトリに加えられたすべての変更を拒否します。
何か案は?
アップデート:
コマンドを調査しましたが、最も近いのは、ディレクトリsvnlook
のプロパティへの変更を検出して解析することです。svn:mergeinfo
このアプローチにはいくつかの欠点があります。
svnlook
プロパティの変更にフラグを立てることはできますが、どのプロパティが変更されたかはわかりません。proplist
(前のリビジョンとの差分が必要です)- の変更を調べることで
svn:mergeinfo
、実行されたことを検出できsvn merge
ます。ただし、コミットが純粋にマージの結果であるかどうかを判断する方法はありません。マージ後に手動で行った変更は検出されません。(関連記事:別のパス/リビジョンに対するトランザクション ツリーの差分)
svn - Netbeans を使用して SVN ブランチをトランクに再統合する方法は?
トランクからブランチを作成しました。ブランチでの開発が終了したら、ブランチをトランクにマージ (再統合) したいと考えています。有効にするオプションまたは設定はありますか? Netbeans 7.1 はブランチをトランクに再統合できないようです。
私が間違っている?
svn - 作業コピーから再統合できますか?
リポジトリとローカルにトランクとブランチのコードベースがあります。
現在、私はローカル ブランチでテストを行っていましたが、テストに問題がなければ、ブランチをリポジトリからローカル トランクに再統合しました。
再統合する前に、トランクからブランチへの同期を行う必要があると言われました。
ローカル ブランチからローカル トランクに再統合することはできますか? それとも、同期後にリポジトリ内のブランチにコミットしてから再統合する必要がありますか?
「ローカル」再統合はできると思いますが、これが安全かどうかは 100% 確信が持てません。
使用: Subversion コマンドライン クライアント、バージョン 1.7.8。
svn - このブランチをトランクにsvnマージするには?
この古い svn リポジトリをクリーンアップしようとしています。プロジェクト リポジトリは非常にシンプルです。
/trunk/
以前はメイン ブランチでしたが、rev 531 以降は変更されていません。/branches/Version2
rev 1300 の新しいメイン ブランチです。これは基本的に現在マスター ブランチです。誰もがこのブランチから作業します。と最新の状態でマージされtrunk
ます。
Version2
に再統合したいと考えていtrunk
ます。
私がする時:
私は問題を抱え続けています。数千のファイルをマージしただけで、SVN がクラッシュするか、"truncated html response" でエラーが発生します。
正直なところ、これは非常に単純なマージ (文字通り素朴に に置き換えるtrunk
)Version2
ですが、失敗したマージを回避する他の方法はありますか? 明らかな何かが欠けていますか?
svn - SVN - コミットが新しいフォルダー内のファイルを認識しない
環境:
OS:リナックスミント14
SVN : 1.8.3
この問題は、コマンド ラインおよび subclipse プラグインで発生します。
既存のプロジェクトの下に新しい Java パッケージを作成し、このパッケージに多くのクラスを追加します。ブランチにコミットすると、すべて問題ありません。しかし、ブランチをトランクにマージしようとすると、別名再統合 ( --reintegrate オプションを使用しないでください。svn 1.8 では非推奨です) に問題が発生し、競合レポートはありません。Merge は、新しいパッケージとそのファイルを含むすべての変更をもたらします。
変更をコミットまたは確認しようとすると (svn ステータス)、パッケージのみが表示されました。ファイルはバージョン管理されているように見え、私のレポの最後のリビジョンにありました。この事実は他のブランチでも発生します。新しいパッケージを含むすべてのコミットには、作業コピーにマージする問題があります。
興味深いのは、ブランチのリビジョンをリビジョンごとにマージするとうまくいくからです。問題は自動マージに関連しているようです。
svn - SVN 1.8 マージ (ブランチの再利用) は、ローカルのマージ情報があると壊れているように見える
新しい 1.8 サブバージョン クライアントに問題があります (TortoiseSVN 1.8.5 と SlikSVN 1.8.5 を使用しています)。再統合後も機能ブランチを使用し続けることができるという SVN 1.8 の新しい機能が機能しない場合があるようです。
トランクにローカルの mergeinfo (ファイルまたはサブツリーの Mergeinfo) が含まれている場合は機能しません。これにより、再統合後のブランチの再利用で問題が発生する可能性があります。これは、ブランチの再利用が「キープ アライブ ダンス」(記録のみのオプションを使用) を使用して行われた場合、1.7 クライアントでは問題ではありませんでした。
この問題をゼロから説明するスクリプトを作成しました。1.8 クライアントを使用して、空のリポジトリに対して実行できます。
以下のスクリプトには 10 のステップがあります。手順 1 ~ 5 は、トランクにローカルの mergeinfo を持つ開始状況を作成するために使用されます。手順 6 ~ 9 は、機能ブランチの有効期間中にトランクに加えられる変更をシミュレートします2。ステップ 10 は、再統合後の機能ブランチの再利用の最初のステップをシミュレートする失敗ステップです。
これはステップ 10 のエラーです。
これは (Windows) スクリプトです。
なぜこれが起こるのかわかりません。また、エラーはfile1.txtの範囲が欠落していると報告しますが、mergeinfoが欠落しているのはfile2.txtのようです。解決策ではありませんが、トランクの file2.txt にあるローカルの mergeinfo を削除すると、問題が解決するようです。これは、エラー メッセージが間違ったファイルについて何かを報告していることも示唆しています。
編集:@gbjbaanbへの応答エラーメッセージは同じですが、この問題はあなたが指摘しているものよりも微妙です。私の場合、失敗しているのはトランクへの再統合ではなく、その後のブランチの再利用です。
また、file1.txt と file2.txt の両方の mergeinfo を見ると、file2.txt に featurebranch2 の mergeinfo レコードが欠落しているように見えるため、エラーが示唆するように file1.txt ではなく file2.txt に問題があります。file1.txt は featurebranch2 の存続期間中にトランクで変更され、file2.txt はマージではなかったため、ステップ 8 のマージ中にトランクに関する情報が file2.txt に設定されませんでした。これが開始点であると思います。脱線する。これはトランクへの再統合には影響しませんが、その後のフィーチャー ブランチの再利用を妨げます。
編集: @David W への応答--record-only -c 11を試しましたが、これは Windows 側でも機能します。私はすでに-cなしでそれを試していました(通常はそうすべきではありませんが、この場合は他に変更はありません)、次のように報告されます:
--record-only -c 1-11も試してみましたが、これは-cを使用しない場合と同じであると予想していました(11 は HEAD であるため)。私の最初の期待は、 -cを使用しない場合と同じように失敗することでしたが、そうではありませんでした。-c 11と同じ方法で成功しました。
しかし、私の投稿の要点は、SVN 1.8 ではキープアライブのトリックを行う必要がないということです。(ドラフト)ドキュメントには次のように書かれています:
ブランチをトランクに再統合した後にブランチを削除しないことを選択した場合は、引き続きトランクから同期マージを実行してからブランチを再統合することができます[37]。これを行うと、最初の再統合後にブランチに加えられた変更のみがトランクにマージされます。( http://svnbook.red-bean.com )。
また、Subversion 1.8 リリース ノートから:
自動再統合マージを使用すると、任意の順序で 2 つのブランチ間を行ったり来たりするマージが可能です (「キープアライブ ダンス」は不要になりました)。最良の結果を得るには、適格なすべてのリビジョンを常にマージすることをお勧めします。つまり、svn merge の -r または -c オプションを使用しないでください。適格なリビジョンのサブセットだけをマージすると、将来のマージ中に問題が発生する可能性が高くなります。( https://subversion.apache.org/docs/release-notes/1.8.html )
したがって、私のポイントは、キープアライブのトリックを使用しないこのブランチの再利用は、ローカルのmergeinfoに直面して明らかに機能しないということであり、私のスクリプトはそれを示しているようです。
報告された範囲の数値を除いて、不足している範囲に関する警告が正しい可能性があると思われる場合は、スクリプトのどこで範囲が不足している可能性があるかを教えてください。私のスクリプトは、トランクとブランチの間を簡単に行き来するだけで、両方で並行して作業する必要はありません。
また、次のように追加して file2.txt を変更する理由を説明してください: "echo トランクで作成された追加のファイルの内容。 >> トランク\file2.txt" を手順 7 に追加すると、手順 10 でエラーが発生しなくなります。追加ファイルの変更トランク上では、範囲の欠落の問題を解決できません。