ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Subversionコミュの質問:バージョンアップしたファイルのコミット

  • mixiチェック
  • このエントリーをはてなブックマークに追加
svnを使い始めて一ヶ月の者です。
よろしくお願いします。

ファイル数、数百程度のフリーソフトを自分のsvnに入れています。
この度バージョンアップがあったので、ダウンロードし動作確認後、
同じところに入れようとして、やり方がわからなくなりました。

最新ソースには現ソースと比較して、
同じファイル・編集されたファイル・追加されたファイル・削除されたファイル
が混在しているとします。

最新ソースのディレクトリに行き、
svn status; svn delete 削除されたファイル
svn add --force .
などとするのが、やりたいことに一番近いです。
が、もちろん svn管理外なのでこれらのコマンドは通りません。

現ソース上に、最新ソースを上書きコピーするのも考えました。
これならsvnコマンドも使えます。
ただこれだと削除ファイルが見つからないのが問題です。

diffやmergeを使えばできそうな気もするのですが・・・


#自分は何か根本的に間違っているのでしょうか?
#検索しても見つからないというのが不思議で不思議で。

コメント(7)

状況がいまいちよく判らない…のですが……。

OSとsvnクライアントはなんです?
フリーソフトって自分で書いているソースですか?


使い方自体を間違えているような気もしますが…
リポジトリからチェックアウトしたら、その作業コピー内で編集作業をするもの…かと。
エクスポートしたファイルを編集するのは違うと思いますが…。
わかり辛いところを、コメントありがとうございます。

フリーソフトは人様のもの(MediaWiki)です。
自分用にカスタマイズしつつ、それを svn に入れています。

開発用途には、Windows と TortoiseSVN を使っています。
(バックアップ用途には、レンタルサーバ と コマンドラインも使用)

> エクスポートしたファイルを編集するのは違うと思いますが…。
ここらへんが問題の肝かなと思っています。
正確には、エクスポートではなくバージョンアップファイルですが。

1. MediaWiki 1.15 をダウンロード
2. 上をカスタマイズ
3. 上をsvnにコミット
4. MediaWiki 1.16 がリリース
5. 1.16をダウンロード
6. 1.16をカスタマイズ(1.15での変更点を手動マージ)
7. 1.16を svn にコミット ←イマココ

1.15 と 1.16 を別ものとして扱うなら別ディレクトリに入れればよいのですが、
十分似ているので同じディレクトリに入れたいのです。
以前の変更履歴も見れますし。
その上でタグを付けたい。

この問題は、「よく似た外部ファイル群をマージする方法は?」
と言い換えることもできると思います。


・・・という説明で、クリアになったでしょうか。
なるほど……
そういう運用はしたことないですねぇ。

svnだけで処理するには、少々厳しいかとおもわれます。

MediaWiki 1.15にあって、MediaWiki 1.16にないファイルはTortoiseSVNで削除。
移動されているファイルがあった場合はTortoiseSVN で移動の処理を行って…
WinMergeで一つずつマージしていく…とか。
新規ファイルがあった場合はTortoiseSVN で追加…になりますが。
# ブランチ切ってから作業して、一通り終わって動作確認とかした後でトランクにマージ…の方が安全かも知れませんな。

素の1.15とカスタマイズした箇所のdiffをとっておいた方が、あとからやるときに楽かも知れないですねぇ。
trunk
tag
branch

といった3つのディレクトリをリポジトリに用意して、

1. tag/mediawiki-1.15 としてインポート
2. tag/mediawiki-1.15 を trunk/mediawiki にコピー
3. trunk/mediawiki に自前の変更を適用してコミット
4. 適時 tag/mediawiki-1.15-my-1.1 とか作成

1.16がリリースされたら、

1. tag/mediawiki-1.16 としてインポート
2. tag/mediawiki-1.15 と tag/mediawiki-1.16 の差分を trunk/mediawiki にマージ:

trunkをチェックアウトした作業領域で、
svn merge --ignore-ancestry .../tag/mediawiki-1.15 .../tag/mediawiki-1.16

3. svn merge の衝突を解決、コミット
4. 必要であれば自分の修正を適用、コミット
5. 適時 tag/mediawiki-1.15-my-1.1 とか作成

外部からのソースをインポートする先として、tagではなくexternalとか使用してもいいかもしれません(し、実際そうしているケースもあります)。

外部からのソースの変更を忠実に反映しつつ、自分の変更も管理したいとなると、このやり方が基本になろうかと思います。
> 瀬戸っぷさん
そのように手動でもできると思いますし、自分も同じように考えていました。
ただバージョンアップの度にやると考えたら、何とか自動化したいと。

> tacaさん
ありがとうございます。
こういう運用に関することはヘルプではわからないのでとても参考になります。

ひとつ質問させてください。
ファイルの追加削除も merge コマンドできちんと反映されるものなのでしょうか?
mergeというと編集を反映するものというイメージが強くて。
手動でやっていたら、リビジョン管理のソフトウェアのために作業しているような気分になりませんか? :-)

> ファイルの追加削除も merge コマンドできちんと反映されるものなのでしょうか?
異なるタグを指定してマージすると、その間の差分を反映します。
この辺りの動作はSubversion, 古くのCVSでも基本的なところは変わりません。

Subversionの場合は祖先の異なる間でマージしようとする場合は、 --ignore-ancestry を忘れずに指定しましょう。
> tacaさん
回答ありがとうございます。
追加削除も問題なく反映するということですね。
実際にやってみます。
オプションも忘れないようにします。心遣い感謝。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Subversion 更新情報

Subversionのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング