SlideShare a Scribd company logo
SourceTreeで始めよう!
Gitへの乗り換え指南
Atlassian User Group NAGOYA 第3回 2015/07/23
Kouji Matsui @kekyo2
A
B
C
F
D
E
G
H
I
J
perf-run2939
2.0.3
master
自己紹介
 Kouji Matsui / けきょ (@kekyo2)
 CenterCLRのオーガナイザー
 会社やってます
 Microsoft MVP for .NET (2015.04~)
 認定スクラムマスター
アジェンダ
 今日のお話
 移行のお話
 Gitのブランチとタグとコミット
 なぜなにGit
 なぜGitはブランチしまくるのか?
 なぜGitはブランチをマージしまくるのか?
 どうやってGitは複数のリポジトリを管理するのか?
 どうしてGitはソースの差分を保存しないのか?
SourceTreeの前に…
 Git知ってますか?
 Git使ってますか?
 あるいは、Subversion知ってますか? VSSとかCVSとか?
 本日は、Gitの使い方というよりも、Gitの考え方を共有したいと
思います。
 Gitの使い方についてのHow-toは、初心者向けサイトがいっぱい
あると思うので、そちらで押さえて下さい。
 本家「Pro Git」 http://progit-ja.github.io/
 Nulabさん「サルでもわかるGit入門」
http://www.backlog.jp/git-guide/
ばぃ
どうやら世の中のソースコード管理はGitでほぼ確定
 何がスタンダードになるか、昔からずっと注視していました。
 Subversionと思えたこともあった(ソースに貢献し掛けた事も
あったけど、あまりにアレでやめちゃった)。
 Gitをホスティングするサービスが増えた。特にGitHubと
Bitbucketの存在が大きい。エコシステムが確立されつつある。
GitとSourceTreeの関係
 Gitは、ソースコード管理システムの一種で、Gitの公式サイトで配布
されているソースコードやバイナリパッケージが、Gitのすべてです。
バイナリパッケージには、Gitのコマンドラインで使用するツールが
含まれています。
 SourceTreeは、Gitプロジェクトの成果物を使用して、グラフィカルな
ユーザーインターフェイスに仕立て上げた、Atlassianの製品です。
 製品ですが、無償で提供されています(登録は必要です)。
GitとBitbucketの関係
 AtlassianのBitbucketサービスは、Git
のサーバーとして、ソースコードの
管理を行います。
 つまり、Gitのコマンドラインや
SourceTreeの接続先です。
 Git自体は公開された技術なので、
Bitbucket以外にもGitのサーバーは沢
山あります(GitHub、Visual Studio
Online等)、SourceTreeからこれらに
接続することも、勿論可能です。
 これら同様、Atlassian Stashにも接続
可能です。
GitとSubVersionの利点とか欠点とか
 本日は、Gitへの乗り換え指南という事で、暗黙にSubversionをター
ゲットにしていますが、両者の比較については....
 ググって下さい(笑)
 統合型とか分散型の利点・欠点とか、多分眠くなりますよね?
 その辺の話題は、ググれば腐るほど出てきますが、
 今から使おうって人にはあまり関係のない話題
 移行したいと思ってる人は、大体分かってる
 今日のセッションとして強いて挙げるなら、
「共同作業での混乱を軽減してくれる、強力な武器がGit」
アジェンダ
 今日のお話
 移行のお話
 Gitのブランチとタグとコミット
 なぜなにGit
 なぜGitはブランチしまくるのか?
 なぜGitはブランチをマージしまくるのか?
 どうやってGitは複数のリポジトリを管理するのか?
 どうしてGitはソースの差分を保存しないのか?
移行しよう!
移行をサクッと考える!
 移行って事で、とりあえず、Subversionからの移行を考えます!!
(注:初めて触る方にはあまり関係ない話です)
 移行のポイントは2つ。
 物理面の移行。SubversionのソースコードをGitに移行する方法。
 論理面(精神面)の移行。SubversionとGitの違いを把握する。
物理面の移行
 ググったりすると、SubversionのリポジトリをGitのリポジトリ
に移行する方法がいろいろ見つかります。
 Bitbucketを使う場合、Bitbucketの機能で簡単にSubversionリポ
ジトリをインポート出来ます。
 コマンドラインのGitクライアントを使って、git-svnでインポー
トする方法が(多分ググると)ありますが、実用的ではないの
で、お勧めしません。
デモ
SourceTreeで行こう!
 Subversionを使っていたなら、
TortoiseSVNとかのクライアントが有
名ですが、Gitの場合は?
 グラフィカルで全体の見通しの良い
「SourceTree」をお勧めします。
http://www.sourcetreeapp.com/
 しかし、これはあくまでGitの使い方
を知っていないと、まともに使えま
せん。見た目のフレンドリーさに騙
されないように!!
念のため
 SourceTreeは、コマンドラインで出来る事
の「全て」はカバーしていません。
 そのため、コマンドラインでもGitが使え
るようにしておいた方が良いのですが、
SourceTreeにも内蔵されているので、最初
は内蔵版をそのまま使えば良いでしょう。
 コマンドラインでの操作は、ググったりし
て得られる情報がそのまま使えることも利
点です。
論理面(精神面)の移行
 Subversionを知っている方がほどんとだと思いますが、
「Subversion忘れて下さい!!!」
 そして次に、
論理面(精神面)の移行
「Subversion忘れて下さい!!!」
「Subversion忘れて下さい!!!」
大事なことなので、もう一度:
「Subversion忘れて下さい!!!」
何故ですか?
 Subversionで使われる用語、特に「ブランチ」について、何と
なくSubversionに似ていたり、SourceTreeの樹形図がブランチ構
造を表している所を目撃する事で、いつの間にか「同じような
もの」と思いこんでしまう。
• ここをおさえておけば、勘違い
の大半は防げます。
メモ:Bitbucketのインポート
を使うと、Subversionのブラ
ンチは失われます!
アジェンダ
 今日のお話
 移行のお話
 Gitのブランチとタグとコミット
 なぜなにGit
 なぜGitはブランチしまくるのか?
 なぜGitはブランチをマージしまくるのか?
 どうやってGitは複数のリポジトリを管理するのか?
 どうしてGitはソースの差分を保存しないのか?
Gitのブランチって何? 知るべきはコレ!
 Gitのブランチは、
「動かせる目印」です。
 Gitのタグは、
「動かせない目印」です。
 Subversionで言う所のブランチは、
敢えて言うなら、
Gitでの「コミット樹形のサマ」です。
 Subversionで「ブランチが移動」とか
言わないですよね?
この一つ一つが「コミット」。
この時点で保存したソースコードの
スナップショット
sb-onmessage
perf-run2939
2.0.3
bug-2993
Gitのブランチ。
特定のコミットを指している「ポインタ」。
ブランチを選択してコミットする事で、ポインタが「移動」する
Gitのタグ。一度付けたら別のコ
ミットに移動する事は出来ない
放置されているブランチ
多人数で共同開発すると...
一時期に、これだけの人々が同じプロジェクト上で同時に
平行開発していることになります。
(正確には平行ブランチ数です)
Subversionでは、これは現実として管理不能です。
このような、強力な道具があるので、
 ソフトウェアの機能を追加したり、修正・変更する作業を加速
させる土台となりえます。
 もちろん、それだけで開発が効率化するわけではありませんが、
例えばSubversion使っていると、暗黙に取りえなかった開発手
法を選択肢として検討できるとか、別の視点で考える手ごまが
増えるという事です。
アジェンダ
 今日のお話
 移行のお話
 Gitのブランチとタグとコミット
 なぜなにGit
 なぜGitはブランチしまくるのか?
 なぜGitはブランチをマージしまくるのか?
 どうやってGitは複数のリポジトリを管理するのか?
 どうしてGitはソースの差分を保存しないのか?
