⚰️

[供養記事]Gitで例えながらSVNをCLI環境で操作する

2021/05/21に公開

はじめに


最近、無事svnからgitへの移行PJが成功したので、自分が昔に社内用に作ったsvnのコマンドライン操作の雑メモドキュメントをzennに供養がてら移行して公開します。

現在、svnな環境に新しく入った方に役立てていただければ幸いです。gitへの移行方法についての記事もそのうち書きます。

gitで例えるsvnのCLI操作

.gitignoreのように非管理化のファイルを記述したい。

非管理であることをコミットしないなら下記に(Mac)
~/.subversion/config

# 下記をアンコメント
global-ignores = *.o *.lo *.la *.al .libs *.so *.so.[0-9]* *.a *.pyc *.pyo __pycache__

例えばjetbrains系のエディタを使っていると.ideaファイルなどが混入することがあるので上記にそのまま*.ideaを追加してしまいましょう。

git diffと同じことをしたい

$ svn diff

色合いをgit diffと同様にしたいならまずHomebrewを使ってcolordiffを入れて、

$ brew install colordiff

configに下記を追加します。

diff-cmd = colordiff

git statusと同じことをしたい

$ svn status

git checkout HEAD PATHと同じことをしたい

$ svn revert PATH

git fetch + git merge / git pullと同じことをしたい

$ svn update

git log、git showと同じことをしたい

$ svn log

「logが長すぎ!」となった場合は、下記のように.txtファイルに書き込むなどすると良いです。

$ svn log > ~/Desktop/log.txt

上記が打つの面倒なので私は.bashrcに下記のようなaliasを設定しています。

alias sl="svn log > ~/Desktop/log.txt; view ~/Desktop/log.txt"

またlogのRevisionがわかっていて、より詳しくみたいというときは

$ svn log -r Revision番号 -v --diff

-vで変更のあったファイルを、--diffで変更差分を表示してくれます。

git commit / git pushと同じことをしたい

svnの場合、gitと違ってローカルリポジトリがないのでcommit即リモートリポジトリにpushと同義となります。

$ svn commit ファイルパス

上記のcommitの際に使うエディタは環境変数$SVN_EDITORで設定出来ます。

-- .bash_profileなどに設定すると良い(私はvimが好きなのでvimで指定してますがここはご自由に)
export SVN_EDITOR=vim

また、コミットの前にsvn updateをしておいたほうが良いでしょう。

$ svn update ディレクトリパス

ただしまれに下記のようなエラーが出ることもあります。

svn: E200009: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: E200009: 'commitしようとしたパス' はバージョン管理下におかれていません

こういった場合にはまずaddしてからcommitしましょう。

$ svn add ファイルパス

git cloneと同じことをしたい

svn checkout svn+ssh:://リモートのパス ~/ローカルマシンのパス/ディレクトリ

git checkout <コミット>したい(一時的に過去のコミットに戻りたい)

$ svn up -r リビジョン番号

現在のリビジョンを確認するには、

$ svn info

最新のバージョンに戻るには

$ svn up

そもそもsvnを辞めてgitを使いたい

そのお気持ち、わかります。

まずは代替ツールとしてgit-svnを使ってこっそり一人だけgitでの開発を行うことで、gitの基本ノウハウを自分の中に蓄積しましょう。
※ただしgit-svnは中々に癖があり、今はどうかわかりませんがMacだとしょっちゅうエラーになっていたので(DockerやVirtualBoxなどで)仮想環境を構築してトライするのがオススメです。

慣れてきたらgitのホスティングサービス(例えばGitHubなど)に触れて、gitの運用体制について自分なりに練った上で周りに打診してみましょう。

git-svnやgitへの移行PJ、gitの運用体制に関してはちゃんとした記事を別で書く予定です。

本日は以上です。

GitHubで編集を提案

Discussion