git-svnでSourceTreeを使う！


git-svn環境でいろいろやる時に、黒い画面使うよりもデザイナさんにとってはGUIで書かれたアプリを使う方が気軽に使えるんじゃないかとおもって、少しだけ探したのですが、qiitaで見つけた記事がいい感じだと思ったので実際に試してみました。
それで、よく使う作業は具体的にどう操作すればよいか調べてみました。


こちらのqiitaの記事を参考にさせて頂きました。
http://qiita.com/items/263577c8cc4e1c65b19b


#1.インストール
こちらから。
http://www.sourcetreeapp.com/

#2.ターミナルで`git svn clone`する
```
git svn clone -s http://hogehoge [フォルダ名]
```

#3.SourceTreeで開く
「ファイル→開く」で開く

#4.作業について
僕が思った３パターンを想定して書いてます。

##1.masterを変更してsvnのtrunkに反映させる場合
※個人的には、svnのtrunkの内容を取ってきてmasterに反映させて、ローカルブランチを切って、作業が終わったらmasterにmergeしてsvnのtrunkに反映するのが無難かと思います。コンフリクトとか起きるといろいろと面倒くさそうなので。。。ほんのちょっとの変更であれば大丈夫だと思いますが、、、

 1. svnのtrunkの最新の内容を取得する  
プルをクリックする。`git svn rebase`と同じ意味のはず。
 2. ファイルの編集  
自由に編集して下さい。
 3. masterにコミットする
  1. 説明の「Uncommited changes」をクリック
  2. 「作業ツリーのファイル」に変更されたファイルが表示される。
  3. 確認し、問題がなければ「Index」にステージされたファイルに移動する。
  4. 変更されたファイルを全て確認したら、コミットボタンを押す。
  5. コミットメッセージを記入して、コミット。
 4. svnのtrunkに変更を反映させる
  1. svnの最新の内容をローカルに取り込むため、「プル」ボタンを押す  
※`git svn rebase`とかと同じ
  2. コンフリクトが発生したら。。。以下の手順で解消する。  
1.発生したファイルを修正  
2.作業ツリーのファイル→indexにステージしたファイルへドラッグ  
3.再度「プル」ボタンをクリック。リベースを処理中。。。というメッセージが出るので、「リベースを続ける」をクリック  
4.もし再度コンフリクトが発生したら、1.に戻って再度コンフリクトの解消を行う。  
※もしどうしてもコンフリクトを解消出来なくて、どうしようもなくなってしまったら、`git rebase --abort`すればrebaseする直前に戻れます。自分はstashして退避させて、branch切ってpopしてからmasterにmergeしたら安全だと思ってます。。。
 4. 「プッシュ」ボタンをクリックして、trunkへ最新の内容を反映させる！！

##2.masterからローカルブランチ切って作業してmasterにマージしてtrunkに反映する場合。
※自分の場合は、出来れば毎回こうしたらいいんじゃないかなぁと思ってます。

 1. svnのtrunkの最新の内容を取得する  
「プル」をクリックする。`git svn rebase`と同じ意味のはず。
 2. ローカルブランチを切る。
  1. 「ブランチ」をクリック。
  2. 「新規ブランチ」にブランチ名を入れて、「ブランチを作成」をクリック。
  3. 「svnブランチを作成しますか？」と聞かれて、２択を迫られるので、「Gitのローカルブランチを作成」をクリックする。  
※デフォルトで「新規ブランチをチェックアウト」にチェックが入っているはずなので、自動的に作成したブランチに切り替わる。
 3. 作業する。
 4. 変更内容をローカルブランチにコミット
  1. 説明の「Uncommited changes」をクリック
  2. 「作業ツリーのファイル」に変更されたファイルが表示される。
  3. 確認し、問題がなければ「Indexにステージされたファイル」に移動する。
  4. 変更されたファイルを全て確認したら、コミットボタンを押す。
  5. コミットメッセージを記入して、コミット。
 5. マスターにローカルブランチの内容をマージする。
  1. マスターに現在の切り替える。  
サイドバーの、「master」をダブルクリック→「ブランチ切り替えの確認」が表示されるので、OKをクリック
  2. 最新のtrunkの情報を更新する。  
「プル」をクリック
  3. 作業したローカルブランチの内容をマスターにマージする。  
「マージ」をクリック
  4. マージしたい説明の部分をクリック。
  5. 変更箇所が出てくるので、確認してOKをクリックする。
  6. 「Subversionのリポジトリへマージすることをお勧めできません」って出るけど、「続ける（推奨しません）」をクリックする。
  7. マージ完了！
 
##3.trunkからsvnのブランチ切って作業して複数人数で作業してからtrunkに反映する場合

※今までは基本的に１人で作業する事を想定して書いてましたが、複数人数で作業する場合はこれになると思います。ってか、むしろこれが普通なのか。

 1. 「2.masterからローカルブランチ切って作業してmasterにマージしてtrunkに反映する場合」の項目の、１〜４までは同じ。masterからローカルブランチ切って作業してコミットした後。
 2. 途中でsvnのブランチ切って複数人数で作業する事になった！
 3. trunkからsvnのブランチを作成する
  1. masterへブランチを切り替える。  
左サイドバーのmasterをダブルクリックする。
  2. 「プル」をクリックして最新の情報を取得
  3. 「ブランチ」をクリック→新規ブランチにブランチ名を入れる→「ブランチを作成」をクリック
  4. 「Subversionブランチを作成しますか？」と聞かれて、「Subversionブランチを作成」をクリックする。
  5. svnのブランチが作成される。
 4. 作成したsvnのブランチと、ローカルで作業してたブランチをマージする。
  1. 「マージ」をクリック
  2. 一覧から、マージしたいローカルブランチを選択
  3. 「Subversionのリポジトリへマージする事をお勧め出来ません」のメッセージが出るが、無視して「続ける」をクリック
  4. プッシュをクリックしてマージした内容をsvnのブランチに反映させる。
 5. svnのブランチへ変更を反映させる。
  1. プッシュをクリック
  2. プッシュ先のリポジトリがSubversionになっている事を確認して、「ok」をクリック
  3. 「Subversionにプッシュしますか？」というメッセージが出るので、「OK」をクリック
  4. 変更がsvnのブランチに反映される。
 6. svnのブランチの変更内容を取得する。  
「プル」をクリックして最新の内容を取得する。
 7. いろいろ作業する。
 8. 変更を、masterにマージする。
  1. 作業してたブランチ上でプルをクリックし、更新の取得漏れがないか確認する。
  1. masterブランチへ切り替え  
左サイドバーのmasterをダブルクリック
  2. 最新の更新内容を取得する為に、プルをクリックして取得する。
  2. 「マージ」をクリック
  3. マージする対象を選択する。（ジャンプ先をマージしたい作業してたブランチを選択すると間違えにくい）  
※誤ってsvnのブランチの方を選択しないように注意！
  4. 「ok」をクリック
  5. 「Subversion のリポジトリへマージすることをお勧めできません」と出るが「続ける（推奨しません）」をクリック
  8. masterにマージされる。
 9. 変更内容をsvnのtrunkにアップする。
  1. 「プッシュ」をクリック
  2. プッシュ先のリポジトリを確認して、trunkになっていたらOKをクリック
  3. 「Subversion にプッシュしますか?」と出るので、OKをクリック


#5.終わりー
SourceTreeでgit-svnを使ってて、ある程度想定されるパターンについて実際に使ってみて、書いてみたけど、長ったらしくなった上にわかりにくくなってしまった。。。

結構使いやすいツールだと思うので是非使ってみる事をオススメします！