なぜGitはブランチしまくるのか?
 ブランチを作るのが非常に簡単です。
デモ
なぜGitはブランチしまくるのか?
 ブランチを作るのが非常に簡単です。
 なので、ちょっとした変更もブランチして行います。
 そうすると、変更点を安全にGitに保管できます。
 たわいもない変更でも、あとでまた確認したくなることがあり
ますよ。
 リモートに保管しなくても済む方法があります。
リモートに送る前なら取り消す事も
出来なくはない
仕掛かりの変更がある状態でもOK!あらか
じめブランチを切っておかなくても良い
なぜGitはブランチしまくるのか?
 テストのためにブランチを切ります。
 リファクタリングが成功するかどうか自信が無い。
 新しい何かを試すために、既存コードを改造したい。
 それがうまくいったら、正式に採用したいが失敗するかも知れない…
 作業単位に紐づけておきたい。
 そうすれば、後で作業の推移を確認できる。
 他の人との作業分担でバッティングする事が無い。
 一旦は完了した作業を、あとから継続できる。
なぜGitはブランチしまくるのか?
パフォーマンステストしたいので
ブランチを切った
パフォーマンステストを実行
結果が分かった時点でブランチを放置
(あとで再び使用することも可能)
その間の、山のような
共同作業
なぜGitはブランチしまくるのか?
 Subversionを使っていると、「リポジトリをきれいに保ってお
こう」と言う事に異常にこだわり、保存すべきだったファイル
を保存しなかっただとか、一時的に保存するために
(Subversionがあるにも関わらず)、フォルダごと別のどこか
にコピーするなどと言う事があると思います。
 しかし、コピーして残すと、そのファイルが何時の物であった
のかが分からなくなり、結局意味のないものになります。また、
チーム内で共有することが難しくなります。
ソースコード管理システムは、「最終成果物を保存する場所」ではありません!!!
(そう運用するのは自由ですが、不健康です)
アジェンダ
 今日のお話
 移行のお話
 Gitのブランチとタグとコミット
 なぜなにGit
 なぜGitはブランチしまくるのか?
 なぜGitはブランチをマージしまくるのか?
 どうやってGitは複数のリポジトリを管理するのか?
 どうしてGitはソースの差分を保存しないのか?
なぜGitはブランチをマージしまくるのか?
 そんなわけで、Gitではブランチを沢山切ります。そのままだと成果
がばらばらです。
 ある時点でOKとなった変更を、本採用したい。
 そこで、本流と見なしたブランチにマージする事で、正式採用します。
 本流を示すブランチを、慣例で「master」ブランチと呼びます。
これがmasterブランチ。
SourceTree上で見ると、大体樹形図の先頭にある
が、必ずしも先頭にあるわけではない
デモ
なぜGitはブランチをマージしまくるのか?
 masterブランチは、ブランチの名前がたまたま「master」であ
るだけで、Git上で「master」と付いたブランチに、何か特別な
(本流のための大掛かりな)仕掛けがある訳ではありません。
 但し、コマンドラインのGitでは、ブランチ名を省略した時に
「master」というブランチ名が指定された、と解釈します。初
心者向けのGit解説では、この部分がはっきりしていないため
に、誤解を生む原因になっている気がします。
なぜGitはブランチをマージしまくるのか?
 更には、Gitにおいての「本流」の定義はあいまいです。
「master」がデフォルトのブランチ名なので、ここに成果を集約
する使い方が一般的ですが、Gitは機能的にどのブランチが「本
流」かなどと言う事は一切関知しません。
 そのため、「oreore」というブランチ名を使い、これを本流とし
て運用しても、何ら問題はありません。
 勿論、masterを本流とした方が、新しいメンバーに意志疎通しやす
いというような、チーム運営上の一般論はあります。
 逆に、本流のブランチと言う物を決めないで、試行錯誤した結果
のどれかのブランチを、そのまま発展させるという使い方も誤り
ではありません。
Subversionではtrunkを引退させるのは、勇気のいる事かも知れま
せん。
なぜGitはブランチをマージしまくるのか?
 と、いう事は?
 ブランチをどのように作っても、いつでもマージできるし、ど
のブランチを継続利用するかという選択肢も含めて、運用方法
は開発者にゆだねられています。
 Subversionと異なり、ブランチを切るタイミングも、マージす
るタイミングも、開発者自身でやりたいように考える事が出来
るわけです。
 日々のちょっとしたタイミングで、ちょっとした事に、ちょっ
とした道具としてGitのブランチを使います。
 ソースコード管理の重苦しい制約を課すために、Gitのブラン
チがある訳ではありません。
 もちろん、延長線としてソースコード管理まで含めて使っても
いい。そういう柔軟性があります。
アジェンダ
 今日のお話
 移行のお話
 Gitのブランチとタグとコミット
 なぜなにGit
 なぜGitはブランチしまくるのか?
 なぜGitはブランチをマージしまくるのか?
 どうやってGitは複数のリポジトリを管理するのか?
 どうしてGitはソースの差分を保存しないのか?
どうやってGitは複数のリポジトリを管理するのか?
 Subversionのような中央集約型
の管理では、単一のサーバー
にソースコードを保存します。
 Gitは分散管理なので、複数の
サーバーでソースコードを管
理できます。
 更には、サーバーが無くても、
ローカルだけでも管理できま
す。
リモートサーバー無しとは?
 最も単純な「ローカルリポジトリ」のみの運用
「.git」フォルダ内に、ローカルリポジトリ
データベースが格納されている
普段の作業フォルダー
ローカルリポジトリデータ
ベースから出し入れするイ
メージ
Repo
リモートサーバーを使う
 Gitで直接操作できるのは、あくまで「ローカ
ルリポジトリ」のみです。なので、基本は
ローカルリポジトリ運用をそのまま実践すれ
ばOK。
 「プッシュ」という操作で、ローカルのコ
ミット情報がリモートに送信されます(デー
タベース的に言えば、レプリケートされる)。
 逆に「フェッチ」という操作で、リモートか
らローカルにコミット情報が取り込まれます。
 フェッチしただけでは、ローカルリポジトリ
