この記事は Qiita x Code Polaris共催!女性ITエンジニアが作るアドベントカレンダー Advent Calendar 2022 向けに書いたものです。
昨日(2022/12/01)は @mikako0115 さんの「PySimpleGUIでGUIツール作成~Plotlyで月間支出グラフを出力してみよう」でした。
まだお世話になっている理由
ゲーム制作には大小のバイナリファイルが山となります。
どのバイナリファイルが、いつ適用されたのか(あるいは、実装されたのか)というのは重要な情報です。
GitであればGit LFSが採用される現場もあるでしょうが、主にバイナリファイルを更新するのはエンジニアではありません。
その為、エンジニア以外の人々がGitに慣れているかいないかで判断することがあります。
(あと、Git LFSの構築がよくわからな…おっと誰か来たようだ)
何故コマンド?
ゲーム制作の現場は、そのほとんどがWindows環境です。ゲーミングPCバンザイ🙌
その為、作業者の大半はSubversionの操作にTotoiseSVNを選択します。
ただしGUIツールの欠点として、Subversionのコマンドがすべて使えるわけではない、というのがあります。
作業によってはコマンド一行で終わるものがあります。あるいは'&&'で繋げたり、shellまたはバッチファイルで済ませたり…。
つまり時短ができるかも知れません。
これはその覚え書きです。
作業者がよく使うコマンド
今手元にあるやつを反映する
svn add .
svn commit -m "仕様変更: 回復アイテムをうどんからラーメンに変更"
svn add
svn add . で今のディレクトリ以下の変更全てをステージングします。
svn commit
その後、svn commit でサーバにアップロードします。
-m はコミットメッセージです。
オプションがない場合、メッセージのないままサーバにアップロードします。
作業中のものも全部吹き飛ばしてでも、最新の状態にする
svn cleanup --remove-unversioned --remove-ignored --vacuum-pristines
svn revert --recursive .
svn update --set-depth infinity
リビジョン番号指定版
svn cleanup --remove-unversioned --remove-ignored --vacuum-pristines
svn revert --recursive .
svn update --set-depth infinity -r <リビジョン番号>
svn cleanup
例えば svn update の途中で中断したために発生した断片的な更新情報を一度リセットするときに使います。
--remove-unversioned はバージョン管理されていないファイルを削除します。
--remove-ignored はsvn:ignoreが情報としてついているファイルを削除します
--vacuum-pristines は、_.svn_フォルダにある、もう参照されていないファイルを削除します。
svn revert
svn revert でカレントディレクトリの変更を破棄します。
オプション --recursive は再帰的を表します。
最後にディレクトリのパス . を入れます。
svn update
svn update でカレントディレクトリにあるバージョンを変更します。
オプションが何もついていない場合は、サーバにある最新のリビジョン番号を使用して更新されます。
-r または --revision の後に番号を入れると、指定されたリビジョン番号にバージョンをあわせます。
マージ作業で使うコマンド
たまに失敗して、諦めてブランチを切っちゃうんですよね…。
カレントディレクトリのリポジトリのリビジョン番号の取得
svn log --stop-on-copy
現在のディレクトリの、最後のリビジョン番号を取得します。
これがないと、指定されたリビジョン番号までのマージができません。
マージ、ただしマージ先の変更で上書きする
svn merge \
-r <今のリビジョン番号より1つ前>:<マージするリビジョン番号> \
--depth infinity \
--accept theirs-full \
<URL>
svn merge コマンドによって、指定したURLまたはディレクトリにある変更を取り込みます。
-r 以降で、指定したリビジョンの範囲の変更をマージします。
引数の書き方は <今のリビジョン番号より1つ前>:<マージするリビジョン番号> です。
--depth はマージするディレクトリの深度を示します。
infinity は再帰的という意味です。
--accept は競合が発生した際、どちらを取り込むかを示します。
theirs-full はマージする方、この場合 <URL> にある情報で上書きします。
ただし、(これはどうしてかはわかりませんが) カレントディレクトリと <URL>の両方で削除しているとぶつかってしまうようです。
サーバーに反映
最後に svn commit でマージ情報をサーバに反映します。
svn commit -m "merge revision <マージするリビジョン番号> from <今のリビジョン番号>"