svnのマージの使い方

このQ&Aのポイント
  • Atmelのマイコンのプログラムファイルの管理をtortoise svnで行っています。
  • trunkフォルダにリリースVersionのプロジェクトフォルダが入っていて、そのプロジェクトフォルダ内のファイルの検証や修正を行うためには必ずbranchフォルダにbranch機能でフォルダコピーしてからそのファイルの修正などを行っています。
  • 共同作業者さんがbranchでの修正が先に終わってtrunkにマージしてリリース版が更新される場合があるので、現在の最新のtrunkのファイルを自分のbranchにマージする方法というのはありますでしょうか?
回答を見る
  • ベストアンサー

svnのマージの使い方。

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

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

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

>現在の自分のbranch >のファイルはリリース版のものからすると古くなってしまうので、現在の最新のtrunkのファイルを自分のbranchにマージする方法というのはありますでしょうか? 運用方針次第ですからなんとも……。 ちなみに私だったら次のような運用でしょうかね。 ・機能ブランチはそのまま開発継続する。 ・他の機能ブランチがtrunkにマージされていた場合に『自分の機能ブランチをマージ』する場合は、  切り替えでtrunkに切り替えた後で自分の機能ブランチをマージする。  ※衝突が発生したらそこで対処してからtrunkにコミットする。 ・機能ブランチで開発中にtrunkにコミットされた不具合修正が『影響が小さい』場合は手動で取り込む。  ※trunkとマージする際に衝突する可能性があるのでその時に対処する。 ・機能ブランチで開発中にtrunkにコミットされた不具合修正の『影響が大きい』場合はtrunkから再度機能ブランチを作って開発中だった機能ブランチをマージする。  ※開発中だった機能ブランチはそのままクローズ(触らない)する。  ※もちろん、新たに機能ブランチを作成する前に開発中のものはコミットしておく。 基本は「trunkにマージする」であって「trunkを機能ブランチにマージする」ではありません。 # ついでに、開発終了した機能ブランチの削除もしません。 # 機能ブランチ削除したところでリポジトリ側の容量は変わりませんし、機能ブランチ作成中の履歴(コミットログなど)も参照しずらくなります。 # Rev指定で覗けるので参照できなくなるわけではないが……。 >以前trunkのファイルを自分のbranchにマージしたら 機能ブランチをtrunkにマージする時にハマりそうですねぇ…。 機能ブランチと書いていますが…バグ修正用にtrunkから切り出したブランチも同様です。 一度trunkから機能ブランチ作成してtrunkにマージした後、その機能ブランチで盛り込んでしまった不具合があった場合は…新たに不具合修正用のブランチを切るか、trunkでそのまま修正するか…のどちらかになります。 # マージ終わった後の機能ブランチは触らない。再マージが面倒になるから。 # マージ時にRev範囲を指定すれば可能…ではあるが、その間にtrunkに入った変更部分で余計な衝突なりが発生するかも知れないので。(基本的には大丈夫なハズ…ですけどね。機能ブランチ開発中に別の機能ブランチがtrunkにマージされた。というのと状況的に一緒ですし。運用方針次第です。)

techhouse
質問者

お礼

回答頂きありがとうございます。 trunkが更新されてしまった場合には、そのtrunkの機能ブランチを作って、自分の機能ブランチをマージするというのはとてもいいやり方のように感じました。失敗してもtrunkに直接影響が出るわけではないですしいいですね。 大変助かります。

関連するQ&A

  • 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/の内容を既にマージしているということになっているようなのですが、これを取り消す方法などをありますでしょうか? また、このようなマージ機能の使用方法として適切な方法などご教示頂きまうよう、よろしくお願い致します。

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

    /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では、サブフォルダのマージはできないのでしょうか。

  • sourceforge.jpで協力者でないアカウントユーザはSVNの過去のリビジョンにはアクセスできない?

    まだ、sourceforge.jp初心者です。 いま、sourceforge.jpで公開されているプロジェクトで勉強してみたいと考えているのですが、ちょっと疑問に思うことがあり、 普段からtortoise SVN等を使ってはいるのですが、sourceforge.jpではプロジェクトの協力者でないと、そのSVNリポリトジを参照してファイルをダウンロードしたりすることはできないのでしょうか?

  • gitでsvnのリポジトリにコミット相当の機能

    現在githubをしています。githubサーバーにプロジェクトのリポジトリを作成して、githubのアプリケーションで自分のPCにローカルリポジトリを作成して、そこでプログラム修正を行ってコミットなどを行っていき、大体の修正が終わったので、githubサーバーのリポジトリに対してSVNのマージのようなことをしたいと思います。 このローカルのリポジトリの内容をgithubサーバーのリモートリポジトリの内容にマージするような内容をgitではなんという機能でできるのかご教示頂きますよう、よろしくお願い致します。

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

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

  • svnリポジトリ内の一部のフォルダのみリポジトリ化

    現在、SVNでファイルの管理を行っています。1つのリポジトリに複数のプロジェクトを入れていたのですが、それぞれ進捗が激しくなってきたので、プロジェクトごとにリポジトリを作りたいと思っています。 それぞれのプロジェクトのファイル更新履歴もそのまま新しいリポジトリに引き継ぐことは可能でしょうか? どうぞ、ご教示頂きますようお願い致します。

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

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

  • ubuntu Linuxのsvnの使い方

    現在ubuntu Linuxを使用しています。現在sourceforgeサイトに置いている自分のプロジェクトでsvnかgitでアクセスして自分のプロジェクトのファイルをダウンロードしたいと思っているのですが、どのようにすればsourceforgeの自分のリポジトリにアクセスしてダウンロードするのか教えて頂けないでしょうか。 まず、自分のubuntuにはsvnやgitのクライアントがインストールされているのかを確認する方法などを教えて頂けるとありがたいです。 どうぞ、よろしくお願い致します。

  • svnを使用してタグ、ブランチの作成の仕方

    EclipseのSVNのエクスプローラ上から「新規」→「タグ(又はブランチ)」とやると 「リポジトリーの子フォルダーを取得する操作に失敗しました。」 というエラーが出てしまいました。 SVNのリポジトリを作成すると通常、「trunc」、「tags」、「branch」といった ディレクトリがEclipseのSVNのエクスプローラから見えると思っていたのですが 自分の環境(添付画像)では見当たりませんでした。リポジトリにこれらのフォルダを 自分で作成してみたのですが結果は同じでした。 何が原因かわかりますでしょうか。