が更新されるだけである事に注意。作業中の
コードには影響しません。
Repo
Repo
非常に重要
コミット情報伝搬の基礎
非常に単純な例で、
ローカルとリモートのリポジトリが、
どのように同期するのかを見てみます。
コミット情報伝搬の基礎
A
B
オリジナルに存在した
コミット
A
B
初回レプリケート(clone)
コミット情報伝搬の基礎
A
B
A
B
C
F
D
E
自分が変更して保存した
コミット
G
H
I
別の人のコミット
サーバーにpush済
コミット情報伝搬の基礎
A
B
C
F
D
E
フェッチ
G
H
I
コミット情報がローカルリポジトリ
に取り込まれる
(しかし互いは影響し合わない)
A
B
G
H
I
コミット情報伝搬の基礎
A
B
C
F
D
E
G
H
I
J
A
B
G
H
I
マージ作業はあくまでもローカルの
手動操作でのみ可能。
マージを試みて初めてコンフリクト
が発生する可能性がある。
コミット情報伝搬の基礎
プッシュ
ローカルのコミットがリモートに
取り込まれる。
結果として整合性が取れる
A
B
C
F
D
E
G
H
I
J
A
B
C
F
D
E
G
H
I
J
ブランチ情報伝搬の基礎
おや、登場人物が足りないですね。
そうです、「ブランチ」はどこに行ったのか?
ブランチに登場してもらい、
もう一度確かめましょう。
master
ブランチ情報伝搬の基礎
A
B
オリジナルに存在した
コミット
A
B
初回レプリケート(clone)
origin/masterorigin/master
リモートブランチ
(後述)
ローカルの
リモートブランチ
(後述)
ローカルブランチ
ブランチ情報伝搬の基礎
A
B
A
B
C
F
D
E
自分が変更して保存した
コミット
G
H
I
別の人のコミット
サーバーにpush済
master
origin/master
origin/master
ローカルブランチ
がコミットで移動 リモートブランチ
がPushで移動
移動していない
ブランチ情報伝搬の基礎
A
B
C
F
D
E
フェッチ
G
H
I
コミット情報がローカルリポジトリ
に取り込まれる
(しかし互いは影響し合わない)
A
B
G
H
I
master
origin/master origin/master
ローカルの
リモートブランチ
も追従
ブランチ情報伝搬の基礎
A
B
C
F
D
E
G
H
I
J
A
B
G
H
I
origin/master
master
origin/master
マージ作業はあくまでもローカルの
手動操作でのみ可能。
マージを試みて初めてコンフリクト
が発生する可能性がある。
ローカルブランチ
がコミットで移動
移動していない
ブランチ情報伝搬の基礎
プッシュ
ローカルのコミットがリモートに
取り込まれる。
結果として整合性が取れる
A
B
C
F
D
E
G
H
I
J
A
B
C
F
D
E
G
H
I
J
origin/master master origin/master
①リモートブランチが
ローカルブランチに追従②ローカルのリモートブ
ランチも追従
コミット・ブランチ情報伝搬の基礎
理解できましたか?!
タグ情報の伝搬
プッシュ
2.0.3 2.0.3
A
B
C
F
D
E
G
H
I
J
A
B
C
F
D
E
G
H
I
J
タグ情報も、プッシュやフェッ
チでレプリケートされるorigin/master master origin/master
複数のサーバーとのやりとり
複数のリモートとやり取
りする時も、全く同じ。
全く関連性のないリポジ
トリでもOK。
A
B
C
E
D
P
Q
R
T
S
A
B
C
E
D
P
Q
R
T
S
J
K
L
リモートA
リモートB
ローカルで更新
origin/master
master
origin/master
B/master
B/master
複数のサーバーとのやりとり
プッシュしたサーバー
に伝搬する
P
Q
R
T
S
A
B
C
E
D
P
Q
R
T
S
J
K
L
プッシュ to A
(origin)
リモートA
リモートB
(変化なし)
A
B
C
E
D
P
Q
S
J
K
L
origin/master master
origin/master
B/master
B/master
ブランチの形成に不要な
コミットは伝搬しない
「origin/master」とは?
 「origin」について説明出来る所まで来ました。
 「origin」という単語を聞いた事があるかもしれません。これはGit
上でのリモートサーバー名と考えて下さい。
 ブランチでの「master」同様に、「origin」もまた慣例でしかあり
ません。リモートサーバーが省略されるときに、「origin」という
名前を使うというだけです。
 また、このリモートサーバー名自体が別名と言う扱いです。本当
はサーバーを特定するURLを使いますが、これに別名を付けて簡便
に指定出来るようにしたものです。
例:「https://github.com/kekyo/CenterCLR.SgmlReader」→「origin」
 なので、「oreore」という名前のリモートサーバー名でもOKです。
複数のリモートサーバーの核心
 そして、複数のリモートリポジトリを
同時に扱う場合は、それぞれに異なる
リモートサーバー名を付けて呼び分け
たりします。
• リモートサーバーから初回にレプリケート(clone)した場合、そのURL
が自動的に「origin」という名前でローカルリポジトリに記憶されます。
• なので、次回以降、フェッチするだけで、リモートから変更点を取り込
むことが出来るわけです。
アジェンダ
 今日のお話
 移行のお話
 Gitのブランチとタグとコミット
 なぜなにGit
 なぜGitはブランチしまくるのか?
 なぜGitはブランチをマージしまくるのか?
 どうやってGitは複数のリポジトリを管理するのか?
 どうしてGitはソースの差分を保存しないのか?
