レガシー環境で
個人ベースで何とか頑張る
DVCS(Git)運用
@kimukou2628
この話の対象の方
こんな仕事場状態の方
世間はGit時代だから個人では使ってるけど、結局
SVNだよ−という方
Androidだから生活端末と開発端末一緒でWindows
端末でいいよね(減価償却的に)
@s_kozake 先生が公演されてたお話
仕事でバージョン管理の
というと・・・(1)
すごい楽だった仕事場
ソースがGit管理
対象ブランチ=>作業ブランチ切る
作業ブランチに対してMargeRequest発行
GitLab等でレビューを行う
AndroiderでもMacが開発端末が可能だったりするw
仕事でバージョン管理の
というと・・・(2)
微妙だった仕事場
一応Git管理(作業ブランチ作業までは同じ)
Marge適応ではなくcherry-pick適応が前提
@sinsoku_listy 先生が以前仰ってたローカルコミットを

reset & 直前コミット修正

でまとめる黒魔術が前提だったりする。。
複数回 refs #XXX なコミットすると怒られるorz
SourceTreeで

ローカルコミット履歴を消す

黒魔術な遣り方
仕事でバージョン管理の
というと・・・(3)
よくありがちな仕事場
日本人大好き SVN管理
日本語ファイル名、ディレクトリ名を管理したいから
ブランチ名が自由に作れない
再帰参照で重くなるのでブランチ作成はプロジェクト申請制
ブランチ名が日本語
管理者がわかりやすくする?為
SVN環境が普通だとして

何が問題なの?(1)
SVNは基本一本道
誤ったコミットをするとみんなに影響が出てしまう
SVNでコードレビューをする場合、リビジョン番号&対象ソー
ス一覧を書き出してレビュー願みたいな手作業が発生
複数回 refs #XXX なコミットするとレビューしづらい

微妙いわれるので、凄く神経使う。。。
修正したコミット時に他人のコミットと混ざって凄く見づらい
SVN環境が普通だとして
何が問題なの?(2)
SVNでもアジャイルっぽい進 が希望
仕様決まってない状態でも作業着手しないと間に合わん><
でも中途半端な状況だとコミットは出来ない
1画面1レビューとすると複数画面作業ノルマある場合、

ローカルに複数プロジェクトフォルダ持つの?
適宜作業ブランチの最新は取り込まないと駄目だよね
複数フォルダ持っていると最新取込反映面倒∼
でこれらを解決しよう
とググると
SourceTreeでgit-svn 使いましょう
みたいな情報がQittaでも出てきて

楽勝ウハウハな記事を見るわけですが。。。

そう簡単には行かないわけです・・
まあレガシーな環境だから仕事場に任せて苦労するっ
てエンジニアとして工夫足りないよね!
どうせ進 とか結果しか見ないわけですから。。。
windowでgit-svnして

ハマった/困ったこと(1)
SourceTree
SourceTreeだけインストールな状況だとgitコマンド打ちたい時死ぬ
SourceTree付属のターミナルだとテキストメモってたコマンドとか

コピペ出来ないのでPortableGit別途導入
日本語ブランチ名が git svn clone <<http://URLエンコードしたURL>> 

が出来なくて悩んだ
SourceTree経由だと出来るが重い∼><。(発行してるコマンド打つのが速い)
git -c diff.mnenonicprefix=false -c core.quotepath=false svn clone 

<<http://URLエンコードしたURL>>
windowでgit-svnして

ハマった/困ったこと(2)
元々のコードがLF/CRLF、TAB/SPが入り混じりだった
git config --global core.autoCRLF false 

がデフォルトではない
git svn dcomit した途端、改行コード変換による差分多くて

以前の戻してやり直しといわれて阿鼻叫喚><
ASでSaveAction/ADT でformatter自動適応設定 してたら 同じ状況で(ry

=> formatter自動設定切った。。。

(WinMargeとかでソース差分抽出してExcel貼付納品物とかあるらしい。。)
TortoiseSVN とかでもそうだけど一度フォルダ内を空にして

svn checkoutするのでローカルだけ持っておきたいファイル保持できない。。><
で結局どうしたか
git-svnは取込のみにする



コミットはTroiseSVNでsvn経由で行う
.svn/.git の二重管理になるけど、こっちのほうが手間が少ない
git svn 運用していて.gitの状態がおかしくなることがあるけど、作業ブランチ使い終わっ
た後

.git自体を別ディレクトリでgit svn clone したものを置きなおせば環境復活しやすい
git-svn操作は SouceTree上からだと状態やエラー凄くわかりづらいので

結局コマンド操作
git svn rebase がローカル差分無状態での全取込マージなので仕方ないかも・・・
git pull にあたるものが git svn コマンドにはないからな。。。
git-svn master
作業ブランチA
作業ブランチB
で実作業的な流れ(1)
SoureTree
作業ブランチA=>master マージ適応
変更対象分のみgit comit(localレポジトリのみ)
TroiseSVN
svn update で最新の差分を取得
svn commit で対象ファイルを選択、show logで差分確認コミット
追加したファイルはフォルダ移動して svn add するの多少面倒
で実作業的な流れ(2)
コマンドプロンプト
ローカルの masterブランチ git svn fetch で差分を確認
差分がないなら終了(svn commitした直後なら差分有るはず)
local commitしていないもので

svnから変更取り込み
git svn rebase
取り置き必要な物を再適応必要なら
git stash apply stash@{0}
取り置き必要 git stash
取り置き不必要 git checkout ./
なんでTroiseSVN使ってるの?
eclipse等のSVN Connecterの リポジトリ同期使ってもいいけど・・・
svnの管理外のローカルに保持しておきたいファイルが勝手にコミットされてしまう
こととか有る。。。
そういうところほど

.svnignore/.gitignore 作ってないよね。(端末内のgrobalで頑張れ言われるw)
場所によっては下記のフォルダとかもコミットされていたりする

(ここらへんはアルアル怖い話とかになりそうですね∼
local.properties
gen

レガシー環境で個人ベースでなんとか頑張るDVCS(Git)運用