[供養記事]Gitで例えながらSVNをCLI環境で操作する
はじめに
最近、無事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の運用体制に関してはちゃんとした記事を別で書く予定です。
本日は以上です。
Discussion