ソースコードの差分を保存「しない」Git
• Subversionは、直前のコミットと今回のコミットのソースコード
の差分を記憶します。
• 多くの場合、ソースコードの差分のデータ量は少なくなる事、そし
て、ソースコード管理システムの伝統(SCCSやCVS)に従ってそ
うなったのではないかと思います。
• しかし、Gitは、変更のあるファイル全体をそのまま保存します。
ファイルの中身の差分については(コミット時には)確認しません。
注意:個人的解釈を含
みます
ソースコードの差分を保存「しない」Git
• 当然、コミット毎のデータ量は増大します。Gitはこれを(zipのよ
うに)圧縮して保存する事で、リポジトリデータベースのサイズを
軽減しています。
• どうしてこのようにしているのか?
• リポジトリが一部破損した場合でも、データを復旧できる可能性が高
い。差分を保存していると、合成して復元しなければならず、途中の
データが壊れていると復元不能となる。
ちなみに、Gitのリポジトリデータベースは、ファイルベースのキーバ
リューストア形式なので、SQLiteのように一部破損で読み取り不能と
いう可能性は低くなります。
• 差分を保存していると、人間による追跡が容易ではありません。
人間による追跡?
• あるブランチ同士をマージしようとします。
• Subversionは、過去のソースコードの差分を論理演算して、現在のバージョン
なら「このファイルのこの行の変更」が「こっちのファイルのここの行に相当す
る」などの、人間離れした判定を行います。
• この計算のため、ソースコード内の差分だけではなく、ファイル単位のファイル
名変更・ファイル移動といった事も記録します。
(なぜ、TortoiseSVNがエクスプローラーのメニューに、似て異なるコマンドを
いくつも追加しているのかの理由に当たります)
• 判定がうまく行っている分には素晴らしいのですが、行内が微妙に変更されてい
るなど、機械的に判定できなかった(失敗した)場合の、競合メッセージが意味
不明になる可能性があります。
• 例:競合、と指摘されている箇所が、競合で問題が発生しているようには見えない
• このような場合、競合の真の原因がどこにあるのかの調査はかなり困難です。
人間による追跡?
• Gitでは、コミット時の目の前にあるファイルが全てです。差分はファイ
ル単位で、しかもファイル名の変更やファイルの移動の追跡もありません。
• 仮にマージ作業で競合が発生した場合、「目の前にあるファイル一式が正
しいもの」と信じられる場合、そのままコミットしてかまいません。
• ファイル名変更・ファイル移動・コードの追加・削除・修正など、全ては
そのままの前提で、リポジトリに保存されます。
• では、マージの際のブランチ毎の追跡計算はいつ行われるのでしょうか?
この計算は異なるブランチをマージするなら避けられない作業ですが:
• Subversionは前述のとおりコミット時に保存した情報を使います。
• Gitはマージ時に毎回計算しなおします。
人間による追跡?
• Gitの方式は、変更について正確に記録されていないため、ヒューリスティック
解析を行っています。つまり:
• 似たファイルを探し、似ていたらファイル名が変更されたか移動されたと推察する。
• ソースコード内の移動についても、似たブロックの移動がないかどうかを判定する。
• もちろん、これは不正確で完全ではありません。ですが:
• Subversionの方式は、元々正確ではないのです。ファイル名の変更を記録するには、
TortoiseSVNのようなトリッキーな方法を使うしかなく、しかもユーザーがその機能
を使わなかったらもうお手上げです。同様にソースコード内の変更も、エディタ操作
を全て記録しなければ、不正確となります。この前提条件はおおよそ守られるとは思
えません。
• Gitの差分計算アルゴリズムは、アルゴリズム強化で改善しています。また、異なる
アルゴリズムをプラグインすることも可能です。
アジェンダ
 おみやげ
 SourceTreeには、マージツールがありません。いくつかのサード
パーティツールが使えますが、今日はお土産として
「TortoiseMerge」を切り出したツールを持ってきました。
 TortoiseMergeは、TortoiseSVNに内蔵されているマージツールです。
