まれにあるsubversion案件を、普段はgit管理、まとまったらsvnにまるごと手動であげていく、としていましたが、 色々やりにくいので git svn を使ってみます
git と svn はインストール済から始めました
以下は実施済みだったはずなのでスキップ
sudo add-apt-repository ppa:git-core/ppa
sudo apt updateインストール
sudo apt install git-svnsvnからcloneします
標準的なsvnの構成なら -s をつけるといいらしい
git svn clone (your svn repository url) -s (output directory)ですが、用意したsubversion repositoryが trunk ディレクトリしかなかったので
git svn clone (your svn repository url) -T trunk (output directory)git svn clone は git svn init & git fetch なので、途中でうまく行かなかったりしたら
git svn init (your svn repository url) -T trunk (output directory)
cd (output directory)
git svn fetchとするといいです
次のエラーが発生した場合
error: git-svn died of signal 11reference: git svn - git svn clone fails with "error: git-svn died of signal 11" - Stack Overflow
libsvn-perl 1.9.4 で直ったらしい たしかに使ってるのは 1.9.3 でした
sudo add-apt-repository ppa:dominik-stadler/subversion-1.9
sudo apt-get update
sudo apt install libsvn-perllibsvn-perl 1.9.7がはいりました
追加したrepositoryを削除する場合
sudo add-apt-repository --remove ppa:dominik-stadler/subversion-1.9git commit はふつうにします
git add .
git commit -m 'some commit'svnにあげるには、
git svn dcommitここで注意なのが、ローカルコミットのSHA-1チェックサムがすべて変わってしまうことです
つまり、git remote repositoryにpushするときは、git svn dcommit した後にする必要があります
svnから変更をダウンロードするには、
git svn rebaseここで注意なのが、git svn rebaseをすると、git commitが行われます
つまり、手元が作業中だとcommitされてしまうので、git rebaseなどで退避したりする必要があります
1つのブランチだと思うのがいいらしいので、masterだけ使うようにする
git 側も複数ブランチ作っても、git svn dcommit するのは、1つのブランチだけにする
.gitignoreを用意すると、subversionしか使わないユーザーには邪魔なので、
.git/info/exclude
に書くと、gitローカル環境だけignoreされる
git svn show-ignore > .git/info/excludeと最初にしておくとよさそうです