svnでマージ中止後からマージできない

このQ&Aのポイント
  • trunkフォルダ内のsoftwareというフォルダ内でcpp builder2009で作成のプロジェクトファイルで作業をしているのですが、修正などの編集を行いたくなり、softwareのフォルダをtortoise svnのブランチ機能で/branch/20140722_softwareというフォルダでブランチして、修正作業はこのフォルダ内で行いました。
  • マージを中止させました。そして、競合があったファイルをResolveというのを/trunk/software/に行って、再度マージを行おうとするとマージが完了しているという内容が出てきました。
  • 現在/trunk/software/の最新リビジョンで、/branch/20140722_software/の最新リビジョンからのファイルでマージしようとしても、できない状態なのですが、これを取り消す方法などをありますでしょうか?
回答を見る
  • ベストアンサー

svnでマージ中止後からマージできない

trunkフォルダ内のsoftwareというフォルダ内でcpp builder2009で作成のプロジェクトファイルで作業をしているのですが、修正などの編集を行いたくなり、softwareのフォルダをtortoise svnのブランチ機能で/branch/20140722_softwareというフォルダでブランチして、修正作業はこのフォルダ内で行いました。 一通り修正作業が完了したので、/trunk/software/のフォルダ内にマージ機能を使って見ようと思いました。 とりあえず現在の/branch/20140722_software/内で変更のあったソースコード関連のテキストファイル関連のファイルを/trunk/software/フォルダ内にマージをしたかったのですが、dfmという拡張子のファイルでconfrictが起こったようで、Abort mergeでマージを中止させました。 そして、競合があったファイルをResolveというのを/trunk/software/に行って、再度マージを行おうとするとマージが完了しているという内容が出てきました。 /branch/20140722_software/の最新リビジョン /trunk/software/の最新リビジョン この2つのフォルダをDFという比較閲覧ソフトで確認してみたところ、/branch/20140722_software/で変更をかけたソースコードのテキストファイルは/trunk/software/フォルダ内にはコピーされていない状態でした。 tortoise svnのマージの操作方法はこちらのサイトを参考にして実施しました。 http://hide.xsv.info/tips/svnmanual/merge1/ マージの種類としては”リビジョン範囲のマージ”というのを使用しました。 また、”マージするリビジョンの範囲(specific range)”というのはshow log機能で、/branch/20140722_software/が作成されたrev128から最後の修正までのrev168までを指定しました。 Merge depth:というのはWorking copyを洗濯 Compare whitespaces という機能ボタンをONにしてマージをしました。 なお、現在/trunk/software/の最新リビジョンで、/branch/20140722_software/の最新リビジョンからのファイルでマージしようとしても、できない状態なのですが、 ”マージするリビジョンの範囲(specific range)” この時の設定で”URL to merge from”で設定している/branch/20140722_software/フォルダのshowlogを見ると、 Actions:Modified Already merged とすべての変更があったリビジョンに表示されています。 たぶんですが、/trunk/software/フォルダは/branch/20140722_software/の内容を既にマージしているということになっているようなのですが、これを取り消す方法などをありますでしょうか? また、このようなマージ機能の使用方法として適切な方法などご教示頂きまうよう、よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.1

