たくさんの「いいね」ありがとうございます。
ちょっと別視点からバージョン管理システムの記事を書いてみました。
そちらもよろしければごらんくださいませ。
【Git】オレならこう説明する!Git初心者への用語説明
後、個人ブログもはじめましたのでよろしければ(宣伝)
3年ぶりにこの記事の続きをnoteで書きました。
https://note.mu/nahito/n/nded6e4dd7382
はじめに
「勝利にコミットせよ!」「結果にコミットせよ!」
……は?
何を言ってるかさっぱりわかりません.
コミットって何?つーかコミットって日本語で言うと何?言ってみろよ!!!
そんなエンジニア見習いがとうとうGitHubを勉強し始めました.
一緒にターミナルをいじりながら読んでいくと,理解が深まるかもしれません.
GitHubとは?
要は自分の書いたコードを公開するツールです.
企業では,その会社の中だけで公開し,バグやセキュリティ上の問題がないかなどを他の社員に見てもらい,レビューしてもらったりもしています.
GitHubのおおまかな仕組み
用語の説明
まず先に,訳の分からない用語の説明からしておきます.
すべて私なりの解釈なので,間違っていたら,ご指摘をお願い致します.
インデックス
これから登録するファイルが,以前とどう変わったかを登録する一時的な場所です
リポジトリ
貯蔵庫.データなどを保存しておく場所です
リモートリポジトリ
GitHub上の,データを保存している場所を指します
ローカルリポジトリ
GitHubに送信するデータを登録しておく,自身のPC上の場所を指します
コミット
GitHubでは,GitHubにデータを送信する前に一時的にローカル環境にデータを登録し,その後一気にGitHub上に送信します.
そのローカル環境にデータを登録することをコミットといいます.
プッシュ
ローカル環境に登録していた(コミットされた)データをGitHubに送信&公開することを言います.
GitHubの流れ
ここでは,GitHubにデータを送信するまでの大まかな流れと仕組みを説明します.
1)あなたのPCで開発した物を,ローカルリポジトリのインデックスに追加(アッド)します.
2)あなたのPCで開発した物を,ローカルリポジトリに登録(コミット)します
3)全て登録し終えた後,それらをGitHubに送信(プッシュ)します
以上です
実際に使ってみる
とりあえずMacintoshでやってみます.
GitHubのアカウントは適当に作れると思いますので,割愛します.
GitHubにリポジトリを作る(リモートリポジトリ)
ではまず,GitHub上にリポジトリを作ります.
TOPページ右下の,「+New Repository」を押してください・
次に,項目をうめて,「Create Repository」を押します.
これでリポジトリの作成が完了です.
表示されたページのURIを使いますので,とりあえずそのことを覚えておいてください.
ローカル環境にリポジトリを作る(ローカルリポジトリ)
次にローカルリポジトリを作成します.
作る場所はどこでも良いのですが,とりあえずHOMEディレクトリの下にでも作っておきましょうか.
ターミナルで以下のコマンドを叩いていきます
$ mkdir github
$ cd github
$ mkdir gittest
$ cd gittest
$ git init
$ git init
を叩くと,ローカルリポジトリが作成されます.
ファイルをローカルリポジトリに登録(コミット)してみる
では実際にファイルをローカルリポジトリに登録してみましょう.
適当にテキストファイルを作成します.
私はこれを作成したホームディレクトリ/github/gittestフォルダ
に保存しました.
hello git!
次に,データの変更点を追加します.
今回の場合は「新規作成」ということになりますね.
これらはgitのコマンドで全部勝手にやってくれます.
$ git add test.txt
上記のコマンドを叩くと,変更点を勝手にインデックスに追加してくれます.
何もエラーが表示されなければ成功です.
例えば
fatal: Not a git repository (or any of the parent directories): .git
が表示されたら,git init
が失敗している(ローカルリポジトリが作成できてない)ということになります.
インデックスにデータを追加したら,登録(コミット)します.
$ git commit -m "初めてのGitHub!"
このコマンドで,インデックスの内容が全てローカルリポジトリに登録されます.
ワオ簡単!
この時点では,『ローカル』リポジトリなので,GitHub上には反映されておりません.
GitHubにデータを送信する(リモートリポジトリにデータをプッシュする)
では,GitHubにデータを公開してみましょう.
先ほどのURIを使います.
まず,インデックス(ファイルの変更点などのリスト?)をGitHubに作成.
$ git remote add origin https://github.com/あなたのUSER_ID/HelloGit.git
そしてコミットされたデータをGitHubに送信(プッシュ)します.
$ git push origin master
ここまでエラーなく進めると,GitHubにデータが登録されていると思います.
とりあえずここまでのまとめ
さあ,いろいろコマンドが出てきたのでまとめてみます.(自分用も兼ねて
1)ローカルリポジトリを作成する
$ git init
2)ローカルリポジトリにファイルの変更点を追加(インデックスに追加)
$ git add ファイル名
3)ローカルリポジトリにインデックスに追加したファイルを登録
$ git commit -m "変更点などのコメント"
4)追加したインデックス(ファイルの変更点など)をGitHubに作成
$ git remote add origin リポジトリのURI
5)ローカルリポジトリのファイルをGitHubのリポジトリに送信
$ git push origin master
勝利にコミットせよ!
勝利に,ローカルリポジトリにデータを追加せよ!
うん,やっぱり意味わかりませんね.
プッシュしたデータを変更・更新してみる
せっかくGitHubにデータを公開したのですから,変更してみましょうか.
先ほどのtest.txtを編集してからプッシュしてみましょう.
hello git!
Edit test!
1)変更をインデックスに追加
$ git add test.txt
2)ファイルを登録(コミット)
$ git commit -m "変更してみたよ"
3)データの送信
$ git push origin master
ブランチ(枝)とは?
ブランチを切る……マージする……これまたGitにはよく出てくるワードではないでしょうか?
枝を切って結合する?
ってか,「マージ」ってそもそも動詞だから「マージする」 = 「結合するする」じゃねーの?
用語説明
マージ
「結合する」という意味.
複数に分岐させた物をつなぎます
ブランチ
その名の通り「枝」.
一気にバージョンを上げる時などに,失敗した時用にコピーを作っておくイメージ
実際にブランチを作ってみる
まあ,まずはブランチを作ってみましょうか.
$ git branch testbranch
これで「testbranch」という名前のブランチが作成されます.
上図で言うところの「Ver.2.0β」のイメージですね.
なお,今ある(存在する)ブランチは,
$ git branch
で確認できます.
ブランチを移動する
$ git branch
でブランチを確認すると,
「master」と「testbranch」というブランチがありますね?
今は「master」というブランチに「*」がついています.
これは今プッシュ(GitHubにデータを送信)すると,
masterブランチに全部データが書き込まれますよという意味になります.
いやいや,せっかくコピーを取ったのだからそっちに書き込んでいってもらわないと
困りますよね?
参照&書き換え先のブランチをtestbranchに変えてみます.
$ git checkout testbranch
これで再度$ git branch
をすると,「*」の位置がtestbranchに移っていることが確認できます.
作ったブランチにデータを送信してみる
では,testbranchにデータを送信(プッシュ)してみます.
まずはテキストを書き換えましょうか…
hello git!
Edit test!
branch test!
1)インデックスに変更点を登録
$ git add test.txt
2)ファイルをローカルリポジトリに登録(コミット)
$ git commit -m "ブランチを作ってそのブランチにプッシュ!"
3)GitHubにローカルリポジトリのデータを送信(プッシュ)
$ git push origin testbranch
!注意!
今回は「testbranch」にデータを送信するので,
$ git push origin testbranch
です!
ではGitHub上に送信されているかどうかを確認してみます.
左のブランチのプルダウンから「testbranch」を選んでください.
すると,先ほどプッシュしたものが反映されていると思います.
ブランチを本筋に統合する
所謂「マージ」と言うものをしてみます.
ブランチを本筋に反映させます.
masterブランチに,testbranchを取り込みます.
1)まずは取り込み先のブランチを選択します.
$ git checkout master
2)そして,materにtestbranchを結合します.
$ git merge testbranch
3)最後に,結合情報をGitHubに送ります(プッシュ)
$ git push origin master
今回は「master」ブランチにデータをプッシュするため,コマンドは「master」になっています.
反映されていますね!
このようにしてバージョンデータを管理できるっぽいです.
いやー…便利!!
なのかな?
ここまでのまとめ
今回もコマンドをまとめてみます.
1)新しいブランチを作る
$ git branch ブランチ名
2)今あるブランチを確認する
$ git branch
3)ブランチを移動する
$ git checkout ブランチ名
4)ブランチを結合(マージ)する
※$ git checkout
で,結合したいブランチに移動して…
$ git merge 取り込むブランチ名
で,「ブランチを切る」ってどのことですか…?
一旦ここまで
次はGitHub上のデータをローカルリポジトリにダウンロードする「プル(pull)」というのをやってみます.
続きをnoteで書きました!
よかったらぜひ!!
https://note.mu/nahito/n/nded6e4dd7382
分かりやすい記事をありがとうございます。
Gitは仰るとおり慣れないとホント分かりづらいサービスなので助かります。
( Microsoftが買収した後、UI/UXが悪化しないとイイのですが。)
話を戻し、質問がございます。
上記でブランチを変更したあと
についてがまだ理解できておらず、
よろしければ教えていただけませんでしょうか?
@think-a-lot ようこそ、Gitの世界へ!
ご質問、コメントありがとうございます!
まず、ブランチの意味を覚えます。
「
master
ブランチ」は、「完成品」を置くところです。基本的にmasterブランチには製品としてリリースしていいものを置くところと考えてください。
ですので、開発中のコードなどは別ブランチで管理し、最後にmaterブランチにマージを行います。
Pull-Requestという機能で、masterへのマージがWeb上でボタン一つでできるようになります。
さて、ブランチ変更の意義の通り、masterブランチは「完成品」を置くところということがわかりました。
なので基本的に、「今自分が作業しているブランチにpush」しないといけません。
これは一人で開発しているときにはありがたみがよく分かりませんが、複数人で開発している場合、
あなたが今書いているコードを勝手に上書きされたら嫌ですよね?
自分のブランチ以外にpushするとそういう事が起こってしまいます。
なので、自分のブランチに対してpushするようにします。
蛇足
この記事を書いたとき、私もGitなんて全く知らず、「おお!動いた動いた!よし、コミカルに記事書くか!」という感じでした。
そろそろ書き直し&追記をしなきゃなー……
ご返答 誠にありがとうございます。
恐れ入りますが、質問内容について補足させてください。
より適切な言葉を考えましたところ、
"ブランチ変更の意義"というよりは、
"ブランチ移動の意義"と申し上げた方が良かったかもしれません。
記事にて
と書かれておられました。
これはブランチを testbranch に移動してしまえば、
master へのプッシュはできないという認識でよろしかったでしょうか?
つまり
$ git push origin master
と打ってもプッシュはされずエラーになると思いました。
そしてもし、testbranchに移動後 "masterへのプッシュができない" のであれば
$ git push origin testbranch
というように、testbranch にしかプッシュできないのに、
再度コマンドに testbranch のワードを入力することに違和感を覚えました。
もしかすると testbranch のワードを省略できるのかもと思いました。
また逆に、testbranch に移動後 "masterへのプッシュができてしまう" のであれば
ブランチを移動する必要性が不明となります。
言葉が至らず申し訳ありません。
宜しければこの点についてはいかがでしょうか?
@think-a-lot コメントありがとうございます!
確かにそのとおりです!
今いるブランチにpushするなら、
git push
のみでできますね!他のブランチにPushするには、
git push orign 元ブランチ名:push先ブランチ名
としなければいけませんね!
なるほど。理解できました。ありがとうございます。
初めまして。質問させていただきたいのですが、
”ローカル環境にリポジトリを作る”の項目で、
「ターミナルで以下のコマンドを叩いていきます」とご説明されていますが、
この「ターミナル」は、Windowsにおける「コマンドプロンプト」と読み替えて問題ないでしょうか。
また、その他、ご説明の中でMacとWindowsで何かしら読み替えが必要な箇所はございますでしょうか。
@yasuhiro8814
問題ないです!
Linuxだと「端末」ですね!
多分他に読み替えはないと思いますね……
実際やってみてエラーになったらそのときにご質問いただければと!
何を読んでも「分からない」+「出来ない」だったけど、あなた様の記事ではじめて一通りのことができるようになりました。感謝感謝…
@maxtaq
そう言ってくださる方がいるから、こうやって記事を公開したくなるんですよね!
こちらこそ感謝感謝!!
こんにちは。GitHubに登録してみたもののなんやねんこれわからんわい状態だったのですが、ようやく使うことができました。非常に感謝しています。この記事見ながら繰り返しトライしてみます!素敵な記事をありがとうございます!
@sakuron コメントありがとうございます!
こちらこそ、励みになるコメントありがとうございます!
頑張って便利に使えるようになってくださいね!
わかりやすい記事を書いていただきありがとうございます。質問なのですが、一つのリモートリポジトリには同一のディレクトリ内のローカルリポジトリのみからしかpushできないのでしょうか?
具体的に言うと、/home/usr/python/からpushされたローカルリポジトリに別のディレクトリ/home/usr/bashから同一のリモートリポジトリにpushすることが可能なのかということです。
@8M5MgHqNywfgw7q
できると思いますよ!
やってみてください~
@Mtk0g3 コメントありがとうございます!
お力になれてよかったです!