プロが教える店舗&オフィスのセキュリティ対策術

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/の内容を既にマージしているということになっているようなのですが、これを取り消す方法などをありますでしょうか?


また、このようなマージ機能の使用方法として適切な方法などご教示頂きまうよう、よろしくお願い致します。

A 回答 (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)でブランチ元のリビジョンが進まなければそうそうコンフリクトは起こらないでしょう。
 # 実行ファイルとかをリポジトリに入れている場合はコンフリクトしますが、その場合は「作業コピー」のものを優先。としておきます。
 # んで、コミットする前にビルドして作業コピーのバイナリを更新してからコミット。

ブランチ先はこのまま放置…になりますね。
# ブランチ先で作業中にコミットしたログを後から参照するコトもあるかも知れませんので、リポジトリからブランチ先を削除することはありませんね。
# リポジトリから削除すると後から参照したい時に面倒ですし。(リビジョンを指定して切り替えて~などなど。 削除したところでリポジトリ格納先の容量が空くこともありませんし)
    • good
    • 0
この回答へのお礼

回答頂きありがとうございます。


詳細な説明頂き大変ありがとうございます。実際に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”には何も表記がないので、ブランチ機能を使ったのではなく、フォルダをコピーしてきただけなのかもしれないので心配しています。


とりあえず助かりました。

お礼日時:2014/08/01 14:16

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!