とりあえず…使用しているTortoiseSVNのバージョンは明記した方がよろしいかと。 1.8.x辺りからマージダイアログの表示(と操作方法)が変わっています。 >たぶんですが、/trunk/software/フォルダは/branch/20140722_software/の内容を既にマージしているということになっているようなのですが、これを取り消す方法などをありますでしょうか? コミットしていないなら、クリーンアップで戻せる場合もあります。 作業コピーを破棄してリポジトリからチェックアウトし直す。という手段もあるでしょう。 # リポジトリに含めていない作業ファイル(オブジェクトファイルなどの中間ファイルなどなど)はなくなってしまいますが。 >このようなマージ機能の使用方法として適切な方法などご教示頂きまうよう 手元のは1.8.7なので、それでとりあえず説明でしょうかね…。 # 日本語ランゲージパック有効化済み ちなみに、私が運用している手順ですのでその辺りはご理解くださいな。 「Subversion ブランチ 運用 マージ」とかで検索すると他の例とか見つかるかも知れませんね。 1)trunkなどから作業用のブランチを作成する。  [TortoiseSVN]-[ブランチ/タグの作成]を選択。  「宛先のパス」でブランチ先のURLを入力、「作業コピーを新しいブランチに切り替える」にチェックをつけてブランチ作成。  ログメッセージは「○○の為のブランチを作成」とか適当に。 2)ブランチ先でもにょもにょと作業してコミット。  リビジョンが進む。  # ブランチ元のリビジョンが進むこともある。 3)ブランチ側が一段落。ブランチ元にマージするすることを決意する。  # マージした後はブランチ先が更新されることはほとんどないですけどね。再マージが面倒になるので。 4)作業コピーをブランチ元に切り替える。  [TortoiseSVN]-[切り替え]を選択。  「宛先のパス」でブランチ元のURLを入力、リビジョンも指定。(たいていはHEAD指定) 5)マージ作業開始。  [TortoiseSVN]-[マージ]を選択。  「リビジョンの範囲をマージ」を選択して[次へ]。  「マージ元のURL」に1)で作成したブランチ先のURLを指定。  「マージするリビジョンの範囲」はデフォルトのまま。(指定された範囲でブランチ先の先頭から最新まで…で指定もOKかと)  [次へ]でマージ処理開始。  # TortoiseSVN 1.7.xとかなら「機能ブランチをマージ」でサクっと処理できたような気がしますが。 6)コンフリクトがなければそのままコミットしてマージ結果をブランチ元に適用。  コンフリクトがあった場合は手動などで解決(テキストファイルならTortoiseMergeやWinMergeで処理することもある)して、コミット。  # 2)でブランチ元のリビジョンが進まなければそうそうコンフリクトは起こらないでしょう。  # 実行ファイルとかをリポジトリに入れている場合はコンフリクトしますが、その場合は「作業コピー」のものを優先。としておきます。  # んで、コミットする前にビルドして作業コピーのバイナリを更新してからコミット。 ブランチ先はこのまま放置…になりますね。 # ブランチ先で作業中にコミットしたログを後から参照するコトもあるかも知れませんので、リポジトリからブランチ先を削除することはありませんね。 # リポジトリから削除すると後から参照したい時に面倒ですし。(リビジョンを指定して切り替えて~などなど。 削除したところでリポジトリ格納先の容量が空くこともありませんし)

techhouse
質問者

お礼

回答頂きありがとうございます。 詳細な説明頂き大変ありがとうございます。実際にtortoise SVNを運用している方にお会いしたことがほとんどなく、実践的なことを教えて頂き大変助かります。 Tortoise SVNのVersionの件に関しましては抜けており申し訳ありません。Ver1.8-4を現在使っていることを確認しました。 作業を続けていてわかったことなのですが、 /branch/20140722_software/   こちらのブランチ元のフォルダは私はてっきり /trunk/software/ こちらのフォルダtrunkフォルダ内のものだろうと思い込んでいたのですが、showlogでブランチした際のrevision(rev128)を見てみると ”copy from path”という項目列に /branches/20140717_software/ rev 127 このように、rev127の上記のフォルダからブランチしていたことがわかりました。 /branches/20140717_software/ フォルダでマージをやってみたところ、こちらは正常に/branch/20140722_software/をマージすることができました。 また、 /branches/20140717_software/というのは/trunk/software/がブランチ元だと思ったのですが、 このフォルダの作成のrevisonの”copy from path”には何も表記がないので、ブランチ機能を使ったのではなく、フォルダをコピーしてきただけなのかもしれないので心配しています。 とりあえず助かりました。