そこ、
嫌な顔しないw
 使い勝手はそこそこですが、使うにはTortoiseSVNを
インストールする必要がありました。
 これを使えば、TortoiseSVNをインストールしないで、
TortoiseMergeを使えます。
https://github.com/kekyo/TortoiseMergePortable
質疑応答
 ご清聴ありがとうございました!
 取り上げていませんが、その他のトピック:
 リベース
 コミットの取り消し
 プルリクエスト
 消えたコミットの謎
 スライドはブログに掲載します。
http://www.kekyo.net/

More Related Content

PDF
やりなおせる Git 入門
PDF
新人Git/Github研修公開用スライド(その1)
PDF
新人Git/Github研修公開用スライド(その2)
PDF
ノンプログラマでも今日から使える「Git」でバージョン管理
PPTX
ぼくとJenkinsおじさんの360日戦争
PDF
社内Git勉強会向け資料
PDF
15分でわかるGit入門
PDF
いつやるの?Git入門
やりなおせる Git 入門
新人Git/Github研修公開用スライド(その1)
新人Git/Github研修公開用スライド(その2)
ノンプログラマでも今日から使える「Git」でバージョン管理
ぼくとJenkinsおじさんの360日戦争
社内Git勉強会向け資料
15分でわかるGit入門
いつやるの?Git入門

What's hot (20)

PDF
はじめてのGit forデザイナー&コーダー
PDF
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
PDF
デザイナのためのGit入門
PPTX
Git svnではじめる忍者のごとく潜むgit
PDF
2ヶ月前にgitを始めた私からこれから始める皆さんへ
PDF
Gitはじめの一歩
PPTX
ASTERIA徹底運用Tips
PDF
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
PDF
elixirを使ったゲームサーバ
PDF
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
PDF
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
PDF
Goでかんたんソースコードの静的解析
PDF
継承やめろマジやめろ。 なぜイケないのか 解説する
PDF
Gitのよく使うコマンド
PDF
20分でわかるgVisor入門
PPTX
x86x64 SSE4.2 POPCNT
PDF
仮想化環境におけるパケットフォワーディング
PDF
オトナのTDD(テスト駆動開発)入門
PPTX
JavaScriptでSQLを唱えたいだけの人生だった
PDF
コルーチンでC++でも楽々ゲーム作成!
はじめてのGit forデザイナー&コーダー
【Unite 2018 Tokyo】60fpsのその先へ!スマホの物量限界に挑んだSTG「アカとブルー」の開発設計
デザイナのためのGit入門
Git svnではじめる忍者のごとく潜むgit
2ヶ月前にgitを始めた私からこれから始める皆さんへ
Gitはじめの一歩
ASTERIA徹底運用Tips
30分でRHEL6 High Availability Add-Onを超絶的に理解しよう!
elixirを使ったゲームサーバ
TEE (Trusted Execution Environment)は第二の仮想化技術になるか?
クラウドネイティブ時代の分散トレーシング - Distributed Tracing in a Cloud Native Age
Goでかんたんソースコードの静的解析
継承やめろマジやめろ。 なぜイケないのか 解説する
Gitのよく使うコマンド
20分でわかるgVisor入門
x86x64 SSE4.2 POPCNT
仮想化環境におけるパケットフォワーディング
オトナのTDD(テスト駆動開発)入門
JavaScriptでSQLを唱えたいだけの人生だった
コルーチンでC++でも楽々ゲーム作成!
Ad

Viewers also liked (14)

