SlideShare uma empresa Scribd logo
1 de 63
Baixar para ler offline
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/

Mais conteúdo relacionado

Mais procurados

デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門dsuke Takaoka
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)pupupopo88
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理H2O Space. Co., Ltd.
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級Kouji Matsui
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?naoki koyama
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門to_ueda
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?Teppei Sato
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0Masakazu Matsushita
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
はじめようGit
はじめようGitはじめようGit
はじめようGittechscore
 
Git Terminologies
Git TerminologiesGit Terminologies
Git TerminologiesYash
 
Redmineでメトリクスを見える化する方法
Redmineでメトリクスを見える化する方法Redmineでメトリクスを見える化する方法
Redmineでメトリクスを見える化する方法Hidehisa Matsutani
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するためにShun Tsunoda
 
ZABBIXでメトリクス監視の話
ZABBIXでメトリクス監視の話ZABBIXでメトリクス監視の話
ZABBIXでメトリクス監視の話kenjiskywalkerslide
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザktateish
 
図解gitworkflows(7)
図解gitworkflows(7)図解gitworkflows(7)
図解gitworkflows(7)ktateish
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
Gitを使ってみよう
Gitを使ってみようGitを使ってみよう
Gitを使ってみようTamotsu Furuya
 

Mais procurados (20)

デザイナのためのGit入門
デザイナのためのGit入門デザイナのためのGit入門
デザイナのためのGit入門
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)
 
ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理ノンプログラマでも今日から使える「Git」でバージョン管理
ノンプログラマでも今日から使える「Git」でバージョン管理
 
ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級ポイントをおさえて移行しよう!Git乗り換え超初級
ポイントをおさえて移行しよう!Git乗り換え超初級
 
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
 
15分でわかるGit入門
15分でわかるGit入門15分でわかるGit入門
15分でわかるGit入門
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?君はyarn.lockをコミットしているか?
君はyarn.lockをコミットしているか?
 
いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0いつやるの?Git入門 v1.1.0
いつやるの?Git入門 v1.1.0
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
はじめようGit
はじめようGitはじめようGit
はじめようGit
 
Git Terminologies
Git TerminologiesGit Terminologies
Git Terminologies
 
Redmineでメトリクスを見える化する方法
Redmineでメトリクスを見える化する方法Redmineでメトリクスを見える化する方法
Redmineでメトリクスを見える化する方法
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するために
 
ZABBIXでメトリクス監視の話
ZABBIXでメトリクス監視の話ZABBIXでメトリクス監視の話
ZABBIXでメトリクス監視の話
 
Gitの便利ワザ
Gitの便利ワザGitの便利ワザ
Gitの便利ワザ
 
図解gitworkflows(7)
図解gitworkflows(7)図解gitworkflows(7)
図解gitworkflows(7)
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
Gitを使ってみよう
Gitを使ってみようGitを使ってみよう
Gitを使ってみよう
 

Destaque

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

Destaque (13)

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

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

超初心者向け!Visual Studio + GitHub + Source Treeで始めるアプリケーション開発
超初心者向け!Visual Studio + GitHub + Source Treeで始めるアプリケーション開発超初心者向け!Visual Studio + GitHub + Source Treeで始めるアプリケーション開発
超初心者向け!Visual Studio + GitHub + Source Treeで始めるアプリケーション開発満徳 関
 
ゆるふわっGit入門
ゆるふわっGit入門ゆるふわっGit入門
ゆるふわっGit入門Keisuke Oohata
 
Gitごにょごにょ【概要編】
Gitごにょごにょ【概要編】Gitごにょごにょ【概要編】
Gitごにょごにょ【概要編】Kazuki Shingai
 
20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門20160128 jjug Nightセミナー_Git実践入門
20160128 jjug Nightセミナー_Git実践入門Mizuki Ugajin
 
