stdlayoutでは、

svn でブランチ作成後

git svn fatch でリモートブランチが作成される。

最初の記事にまとめた

 

該当の修正は、そんな大した修正ではないのだが・・。

https://github.com/nilesflow/git-svn-test2019/commit/51512d9d9fdddd4239f000f822b58e8a668293cf

https://github.com/nilesflow/git-svn-test2019/commit/d8f5f6d5c2ee6e84ac7b0c43cfb5f28f03113dce

rebase すると、git svn dcommit 後に、コミットIDを書き換えないために行った、git pull によるコミットがマージされてしまう。

この状態で、dcommit すると成功した。

・dcommitでコミットIDが変わった事に対して、git origin から pull すると、svn 側が上記エラー状態に

・dcommitでコミットIDが変わった事を正とすると、git push -f で歴史書き換えになってしまう。

うーん。

git svn rebase すると、マージコミットなりが rebase されまくるので、

オプション見てもこれを防ぐことは不可能。

git svn の操作対象ブランチはおとなしく、rebase を受け入れるしかない、と考えた。

svn/trunk と git側の master は共存できない、という結論。

こんなエラーも

ちょっとはまった。

ローカルSVNサーバ

github

という構成でgit-svnを使用。

svn1.6だと発生する旨の記事が多い。

 

環境

 

windowsでgithubでpullreqをmergeすると、発生していた。

git svn dcommit すると

git-svn Cannot accept non-LF line endings in ‘svn:log’ property

 

恐らく、コミットログにcrlfが混じる。

git commit --amend

git rebase -i -p HEAD~3

-pしないとマージコミットが表示されない。

git pull 後に、git merge、git commit 等でも発生しなくなる。

何らかの操作でgit log に modify が入ればよい模様。

 

--stdlayout

trunk, branches, tags の構成

 

--prefix svn/

git の リモートリポジトリが衝突しないように。

--localtime

git ログ等の時間がデフォルトUTCなので日本時間に合わせる。

表示上だけで、SVN側ではJSTになっている等、問題はなかった。

 

変則的な構成

・turnkは直接指定

・branches/tagsはディレクトリ指定

・–ignore-refs で無視するパターンをうまく指定する

 

master ができる。

現在のリポジトリから svn/trunk へ

masterに入れば、masterから。

develop に入れば、developから。

基本的には、materだけで行う運用が無難そう。

★別記事で。

 

dcommit すると、git のcommitIDが変わる。

git の masterへマージ後、git svn dcommit

で変わってしまうので、git側へは -f push が必要。と思う。

また何らかのエラーでcommitツリーを変えてしまった時も問題。

master使わないほうがいいのか?

 

svn リポジトリから取得

チェックアウトしているローカルリポジトリにマージされる。

master に入れば、masterに。

develop に入れば、developに。

どこにいるかわからないまま実行すると危なそう。

基本的には、master だけで行う運用が無難そう。

★別記事で

 

git 側に開発ブランチを作成

 

githubのリモートにpush

 

参考

https://qiita.com/hidekuro/items/4727715fbda8f10b6b11#svn-%E3%83%96%E3%83%A9%E3%83%B3%E3%83%81%E3%82%92%E5%8C%BA%E5%88%A5%E3%81%99%E3%82%8B