Subversionでファイルを分けてコミットする

[Subversion][備忘録]Subversionでファイルを分けてコミットする

あらすじ

コマンドラインからファイルをたくさんコミットしたいんだけど、コミットログを分けたいので分割してコミットしたい。

参考サイト

方法

なんかいっぱいファイルがあるとする。

$  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

とりあえずこんな感じか。