超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...
超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...
超初心者向け!Visual Studio + Git で始める アジャイル開発 #fukuazu #jazug - ふくあず ~夏の終わりはDevelop...満徳 関
 
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜Taiji Tsuchiya
 
Git勉強会資料
Git勉強会資料Git勉強会資料
Git勉強会資料Kenji Takei
 
Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Hiroshi Maekawa
 
Introduction git
Introduction gitIntroduction git
Introduction gitMisa Kondo
 
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベントGit学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベントTakuya Mukohira
 
GitHub勉強会
GitHub勉強会GitHub勉強会
GitHub勉強会ArusuDev
 
RedmineとGitHubのうまい関係
RedmineとGitHubのうまい関係RedmineとGitHubのうまい関係
RedmineとGitHubのうまい関係Mitsuyoshi Kawabata
 
なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習なるべく噛み砕いたGit基礎講習
なるべく噛み砕いたGit基礎講習石橋 啓太
 
【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのか【ログ分析勉強会】セッションアクティビティログは使えるのか
【ログ分析勉強会】セッションアクティビティログは使えるのかHibino Hisashi
 
サバフェス表彰式Lt+α
サバフェス表彰式Lt+αサバフェス表彰式Lt+α
サバフェス表彰式Lt+αKen Gotoh
 
ユニキャストにおけるGitの運用方針 v0.9
ユニキャストにおけるGitの運用方針 v0.9ユニキャストにおけるGitの運用方針 v0.9
ユニキャストにおけるGitの運用方針 v0.9Unicast Inc.
 
データファースト開発
データファースト開発データファースト開発
データファースト開発Katsunori Kanda
 

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

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

Mais de Kouji Matsui

パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理パターンでわかる! .NET Coreの非同期処理
パターンでわかる! .NET Coreの非同期処理Kouji Matsui
 
Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018Making archive IL2C #6-55 dotnet600 2018
Making archive IL2C #6-55 dotnet600 2018Kouji Matsui
 
Matrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overviewMatrix signal controller and BrainPad overview
Matrix signal controller and BrainPad overviewKouji Matsui
 
What's Functional?
What's Functional?What's Functional?
What's Functional?Kouji Matsui
 
Pitfall for WioLTE
Pitfall for WioLTEPitfall for WioLTE
Pitfall for WioLTEKouji Matsui
 
How to make the calculator
How to make the calculatorHow to make the calculator
How to make the calculatorKouji Matsui
 
Write common, run anywhere
Write common, run anywhereWrite common, run anywhere
Write common, run anywhereKouji Matsui
 
Locality of Reference
Locality of ReferenceLocality of Reference
Locality of ReferenceKouji Matsui
 
Nespのコード生成
Nespのコード生成Nespのコード生成
Nespのコード生成Kouji Matsui
 
C#でわかる こわくないMonad
C#でわかる こわくないMonadC#でわかる こわくないMonad
C#でわかる こわくないMonadKouji Matsui
 
You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.You will be assimilated. Resistance is futile.
You will be assimilated. Resistance is futile.Kouji Matsui
 
How to meets Async and Task
How to meets Async and TaskHow to meets Async and Task
How to meets Async and TaskKouji Matsui
 
Beachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITBeachhead implements new opcode on CLR JIT
Beachhead implements new opcode on CLR JITKouji Matsui
 
Thread affinity and CPS
Thread affinity and CPSThread affinity and CPS
Thread affinity and CPSKouji Matsui
 
Async DeepDive basics
Async DeepDive basicsAsync DeepDive basics
Async DeepDive basicsKouji Matsui
 
continuatioN Linking
continuatioN LinkingcontinuatioN Linking
continuatioN LinkingKouji Matsui
 
Final LINQ extensions III
Final LINQ extensions IIIFinal LINQ extensions III
Final LINQ extensions IIIKouji Matsui
 
Final LINQ Extensions
Final LINQ ExtensionsFinal LINQ Extensions
Final LINQ ExtensionsKouji Matsui
 

Mais de Kouji Matsui (19)

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

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