関連するQ&A

  • svnのマージの使い方。

    現在、Atmelのマイコンのプログラムファイルの管理をtortoise svnで行っています。 現在自分の使い方としては、trunkフォルダにリリースVersionのプロジェクトフォルダが入っていて、そのプロジェクトフォルダ内のファイルの検証や修正を行うためには必ずbranchフォルダにbranch機能でフォルダコピーしてからそのファイルの修正などを行っています。修正が完了した場合はtrunkフォルダのリリース版のファイルにマージして、branch側のフォルダは削除しています。 だいたいこのサイクルを繰り返しているのですが、共同作業者さんがbranchでの修正が先に終わってtrunkにマージしてリリース版が更新される場合があるのですが、現在の自分のbranch のファイルはリリース版のものからすると古くなってしまうので、現在の最新のtrunkのファイルを自分のbranchにマージする方法というのはありますでしょうか? 以前trunkのファイルを自分のbranchにマージしたら競合が多発して一部ファイルの更新内容がスムーズにいかなくなってしまったことがあり、現在避けているのですが、良い方法をご存知の方いらっしゃいましたらどうぞご教示頂きますよう、お願い致します。

  • ブランチ機能使用していないコピーでマージした場合

    /trunk/software/ このフォルダの中にcpp builder2009で作業中のプロジェクトのソースコードファイルなどを置いています。このフォルダ内のソースコードに修正を加えたいと思い、ブランチとして/branches/20140717/のフォルダにtortoise svnのブランチ機能を使用せずに、フォルダごとコピーしてきたファイルをペーストしました。 このフォルダ内で修正作業をして完了し、/trunk/software/のフォルダにマージすることは可能でしょうか? /trunk/software/でマージを行って見たのですが、コンフリクトが多発する状態でした。 /branches/20140717/フォルダを作成して修正している最中は/trunk/software/内のソースコードのテキストファイルであるcppファイルなどに変更はしていないのですが、それもコンフリクトを起こしました。 どうぞご教示頂きますよう、お願い致します。

  • Subversion ファイルのマージができない

    以下のページ等を参考にして TortoiseSVNでbranchからtrunkへのマージを試みましたがサブフォルダ以下のファイルのマージが行われません。 http://hide.xsv.info/tips/svnmanual/merge1/ 以下のようなフォルダ構成である場合、 Folder_A--File_A |----File_B |----Folder_B |-----File_C マージ元URLにhttp://localhost:8888/svn/branch/Folder_A を指定し、 マージ先URLにhttp://localhost:8888/svn/trunk/Folder_A を指定して マージを実行すると、File_A, File_Bはマージされるのですが、 サブフォルダ以下のFile_Cはスルーされてしまいます。 作業コピーのあるフォルダで、右クリック-[マージ]で表示される リビジョンの範囲をマージ 異なる2つのツリーをマージ で試してみましたがいずれもサブフォルダのファイルはスルーされてしまいました。 TortoiseSVNでは、サブフォルダのマージはできないのでしょうか。

  • エクセルをSVNマージする方法

    Subversion と TortoiseSVN で Excel ファイルのマージを実行したいのですが、 方法はございますでしょうか? .xlsだったら.xlsxか.xlsmに変換してZIP解凍してXMLファイルにしてsvn mergeすれば よいでしょうか? 他に方法がございましたら(ローコストで)教えて下さい。

  • SVNのブランチにおける以前のverとの差分

    SVNで、ブランチを作成しました。 ブランチにおいて、たまたま、ブランチ前のファイルとの差分を確認したくなりました。 そこで、 TortoiseSVN>ログの表示>「リビジョンを選択」>右クリック>作業コピーと比較 をしようとしたところ、 TortoiseSVN>ログの表示 の時点で、ブランチする前までのリビジョンが現れず、方法を変えなければなりませんでした。 トランクのファイル と ブランチのファイル とを展開して、WinMergeのようなツールで比較するしかないのでしょうか? TortoiseSVN内で、ブランチ前のソースとの比較方法をご存知であれば教えてください。

  • SVNで外部参照した際のリビジョンについて

    SVNで外部参照した際のリビジョンについて SVNで過去のリビジョンを取得した際、外部参照しているファイルは最新のリビジョンを取得してしまいます。 外部参照の設定で-rを付けると、特定のリビジョンを指定できるのですが、この方法では参照元のりビジョンが上がった場合、最新を取得することが出来ません。 過去のリビジョンを取得したとき、そのリビジョンの時点での外部参照のリビジョンを取得する方法は無いのでしょうか? サーバーはSubversion-1.5.6.msiをXP上で動かし、 クライアントはTortoiseSVN 1.6.7を使用しています。 何かご存知の方いらっしゃったらよろしくお願いいたします。

  • svnの差分を出力するバッチを作りたい

    現在ソース管理でsvnを使用しており、windows7で 毎日決まった時間に差分をエクスポートするバッチを作成しようと思っています。 今まではsvnのGUIツールTortoiseSVNを使用していて、手動で行っていたのですが、 対象ファイルが多く、この作業をwindows batchなどで出来たらいいなと思いました。 やりたいことは以下です。 (1)デスクトップに差分をエクスポートするフォルダを作る(例:差分フォルダを作成) ↓ (2)svnのリビジョンやタグを基準にして差分を(1)で作成したフォルダにエクスポート  (例:svn://XXX.XXX/turnkとsvn://XXX.XXX/branchの差分を差分フォルダにエクスポート) ↓ (3)差分一覧のようなものをテキストで(1)のフォルダに出力 (1)は出来たのですが、(2)と(3)がネット上で見てもあまり情報なくてわからず… 特に(3)とかは出来るかもわからず…javaやantだと出来ると同僚には伺ったのですが、javaに関して知識がなくて…antは少し書いていたことがある位です。 antなどでは上記のようなことは難しいのでしょうか? もし、参考になるサイトなどあれば教えていただけると助かります。 よろしくお願い致します。

  • CVSコマンドrlogでブランチにつけたタグで実行したいがうまくいかな

    CVSコマンドrlogでブランチにつけたタグで実行したいがうまくいかない CVSコマンドのrlogを実行したいのですが、うまくいきません。 「cvs rlog: invalid branch or revision pair…」というメッセージが出ます。 ※「コマンド」と表現していますが、シェルの中で「FROM_TAG」「TO_TAG」 を指定し、連続的に指定ファイルのrlogを機械的に取得するという 処理を行ないたいと思っています。 コマンドは以下のような単純なコマンドです。 ------------------------------- PERIOD=${FROM_TAG}::${TO_TAG} cvs -d ${CVSROOT} rlog -N -r${PERIOD} ${ファイル名} ------------------------------- 指定しているタグはブランチに付与した「つもり」のタグです。 そこで、タグを確認してみたところ TO_TAGは確かにブランチに付与されていました。一方で FROM_TAGはtrunkに付与されていました。 「それが原因だろ」といわれるとそのとおりなのですが、 タグは確かにブランチを指定しタグを付与しました。 FROM_TAGをつけたのはブランチを作成した直後です。 つまり、trunkとまったく同じファイル。 なので、リビジョンはtrunk用の「1.n」のままです。 この時点で、ブランチの最新にタグをつけたのですが、 するとタグは「1.n」系のリビジョンにつきました。 ファイル自体はまったく変更していないので当然といえば当然です。 それではと、とりあえず以下のコマンドにしたところ一応うまくいきました。 ------------------------------- PERIOD=::${TO_TAG} cvs -d ${CVSROOT} rlog -N -r${PERIOD} ${ファイル名} ------------------------------- ただ、これが通用するのはブランチを作成してから 何も修正していない状態のファイルにだけです。 つまり、ブランチを作成してから、タグA, B, Cを打っており BとCを指定してrlogを取得するときに、 AとBの間、BとCの間で修正があったソースは成功するけれども BとCの間だけで修正があったソースは失敗してしまうことになると思います。 この現象を回避するコマンドの書き方はありますでしょうか? タグのつけ方が何か悪いのでしょうか? タグを適切につけたらこのようなことはおこらないのでしょうか? (SVNならこんな苦労はしないはずなのに…とも思っています) 対応方法・アドバイス等よろしくお願いします。 (SVNを使ってとかはナシで)

  • Tortoise SVNでのファイルをアップデートする方法が分かりません。。。

    Tortoise SVNを初めて使用してるのですが 新規ファイルをサーバにUPしたあと、修正ファイルの上書きが出来ないのです。 具体的に手順を説明すると ローカル作業環境で作業 ↓ ここでの対象ファイルを差分として ローカルの別の差分用のフォルダに移動 ↓ 上記のディレクトリに入れたファイルを SVNのあるサーバにUP(この時普通にドラッグでUPしてます。) ※新規でUPするのでここでは問題なし ↓ ローカルの作業環境で再び修正 ↓ ここで再び修正した対象ファイルを差分として 別の差分用のフォルダに移動 ↓ 再度、差分用フォルダからSVNのあるサーバにUP (ここでも普通にドラッグしてます。) で、この時ラーがでます。 内容としては 「既に同一のファイルがあります。」的な内容で上書きできないのです。 当然、他の人も使っているため ファイルをUP or削除するたびに全員にメールが送信されてしまうので テストができず、上書きする方法が試せないのです。 色々サイトを見てるんですが、いまいち分からず かと言って、自分がテストする度にメールが回ってしまうのは迷惑になるし 混乱を招く為なんとかここでお力を借りたいと思いご質問させていただきました。 すみませんがよろしくお願いします。

  • SVNのリポジトリ設置のサーバのHDDが少ない

    現在業務で使っているファイルやフォルダのほとんどはtortoise SVNで管理しています。SVNのリポジトリフォルダは事務所内の共有ファイルサーバでWindows共有のフォルダの中に入れていて、そこにコミットやアップデートを実施しています。 ここ最近この共有ファイルサーバのHDD領域が残り少なくなってきてしまいました。 そこでこれを解決したいと思っているのですが、この場合、NASなどのネットワークストレージを買ってきてそこにリポジトリフォルダを丸ごと転送していく方法が一番よいでしょうか? ちょっと困る問題として、 ・他の人もこのリポジトリフォルダへSVNコミットしたりしているのですが、移すと鳴ると、みんなが一旦ローカルのファイルを完全にリポジトリフォルダへコミットしてからでないと、ファイルの取りこぼしがでてしまうのではないのかと思うこと。 ・リポジトリフォルダを別のIPアドレスの端末から受け取るので、一旦各自がローカル内にあるファイルは一旦全部削除して、新たなNASのIPアドレスからSVN updateを実施しなければいけないのではないか?なのでかなり時間がかかりそう こんなことを思っているのですが、なにかうまいやり方などご存じの方いらっしゃいましたらご教授頂きますようよろしくお願い致します。