PDF
Win32 APIをてなずけよう
PDF
不健康なIt戦士を健康的にするアレの話
PDF
ポイントをおさえて移行しよう!Git乗り換え超初級
PDF
抽象太郎ものがたり そして伝説へ
PDF
式の体を成して無い式を式の体を成すように式と式木で何とかする式
PDF
プロ生ちゃんをひろっちゃう!
PDF
真Intermediate languageのキホン
PDF
.NET Coreから概観する.NETのOSSへの取り組み
PDF
Async deepdive before de:code
PDF
async/awaitダークサイド is 何
PDF
Final LINQ Extensions II
PDF
メタプログラミングでExcel仕様書よさらば
PDF
Hello! intermediate language
PDF
Bluetoothでgo!
Win32 APIをてなずけよう
不健康なIt戦士を健康的にするアレの話
ポイントをおさえて移行しよう!Git乗り換え超初級
抽象太郎ものがたり そして伝説へ
式の体を成して無い式を式の体を成すように式と式木で何とかする式
プロ生ちゃんをひろっちゃう!
真Intermediate languageのキホン
.NET Coreから概観する.NETのOSSへの取り組み
Async deepdive before de:code
async/awaitダークサイド is 何
Final LINQ Extensions II
メタプログラミングでExcel仕様書よさらば
Hello! intermediate language
Bluetoothでgo!
Ad

Similar to SourceTreeで始めよう! Gitへの乗り換え指南 (20)

PPTX
Git @ NNCT programming workshop
PDF
超初心者向け!Visual Studio + GitHub + Source Treeで始めるアプリケーション開発
PDF
ゆるふわっGit入門
PDF
Git Flowを運用するために
PDF
Gitごにょごにょ【概要編】
PDF
20160128 jjug Nightセミナー_Git実践入門
PDF
超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...
PDF
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
PPTX
Git勉強会
PPTX
Git勉強会資料
PDF
Gitを使いこなしてみよう!
KEY
一人でもはじめるGitでバージョン管理
PPTX
Introduction git
PDF
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
PDF
GitHub勉強会
PDF
RedmineとGitHubのうまい関係
PDF
なるべく噛み砕いたGit基礎講習
PDF
【ログ分析勉強会】セッションアクティビティログは使えるのか
PPTX
スキトラGit
PDF
サバフェス表彰式Lt+α
Git @ NNCT programming workshop
超初心者向け!Visual Studio + GitHub + Source Treeで始めるアプリケーション開発
ゆるふわっGit入門
Git Flowを運用するために
Gitごにょごにょ【概要編】
20160128 jjug Nightセミナー_Git実践入門
超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
Git勉強会
Git勉強会資料
Gitを使いこなしてみよう!
一人でもはじめるGitでバージョン管理
Introduction git
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
GitHub勉強会
RedmineとGitHubのうまい関係
なるべく噛み砕いたGit基礎講習
【ログ分析勉強会】セッションアクティビティログは使えるのか
スキトラGit
サバフェス表彰式Lt+α

More from Kouji Matsui (19)

PDF
パターンでわかる! .NET Coreの非同期処理
PDF
Making archive IL2C #6-55 dotnet600 2018
PDF
Matrix signal controller and BrainPad overview
PDF
Fun with BrainPad
PDF
What's Functional?
PDF
Pitfall for WioLTE
PDF
How to make the calculator
PDF
Write common, run anywhere
PDF
Locality of Reference
PDF
Nespのコード生成
PDF
C#でわかる こわくないMonad
PDF
You will be assimilated. Resistance is futile.
PDF
How to meets Async and Task
PDF
Beachhead implements new opcode on CLR JIT
PDF
Thread affinity and CPS
PDF
Async DeepDive basics
PDF
continuatioN Linking
PDF
Final LINQ extensions III
PDF
Final LINQ Extensions
パターンでわかる! .NET Coreの非同期処理
Making archive IL2C #6-55 dotnet600 2018
Matrix signal controller and BrainPad overview
Fun with BrainPad
What's Functional?
Pitfall for WioLTE
How to make the calculator
Write common, run anywhere
Locality of Reference
Nespのコード生成
C#でわかる こわくないMonad
You will be assimilated. Resistance is futile.
How to meets Async and Task
Beachhead implements new opcode on CLR JIT
Thread affinity and CPS
Async DeepDive basics
continuatioN Linking
Final LINQ extensions III
Final LINQ Extensions

SourceTreeで始めよう! Gitへの乗り換え指南