[Subversion][備忘録]Subversionでファイルを分けてコミットする
あらすじ
コマンドラインからファイルをたくさんコミットしたいんだけど、コミットログを分けたいので分割してコミットしたい。
参考サイト
- http://www.caldron.jp/~nabetaro/svn/svnbook-1.5-final/html-chunk/svn.ref.svn.c.changelist.html:title
- http://d.hatena.ne.jp/namutaka/20110125/1295964889:title
- http://www-aos.eps.s.u-tokyo.ac.jp/~takagi/subversion.html#sec16
- http://blog.cgfm.jp/garyu/archives/83:title
方法
なんかいっぱいファイルがあるとする。
$ ls
a001.html a019.html a037.html a055.html a073.html a091.html
a002.html a020.html a038.html a056.html a074.html a092.html
a003.html a021.html a039.html a057.html a075.html a093.html
a004.html a022.html a040.html a058.html a076.html a094.html
a005.html a023.html a041.html a059.html a077.html a095.html
a006.html a024.html a042.html a060.html a078.html a096.html
a007.html a025.html a043.html a061.html a079.html a097.html
a008.html a026.html a044.html a062.html a080.html a098.html
a009.html a027.html a045.html a063.html a081.html a099.html
a010.html a028.html a046.html a064.html a082.html index.html
a011.html a029.html a047.html a065.html a083.html link.html
a012.html a030.html a048.html a066.html a084.html menu.html
a013.html a031.html a049.html a067.html a085.html product.html
a014.html a032.html a050.html a068.html a086.html
a015.html a033.html a051.html a069.html a087.html
a016.html a034.html a052.html a070.html a088.html
a017.html a035.html a053.html a071.html a089.html
a018.html a036.html a054.html a072.html a090.html
で、全部管理下。
$ svn st
A .
A a048.html
A a084.html
A a076.html
A a068.html
A a096.html
A product.html
A a088.html
略
順番としては、index, link, menu, productを一回目にコミット、その後はaxxx.htmlファイルを20個ずつコミットしていく全6回のコミット作業をしたい。
毎回
$ svn commit a001.html a002.html a003.html ...
とするのはめんどうくさいしミスもしそうなのでこれを上手くコミットしたい。いろいろありそうだけど、とりあえずいけそうだと思ったのはchangelist(cl)コマンドを使ってコミット毎にグループを作り、グループ単位で作業していくという戦法。
Changelist作成
changelist(cl)コマンドで特定のファイルをグループにできる。
$ svn cl CHANGE_LIST_NAME FILE1 FILE2 ...
$ svn cl mainpage index.html link.html menu.html product.html
パス 'index.html' は変更リスト 'mainpage' に属しています。
パス 'link.html' は変更リスト 'mainpage' に属しています。
パス 'menu.html' は変更リスト 'mainpage' に属しています。
パス 'product.html' は変更リスト 'mainpage' に属しています。
これでindex, link, menu, productはmainpageというグループに所属した。うーん。ここのファイル指定が手作業になっちゃうとあまり意味がないような気もするが……。ステータスを見るとちゃんと他のファイルt区別されている。
$ svn st
A .
A a048.html
略
A a092.html
--- 変更リスト 'mainpage':
A product.html
A menu.html
A link.html
A index.html
以後、index.htmlたちはchangelist mainpageとして指定する事ができる。今回は連番なので一括で指定もできるがファイル名に統一性がない場合は一個ずつ指定するしかないかな。
$ svn cl a021-40 a0{21..40}.html
パス 'a021.html' は変更リスト 'a021-40' に属しています。
パス 'a022.html' は変更リスト 'a021-40' に属しています。
パス 'a023.html' は変更リスト 'a021-40' に属しています。
略
略。でchangelistが6つできた。
$ svn st
--- 変更リスト 'a001-20':
A a001.html
略
--- 変更リスト 'mainpage':
A product.html
略
--- 変更リスト 'a021-40':
A a021.html
略
--- 変更リスト 'a081-100':
A a084.html
略
--- 変更リスト 'a041-60':
A a048.html
略
--- 変更リスト 'a061-80':
A a076.html
略
Commit
commitコマンドに–changelistオプションを指定。
$ svn commit --changelist CHECK_LIST_NAME
changelistを指定すると……
$ svn commit --changelist mainpage
1
2 -- この行以下は無視されます --
3
4 A checklistdir/product.html
5 A checklistdir/menu.html
6 A checklistdir/link.html
7 A checklistdir/index.html
そのグループのファイルだけが選択される。一回コミットするとchangelistはなくなるが、–keep-changelistsオプションを使えば残したままにできる。
$ svn commit --cl mainpage --keep-changelists
ステータスを見ると残っている! ただし、ファイルの変更はないのでAとかMとかはついていない。
$ svn st
略
--- 変更リスト 'mainpage':
product.html
menu.html
link.html
index.html
とりあえずこんな感じか。