SlideShare a Scribd company logo
1 of 51
Download to read offline
ポイントをおさえて移行しよう!
Git乗り換え超初級
第11回まどべんよっかいち 2015/01/24
KOUJI MATSUI @KEKYO2
A
B
C
F
D
E
G
H
I
J
perf-run2939
2.0.3
自己紹介
• けきょ (@kekyo2)
• 自転車乗りです(多分今日も自転車で来てます)
• .NETとかC#とか。CenterCLRのオーガナイザー。
• 会社やってます。認定スクラムマスター。
あじぇんだ
• Gitに至るまでのざっくりとしたまとめ
• なぜGitはブランチしまくるのか?
• なぜGitはブランチをマージしまくるのか?
• どうやってGitは複数のリポジトリを管理するのか?
• なぜGitのリポジトリはほとんど壊れないのか?
• なぜGitのリポジトリはコピーするだけで容易に移行できるのか?
octocat!
その前に…
• Git知ってますか?
• Git使ってますか?
• あるいは、Subversion知ってますか? VSSとかCVSとか?
• 本日は、gitの使い方というよりも、gitの考え方を共有したいと思います。
• gitの使い方についてのHow-toは、初心者向けサイトがいっぱいあると思
うので、そちらで押さえて下さい。
• 本家「Pro Git」 http://progit-ja.github.io/
• 「サルでもわかるGit入門」 http://www.backlog.jp/git-guide/
ばぃ
どうやら世の中のソースコード管理はGitでほぼ確定
• 何がスタンダードになるか、ずっと注視していました。
• Subversionと思えたこともあった(ソースに貢献し掛けた事もあったけど、
あまりにアレでやめちゃった)。
• Gitをホスティングするサービスが増えた。特にGitHubとBitbucketの存
在が大きい。エコシステムが確立されつつある。
• Visual Studio周りではTFSの存在が大きかったけど、これらの潮流に
はあがらえなかった(と思う)。そして、Microsoftも全面的にGitに対
応(Visual Studio OnlineでGitリポジトリも持てる)。
さぁ、移行しよう!
• 移行って事で、とりあえず、Subversionからの移行を考えます!!
• 移行のポイントは2つ。
• 物理面の移行。SubversionのソースコードをGitに移行する方法。
• 論理面(精神面)の移行。SubversionとGitの違いを把握する。
物理面の移行
• ググったりすると、SubversionのリポジトリをGitのリポジトリに移行する
方法がいろいろ見つかります。
• ポイントとしては、git-svnコマンドセットが鍵になります。
• git-svnを使うと、SubversionのリポジトリをGitのリポジトリのように見
せかける事が出来るので:
• Subversionリポジトリをそのまま運用し、フロントエンドとしてGitを使ってみる事が
出来る。
• SubversionリポジトリとGitリポジトリを共存させることも出来ます。
が…!!!
• 本勉強会では、git-svnは忘れて下さい、という結論 (´Д`)
• 正直、git-svnは取り組むだけ無駄です。
• git-svnコマンドセットは、とてつもなく遅いです(MinGW版git 1.9.4-
preview20140611という、かなり新しい版でも、もう使い物にならないほど遅いです)。
• おまけに動作が不安定です。度々Subversionリポジトリからの取り込みに失敗します。
• この問題を無視したとしても、SubversionのブランチがGit上で再現されても、「全然うれ
しくありません」。これは、SubversionとGitのブランチの考え方の違いから来ます。
• ソースコードを移行する場合は、trunk一式をGitに新規にブチ込んで終わり。それ
以上の何かを求めない方が幸せになれます。古いコードはSubversionで確認だけ
出来ればOKと割り切ります。
git-svnはクソ
物理面の移行
• Gitクライアントは、公式のものを使えば
OKです。
http://www.git-scm.com/
• これはコマンドライン(Windows上で
動くbashなどを含む)のインターフェイ
スで、Linuxで使われているものとほと
んど同じコマンドが使用できます。
• そのため、ググったりして得られる情報
がそのまま使えることも利点です。
物理面の移行
• コマンドラインだけでは使いにくいと思う場
合は、いにしえのVSSクライアントっぽい
「SourceTree」がお勧めです。
http://www.sourcetreeapp.com/
• しかし、これはあくまでGitの使い方を知っ
ていないと、まともに使えません。見た目の
フレンドリーさに騙されないように!!
• 最新の1.6系列は、かなり重くなってしまい
ました…
物理面の移行
• Visual Studioの拡張機能で、純
正の「Microsoft Git Provider」。
VS2013では標準で、2012では
拡張機能としてインストールすれば
使えます。
• あまり管理面では充実していません
が、日々のコミット作業と履歴ビュ
アーはスムーズに使えます。
• これだけで生活するには機能が不
足。
論理面(精神面)の移行
• Subversionを知っている方がほどんとだと思いますが、「Subversion
忘れて下さい!!!」
• そして次に、
論理面(精神面)の移行
「Subversion忘れて下さい!!!」
「Subversion忘れて下さい!!!」
大事なことなので、もう一度:
「Subversion忘れて下さい!!!」
なんだなんだ??
『おれはGitのブランチについて考えを巡らせていたつもりが、
いつの間にかSubversionのブランチの事を考えていた』
論理面(精神面)の移行
• Subversionで使われる用語、特に「ブランチ」について、何となく
Subversionに似ていたり、SourceTreeの樹形図がブランチ構造を表
している所を目撃する事で、いつの間にか「同じようなもの」と思いこんで
しまう。
• ここをおさえておけば、勘違いの大半は
防げます。
あじぇんだ
• Gitに至るまでのざっくりとしたまとめ
• なぜGitはブランチしまくるのか?
• なぜGitはブランチをマージしまくるのか?
• どうやってGitは複数のリポジトリを管理するのか?
• なぜGitのリポジトリはほとんど壊れないのか?
• なぜGitのリポジトリはコピーするだけで容易に移行できるのか?
その前に、Gitのブランチについて一言言っておくか。
• Gitのブランチは、「動かせる目印」です。
• Gitのタグは、「動かせない目印」です。
• Subversionで言う所のブランチは、
Gitでの「コミットの樹形のサマ」です。
• Subversionで「ブランチが移動」、とか言わ
ないですよね?
この一つ一つが「コミット」。
この時点で保存したソースコードの
スナップショット
sb-onmessage
perf-run2939
2.0.3
bug-2993
Gitのブランチ。
特定のコミットを指している「ポインタ」。
ブランチを選択してコミットする事で、ブランチが「移動」する
Gitのタグ。一度付けたら別のコ
ミットに移動する事は出来ない
放置されているブランチ
なぜGitはブランチしまくるのか?
• ブランチを作るのが非常に簡単です。
• “git branch <ブランチ名>”
• なので、ちょっとした変更もブランチして行います。
• そうすると、変更点を安全に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」フォルダ内に、ローカルリポジトリ
データベースが格納されている
普段の作業フォルダー
(Visual Studioの例)
ローカルリポジトリデータ
ベースから出し入れするイ
メージ
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
ブランチ・タグ情報の伝搬
プッシュ
perf-run2939
2.0.3
perf-run2939
2.0.3
A
B
C
F
D
E
G
H
I
J
A
B
C
F
D
E
G
H
I
J
ブランチやタグ情報も、プッシュ
やフェッチでレプリケートされる
複数のサーバーとのやりとり
フェッチ
複数のリモートとやり取
りする時も、全く同じ。
全く関連性のないリポジ
トリでも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
複数のサーバーとのやりとり
プッシュしたサーバー
に伝搬する
P
Q
R
T
S
A
B
C
E
D
P
Q
R
T
S
J
K
L
プッシュ
リモートA
リモートB
A
B
C
E
D
P
Q
R
T
S
J
K
L
ブランチの追従
プッシュ
perf-run2939 perf-run2939
ブランチには追従するサーバーが指定さ
れている場合がある。
移動したブランチをプッシュすると…
リモートA
A
B
C
F
D
E
G
H
I
J
A
B
C
F
D
E
G
H
I
J
perf-run2939 perf-run2939
リモートのブランチも
追従して変更される
「origin」 is 何
• 「origin」について説明出来る所まで来ました。
• 「origin」という単語を聞いた事があるかもしれません。これはGit上でのリモートサー
バー名と考えて下さい。
• ブランチでの「master」同様に、「origin」もまた慣例でしかありません。リモートサー
バーが省略されるときに、「origin」という名前を使うというだけです。
• また、このリモートサーバー名自体が別名と言う扱いです。本当はサーバーを特定す
るURLを使いますが、これに別名を付けて簡便に指定出来るようにしたものです。
例:「https://github.com/kekyo/CenterCLR.SgmlReader」→「origin」
• なので、「oreore」という名前のリモートサーバー名でもOKです。
複数のリモートサーバーの核心
• そして、複数のリモートリポジトリを同時に
扱う場合は、それぞれに異なるリモート
サーバー名を付けて呼び分けたりします。
• オープンソースに貢献したい場合に、どうす
れば自分のコードをオリジナルの変更に追
従させれば良いか、分かりますね?
• リモートサーバーから初回にレプリケート(clone)した場合、そのURLが自動
的に「origin」という名前でローカルリポジトリに記憶されます。
• なので、次回以降、「git fetch」とやるだけで、リモートから変更点を取り込む
ことが出来るわけです。
あじぇんだ
• Gitに至るまでのざっくりとしたまとめ
• なぜGitはブランチしまくるのか?
• なぜGitはブランチをマージしまくるのか?
• どうやってGitは複数のリポジトリを管理するのか?
• なぜGitのリポジトリはほとんど壊れないのか?
• なぜGitのリポジトリはコピーするだけで容易に移行できるのか?
なぜGitのリポジトリはほとんど壊れないのか?
• Visual SourceSafeの悪夢について、もうここで述べるまでもないでしょう。
• Subversionについても、リポジトリの扱いに気を使う事があります。
(最新の版では改善されたという話を見ましたが、もはや使ってないので分かり
ません)
• ソースコード管理システムの保守管理は、ずっと頭の痛い問題でした。
• しかし、Gitのリポジトリは扱いが非常に楽です。Gitのリポジトリは、複雑なデータ
ベースエンジンを使わず、単純なキーバリューストアであり、かつファイルベースなの
です。SQLiteさえ使っていません。
なぜGitのリポジトリはほとんど壊れないのか?
• RDBに由来するエンジンを使っていないという事は、そもそもハードトランザク
ションに頼っていない、と言う事です。
• 実際にはロックファイルを使い、一部のファイルは更新を行います。しかし、大多
数の「コミット情報」は、ユニークなキーとなる値と、それに対応する実データで
構成されるファイルが、どんどん追加されるだけ、という単純な処理で実現して
います。
• 追加が主体で、更新が限定的であるという事は、データが壊れにくい事を表し
ています。
ファイルベースのデータベース?
1.キーは重複しないのか?
• Gitのキーバリューストアで使用するキーは、SHA1のハッシュコードを使用しています
(ハッシュ対象はバリュー全体です)。ハッシュコードなので、キーのコンフリクトが発
生する可能性は0ではありません。が、「そんな天文学的可能性の為に、常に判定
するロジックを含める必要はない」という、非常に単純な割り切りで実装しています。
そもそも、キーは同一リポジトリ内でだけユニークであれば良いので、可能性は更に限
定的です。
• 目に見えるキーとして、「コミットID」があります。あのIDはハッシュコードそのものです。
• ハッシュコードさえ一致すれば、同じものとみなします。リモートリポジトリを回りまわって
同じコミットがやって来たとしても、元は同じであったことを認識出来ます。
ファイルベースのデータベース?
2.不要となったファイルは永遠にゴミなのか?
• ローカルリポジトリのコミットは、うまく操作する事で無かったことに出来ます。その場合
でも、リポジトリからその情報が取り除かれることはありません。削除にまつわる処理
を省くことで、普段のオペレーションの速度が最速となるようにしています。
• ゴミは「ガベージコレクション」を発動させる事で回収(削除)出来ます。これは手
動で実行する事も出来るし、一定の条件で自動的に実行されます。
あじぇんだ
• Gitに至るまでのざっくりとしたまとめ
• なぜGitはブランチしまくるのか?
• なぜGitはブランチをマージしまくるのか?
• どうやってGitは複数のリポジトリを管理するのか?
• なぜGitのリポジトリはほとんど壊れないのか?
• なぜGitのリポジトリはコピーするだけで容易に移行できるの
か?
なぜGitのリポジトリはコピーするだけで容易に移行
できるのか?
• リポジトリを別のサーバーに引っ越しとか、とても頭が痛い(TFS…)
• Gitのリポジトリが、ファイルベースのキーバリューストアである事は説明しました。
• したがって、フォルダごと移動すれば移行は完了。バックアップも丸ごとコピーで完了。
• 以上、他に何も言うことなし。
注:TFSの場合は管理システムとかもあるので、厳密にはリポジトリだけの引っ越しではない
ので、上の説明は公平ではありません (;´Д`)
なぜGitのリポジトリはコピーするだけで容易に移行
できるのか?
• いや、あった (´Д`)
• 「ベアリポジトリ」という形式の特別なリポジトリがあります。とは言っても、実はこれは単に
「.git」フォルダそのものです。
• 通常は、作業するフォルダー配下に「.git」フォルダが置かれますが、ベアリポジトリは作業
フォルダーが無く、いきなり「.git」に含まれるリポジトリのファイル群が存在する状態です。
• これはGitリモートサーバー上に配置するリポジトリとして使います。リモートサーバー上で
はコミットをチェックアウトしないので、ベアリポジトリが最適なのです。
• ベアリポジトリはコマンドで簡単に作る事が出来る(git clone --bare)ので、手元の
ローカルリポジトリから、リモートリポジトリの元ネタを作るのも簡単です。
なぜGitのリポジトリはコピーするだけで容易に移行
できるのか?
• Gitは、リモートサーバーの認証と、コミットユーザーとを明確に一致させていませ
ん。この点はデメリットとも捉える事が出来ますが、その代わり、バックアップがコ
ピーでもユーザーの特定に関する問題が発生しません。
• 知っての通り、コミットユーザーの特定は「メールアドレス」だけです。認証はリモート
サーバー次第、となります(sshかhttpの認証)。
• ここまで移行が簡単だと、Gitの管理に「移行計画」らしきものがほとんどない
(やりたければ今すぐやればいい)事になります。これがGitの扱いを安心感
の高いものにしている理由の一つです。
質疑応答
• ご清聴ありがとうございました!
• 取り上げていませんが、その他のトピック:
• リベース
• コミットの取り消し
• プルリクエスト
• 消えたコミットの謎

More Related Content

What's hot

やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門Tomohiko Himura
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料Hiroki Saiki
 
はじめようGit
はじめようGitはじめようGit
はじめようGittechscore
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜Takashi Uemura
 
CSPO、CSM研修に参加して
CSPO、CSM研修に参加してCSPO、CSM研修に参加して
CSPO、CSM研修に参加してArata Fujimura
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT Akabane Hiroyuki
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。Matsushita Satoshi
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南Kouji Matsui
 
挫折しないRedmine
挫折しないRedmine挫折しないRedmine
挫折しないRedmineGo Maeda
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐりKazuyuki TAKASE
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略Lucien Lee
 
新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)pupupopo88
 
こわくない Git
こわくない Gitこわくない Git
こわくない GitKota Saito
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理Takafumi Yoshida
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupItsuki Kuroda
 
ペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おうペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おうShinya Nakajima
 
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれからMinoru Maeda
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンドYUKI Kaoru
 

What's hot (20)

やりなおせる Git 入門
やりなおせる Git 入門やりなおせる Git 入門
やりなおせる Git 入門
 
社内Git勉強会向け資料
社内Git勉強会向け資料社内Git勉強会向け資料
社内Git勉強会向け資料
 
いつやるの?Git入門
いつやるの?Git入門いつやるの?Git入門
いつやるの?Git入門
 
はじめようGit
はじめようGitはじめようGit
はじめようGit
 
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
もしWordPressユーザーがGitを使ったら 〜WordPressテーマを共同編集しよう〜
 
CSPO、CSM研修に参加して
CSPO、CSM研修に参加してCSPO、CSM研修に参加して
CSPO、CSM研修に参加して
 
まじめに!できる!LT
まじめに!できる!LT まじめに!できる!LT
まじめに!できる!LT
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。CQRS+ESをAkka Persistenceを使って実装してみる。
CQRS+ESをAkka Persistenceを使って実装してみる。
 
SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南SourceTreeで始めよう! Gitへの乗り換え指南
SourceTreeで始めよう! Gitへの乗り換え指南
 
挫折しないRedmine
挫折しないRedmine挫折しないRedmine
挫折しないRedmine
 
関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり関数型プログラミングのデザインパターンひとめぐり
関数型プログラミングのデザインパターンひとめぐり
 
初心者 Git 上手攻略
初心者 Git 上手攻略初心者 Git 上手攻略
初心者 Git 上手攻略
 
新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)新人Git/Github研修公開用スライド(その2)
新人Git/Github研修公開用スライド(その2)
 
こわくない Git
こわくない Gitこわくない Git
こわくない Git
 
一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理一人でもはじめるGitでバージョン管理
一人でもはじめるGitでバージョン管理
 
LEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartupLEANSTARTUPの現場 #leanstartup
LEANSTARTUPの現場 #leanstartup
 
ペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おうペアプロするならgit-duetを使おう
ペアプロするならgit-duetを使おう
 
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
「プロジェクト管理」を超えた Redmine 活用の道のりとこれから
 
Gitのよく使うコマンド
Gitのよく使うコマンドGitのよく使うコマンド
Gitのよく使うコマンド
 

Similar to ポイントをおさえて移行しよう!Git乗り換え超初級

Gitごにょごにょ【概要編】
Gitごにょごにょ【概要編】Gitごにょごにょ【概要編】
Gitごにょごにょ【概要編】Kazuki Shingai
 
GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話Sota Sugiura
 
「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナー
「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナー「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナー
「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナーHajime Ogushi
 
Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Hiroshi Maekawa
 
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベントGit学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベントTakuya Mukohira
 
初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだことYuta Ohashi
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたTakako Miyagawa
 
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜Taiji Tsuchiya
 
Githubサービスについて
GithubサービスについてGithubサービスについて
GithubサービスについてAkura Pi
 
Github Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCIGithub Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCIAtsuki Yokota
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Makoto Kawano
 
Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかGit hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかKakigi Katuyuki
 
GoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするGoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするYuta Ohashi
 
201806 hugo で静的サイト作ってみた
201806 hugo で静的サイト作ってみた201806 hugo で静的サイト作ってみた
201806 hugo で静的サイト作ってみたjunichim
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークMaehana Tsuyoshi
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するためにShun Tsunoda
 

Similar to ポイントをおさえて移行しよう!Git乗り換え超初級 (20)

Gitごにょごにょ【概要編】
Gitごにょごにょ【概要編】Gitごにょごにょ【概要編】
Gitごにょごにょ【概要編】
 
GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話GitHubにおける開発フローについてのお話
GitHubにおける開発フローについてのお話
 
「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナー
「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナー「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナー
「Gitが、おもしろいほどわかる基本の使い方33」 出版記念セミナー
 
Git @ NNCT programming workshop
Git @ NNCT programming workshopGit @ NNCT programming workshop
Git @ NNCT programming workshop
 
Git超入門
Git超入門Git超入門
Git超入門
 
180120 git-nishimoto
180120 git-nishimoto180120 git-nishimoto
180120 git-nishimoto
 
Gitを使いこなしてみよう!
Gitを使いこなしてみよう!Gitを使いこなしてみよう!
Gitを使いこなしてみよう!
 
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベントGit学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
Git学ぼうぜの会 ハンズオン資料 - LOCAL学生部 GWイベント
 
初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと初心者がGoでCLIツール作ってみて学んだこと
初心者がGoでCLIツール作ってみて学んだこと
 
gitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみましたgitを使って、レポジトリの一部抽出forkしてみました
gitを使って、レポジトリの一部抽出forkしてみました
 
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
ルータコンフィグのGit管理のススメ 〜Git管理以外を自動化してみた〜
 
Githubサービスについて
GithubサービスについてGithubサービスについて
Githubサービスについて
 
Github Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCIGithub Actionsで始めるROS/ROS2のCI
Github Actionsで始めるROS/ROS2のCI
 
Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)Python for Data Analysis第1回勉強会(+git入門)
Python for Data Analysis第1回勉強会(+git入門)
 
Git hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうかGit hubで雑誌記事を執筆するのは間違っているだろうか
Git hubで雑誌記事を執筆するのは間違っているだろうか
 
GoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングするGoでシュッとWebスクレイピングする
GoでシュッとWebスクレイピングする
 
Git超入門
Git超入門Git超入門
Git超入門
 
201806 hugo で静的サイト作ってみた
201806 hugo で静的サイト作ってみた201806 hugo で静的サイト作ってみた
201806 hugo で静的サイト作ってみた
 
リモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワークリモートチームとふりかえり改善フレームワーク
リモートチームとふりかえり改善フレームワーク
 
Git Flowを運用するために
Git Flowを運用するためにGit Flowを運用するために
Git Flowを運用するために
 

More from 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
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:codeKouji 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
 
真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
 

More from Kouji Matsui (20)

パターンでわかる! .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
 
Async deepdive before de:code
Async deepdive before de:codeAsync deepdive before de:code
Async deepdive before de:code
 
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
 
真Intermediate languageのキホン
真Intermediate languageのキホン真Intermediate languageのキホン
真Intermediate languageのキホン
 
.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み.NET Coreから概観する.NETのOSSへの取り組み
.NET Coreから概観する.NETのOSSへの取り組み
 

ポイントをおさえて移行しよう!Git乗り換え超初級