GitHub 公式サイト
目次
- GitHubとは
- Gitとは
- Gitの基本
- GitHubへユーザー登録する
- 新しくリポジトリを作成する
- Eclipseと連携
- 1つのプロジェクトにGitHubとBitbucketの両方を連携させる
- コミット&プッシュでGitHubサーバーへ反映
- 別ユーザーを追加
- Reset | リセット
- Resetで1つ前のコミットに戻す
- Revert | プッシュの取り消し
- 競合の修正方法
- SSHを設定する
- ファイルまたはフォルダをGit管理外にする | Ignore
- Gitとbitbucketの覚書
付録
- バージョン管理システム
- リポジトリとは
- リモートリポジトリとは
- ローカルリポジトリとは
- リモートリポジトリとローカルリポジトリの関係
- Eclipse側でリモートリポジトリの連携を解除
- ブランチとは
- masterブランチとは
- GitHubでブランチをブランチを切る(ブランチ作成)
- GitHubでブランチを切り替える
- Eclipse側にもブランチを作成する
- GitHubでブランチを統合する
- Eclipse側で不要になったブランチをローカルリポジトリから削除する
- Gitのコミット
- プルとは | pull
- フェッチとは | feche
- マージとは | merge
- プッシュとは | push
- 競合発生のタイミング
- non-fast-forward | ブランチでコミットに失敗したら・・・
- インデックスへ追加 | add
- Eclipseで add 操作
- インデックスの省略
- インデックスへ add する利点
- 間違えてインデックスに追加してしまったら
- ワークツリーとは
- HEADとは
- ORIG_HEADとは
- FETCH_HEADとは
- リモートリポジトリのコミット一覧を見る
- リベースとは | rebase
- 参考リンク
GitHubとは
GitHubは
Gitを使いやすくしたwebサービスのこと。
GitHub社により運営されており、有料版と無料版がある。
GitHub以外にもGitを利用したwebサービスはいくつか存在する。
(
Bitbucketなど)
有料版と無料版の違い
無料版は、
リポジトリが一般公開される。オープンソース向きである。
有料版は、
許可したユーザーだけリポジトリにアクセスできる。社内向きである。
Gitとは
Gitとは
バージョン管理システムのことである。
他のバージョン管理システムとの違い
Git以外のバージョン管理システムの
リポジトリはサーバー上にひとつだけ作られる。
しかし、Gitの場合、サーバー上だけでなく、各ユーザーのディレクトリにもリポジトリが複製される。
サーバー上に作成されたリポジトリを
リモートリポトリと呼び、
各ユーザーのディレクトリに作成されたリポジトリを
ローカルリポジトリと呼ぶ。
これによりネットワークに接続されていなくてもバージョン管理が行える。
(参考:
リモートリポジトリとローカルリポジトリの関係)
リポジリトリが一つだけのときに起こる問題
リポジトリが1つだけだと、大勢の利用者により変更内容が競合し、整合性を維持するのが難しい。
そのためGitではリモートリポジトリとローカルリポジトリに分散している。
リポジトリをリモートリポジトリとローカルリポジトリに分けていることから、Gitは分散型バージョン管理システムと呼ばれている。
Gitは高速
Gitはもともと膨大なソースコードからなるLinux開発で用いられていた。そのため、巨大ソースコードでも高速に動く。
Gitの基本
Gitの基本
Gitのファイル管理場所は
ワークツリー、
インデックス、
ローカルリポジトリ、
リモートリポジトリに分けられる。
バージョン管理の主な作業は、編集したファイルを共同管理場所に送ることである。※1
Gitではファイルの編集場所をワークツリーと呼び、共同管理場所をリモートリポジトリと呼んでいる。
つまり、ワークツリーからリモートリポジトリにファイル情報を送ることがGitでの主な作業である。
そして、ワークツリーからリモートリポジトリまでの間にインデックスとローカルリポジトリを経由することになる。
ファイル保管場所
上図にあるようにファイル管理場所はワークツリー、インデックス、ローカルリポジトリ、リモートリポジトリの4つ分けられている。
これがGitを難しいものにしている要因でもある。
しかし、それぞれには役割があるので以下に説明する。
ワークツリーからインデックスへのadd
通常、ワークツリーでファイルを編集したらコミットする、という流れであることが多い。
しかし、本来Gitでは編集ファイル情報をインデックスに記録したあと、コミットするという流れである。
1件ずつファイルをaddでインデックスに貯めておいてから、切りの良いところで一気にコミットするのである。
インデックスについて
インデックスからローカルリポジトリにコミット(Commit)
ローカルリポジトリへのコミット。Gitでコミットといえば、ローカルリポジトリへのコミットのことを指すことが多い。※3
インデックスはあまり表に出てこないので、ワークツリーからローカルリポジトリという感覚でコミットすることが多いが、
やはり内部ではインデックスを経由しているのである。
ローカルリポジトリからリモートリポジトリへプッシュ(Push)
ローカルリポジトリを共同管理場所であるリモートリポジトリ(GitHubサーバー)へ反映させる。
時折、他の人が編集したファイルと競合が発生するので、競合修正作業が必要になる。
リモートリポジトリからローカルリポジトリへプル(Pull)
リモートリポジトリに存在する他の人が編集したファイルを自分のローカルリポジトリとワークツリーに反映させる。
フェッチとマージの組み合わせでプルと同じことができる。
時折、他の人が編集したファイルと競合が発生するので、競合修正作業が必要になる。
ワークツリーからインデックスへのadd
ワークツリーはファイルを編集する作業場所であり、EclipseのPHPエクスプローラーに相当する。
インデックスはコミットするファイル情報を一時保管する場所である。
add という操作で編集したファイル情報をワークツリーからインデックスへ送る。
その後、commit操作でインデックスからローカルリポジトリへ編集ファイル情報を送る。
Eclipseと連携
GitHubサイト上で作成したリポジトリとEclipseを連携させる。
連携させると
プッシュ、
コミット、
フェッチ、
プル、
マージなどのGit操作がEclipse上から操作できるようになる。
手順
-
GitHubにログイン中の状態で、「https://github.com/」
にアクセスし、対象のリポジトリをクリックする。
-
「Clone or download」ボタンを押し、URL部分をコピーして保持しておく。
保持したURLはEclipseの連携で使う。
保持するURLの例
https://github.com/amaraimusi/livipage_js.git
注意
SSHの設定をしている場合は、Use SSHをクリックしてからURLをコピーすること。
SSH版URLの例
git@github.com:amaraimusi/livipage_js.git
-
Eclipseを起動する。
File → Import と操作しImport画面を開く。
-
Git / Projects from Git を選択して、Nextボタンを押す。
-
Clone URI を選択して、Nextボタンを押す。
-
「URI: 」へ保持していたURLを入力する。
つづいて、User , Password に GitHubで登録したユーザーとパスワードを入力する。
入力が終わったらNextボタンを押す。
SSH版である場合
ユーザーとパスワードによる認証は不要になる。
Userは"git"、Passwordは空で良い。
-
リポジトリのブランチを選択し、Nextボタンを押す。
-
Directory にプロジェクトのフルパスを入力する。
Initial branch,Remote nameはデフォルトのままでよい。
入力が終わったらNextボタンを押す。
-
Import as general project (一般プロジェクト) を選択して、Nextボタンを押す。
-
何も入力せず、Nextボタンを押す。
-
以上で、GitHubと連携したプロジェクトが作成される。
次へ:GitHubに編集したファイルを反映
Eclipse:1つのプロジェクトにGitHubとBitbucketの両方を連携させる
Eclipseの1つのプロジェクトに対して複数のGitサービスを連携させることが可能である。
例えばGitHubとBitbucketを1つのプロジェクトに連携させているとする。
編集して
ローカルリポジトリへ
コミット後
プッシュを行うが、この時GitHubかBitbucketを選ぶことができる。
つまり、GitHubへプッシュしたら、続いてBitbucketを選んでプッシュするという芸当が可能になるわけである。
以下の例では、GitHubと連携済みのプロジェクトへ、さらに
Bitbucketを連携させる手順について説明する。
Bitbucketを追加連携する手順
-
Bitbucketのサイトにログインし、
新しくリポジトリを作成する。
そして、新リポジトリのページへアクセスする。
「私はゼロからスタートします。」をクリックして、リモートURLをコピー取得しておく。
リモートURL
https://amaraimusi@bitbucket.org/amaraimusi/livipage_js.git
-
続いてEclipseを開く。
Eclipseエクスプローラから対象プロジェクトを右クリックし、Team → Push Branch と操作する。
-
New Remote ボタンを押す。
-
Remote name に任意の名前を入力。
URI に上記でコピーしたリモートURIを入力する。(Host,Repository path にも自動セットされる)
Bitbucketで登録しているアカウントのUserとPasswordを入力する。
入力が終わったらFinishボタンを押す。
-
そのままNextボタンを押す。
-
Nextボタンを押す。
-
パスワードの入力がもう一度求められるので、上記と同じパスワードを入力する。
-
OKボタンを押す。
以上でbitbucketの連携完了。
-
Bitbucketの対象リポジトリにアクセスし、ファイル群がアップされているか確認する。
アップされていれば連携成功である。
-
以上で、GitHubとBitbucketに連携できるようになった。
プッシュを行う際、GitHubかBitbucketを選択できるようになる。
コミット&プッシュでGitHubサーバーへ反映
GitHubサーバーに編集したファイルを反映できる。
おおまかな流れとして、まず編集したファイルをEclipse上の
ローカルリポジトリに
コミットし、そしてローカルリポジトリからGitHubサーバーの
リモートリポジトリに
プッシュする。
以下に詳細な手順を示す。
手順
-
Eclipseを起動し、GitHubリモートリポジトリと連携したプロジェクトを開く。
適当にファイル編集をする。
-
続いてローカルリポジトリへコミットする。
プロジェクトを右クリックし、 Team → Commit と操作。
-
Commit message に適当にメッセージを入力する。
Files の項目でコミットするファイルを選択。
入力が終わったらCommitボタンを押す。
これでローカルリポジトリへコミットされる。
-
ローカルリポジトリへのコミットが終わったら、次はリモートリポジトリへプッシュする。
リモートリポジトリはGitHubサーバー側のリポジトリである。
プロジェクト名を右クリック、Team → Push Branch 'master' を選択する。
-
Remoto がGitHubであることを確かめてから Nextボタンを押す。
-
Finish ボタン、続いてOK ボタンを押してプッシュを完了する。
以上でローカルリポジトリからリモートリポジトリへプッシュされる。
-
GitHubのサイトにログインして 対象リポジトリを開き、プッシュが反映されていることを確認する。
チームに開発メンバーを追加(別ユーザーを追加)
2021年7月現在
手順が変わったようだ。以下のリンク先を参照すること。
GitHub Docs コラボレーターを個人リポジトリに招待する
2021年6月までの古い方法
他のユーザーと共同開発する場合、リポジトリに共同開発するユーザーを追加登録する必要がある。
大まかな手順としては、リポジトリ管理するユーザーが他ユーザーを追加し、他ユーザーはそのリポジトリに参加手続きをするという流れである。
詳細な手順は以下の通り。
手順
-
管理ユーザーはGitHubにログインし、対象のリポジトリを開く。
-
上部メニューからSetting → Collaboratorsと操作する。
-
他ユーザーのアカウントを入力して、Add collaborator ボタンを押すと、他ユーザーにメール送信が行われる。
以上で、管理ユーザー側の作業は終わり。
-
続いて、他ユーザー側の作業。
GitHubから届いたメールを開き、View invitationボタンを押す。
-
他ユーザーによるサインインを行う。
-
以上で、他ユーザーはリポジトリに参加可能になる。
このリポジトリをEclipseと連携させることももちろん可能である。(他ユーザー側による作業)
リモートリポジトリとローカルリポジトリの関係
作業内容を
ローカルリポジトリに反映する。
きりの良いところで、ローカルリポジトリから
リモートリポトリに反映する。
(
プッシュ)
リモートリポジトリを通して、他のユーザーの作業内容を自分のローカルリポジトリに反映することも可能。
(
プル)
バージョン管理システム
複数の人がソースコードを編集するときに管理するシステムである。
ソースコードの変更履歴確認や復元などができる。
管理するソースコードなどのファイル群はリポジトリと呼ばれる。
リモートリポジトリとは
共有サーバー(GitHubサーバー)に配置されているリポジトリ。
複数人で共有する共同管理場所である。
ローカルリポジトリとは
ローカルPC上に配置されるリポジトリ。
ひとりのユーザーだけが使う。
Eclipse側でリモートリポジトリの連携を解除
Git Perspective を開く。
Git Repositories ナビケーション → 対象プロジェクトをプルダウン → Remotes → 不要なリモートリポジトリ連携を右クリックして削除
ブランチとは
ブランチとはプロジェクトを複数に枝分かれさせてバージョン管理する機能である
複数人で機能別に開発するときや、開発ブランチ、本番ブランチなどソースコードを分けて管理するときに利用する。
基準となるブランチは
masterブランチである。
masterブランチとは
基準となる
ブランチをmasterブランチと呼ぶ。統合ブランチという呼び方もある。
GitHubではDefaultのブランチという扱いである。
GitHubでブランチをブランチを切る(ブランチ作成)
「Branch:master」をクリックして子画面を開き、ブランチ名を入力して作成ボタンを押すと新しいブランチが作成される。
また作成時に新ブランチに切り替わる。
GitHubでブランチを切り替える
左上にある Branche:○○ ボタンを押すと子画面が表示される。
この子画面に存在するブランチ一覧からブランチ切替ができる。
Eclipse側にもブランチを作成する
- あらかじめGithub側でブランチを作成しておく (参考:GitHubでブランチをブランチを切る)
- PHPエクスプローラのプロジェクト名を右クリック → Team → Switch To → New Branche...
- Create Branch画面が開く
-
Branche name でGithubで作成したブランチ名を入力し、Finishボタンを押す。
- 以上でブランチが作成できる。
Gitのコミット
Gitにおけるコミットとはリポジトリに修正ファイルを記録すること。
コミットすることにより、過去の修正情報を参照したり、過去の状態に戻したりすることが可能になる。
コミットには
リモートリポジトリのコミットと、
ローカルリポジトリへのコミットが存在する。
GitHubサイト上でファイル編集するとリモートリポジトリへのコミットとなる。
ローカルPC上(Eclipse)でコミットするとローカルリポジトリへのコミットとなる。
ローカルリポジトリへコミットしたあと、リモートリポジトリに反映するため
プッシュという作業が必要になる。
プルとは | pull
pullとは
リモートリポジトリから変更履歴を
ローカルリポジトリに取り込むことである。
pullを実行すると、リモートリポジトリに他のユーザーが変更を加えている場合、その変更箇所を取得し
(
フェッチ)、自分のローカルリポジトリに
マージされる。
Eclipseでpullを実行する
Eclipseと連携している場合、pullは 以下のように実行する。
プロジェクト名を右クリック → Team → pull
pullを実行するタイミング
他のユーザーがリモートリポジトリに変更を加えた可能性があるとき。
フェッチとは | feche
リモートリポジトリから変更箇所を取得する。
プルと似るが
マージまでは行わない。
リモートリポジトリの変更箇所を確認するときに利用する。
フェッチのあと手動でマージすることにより、プルと同様な操作になる。
Eclipseでフェッチを実行する
プロジェクト名を右クリック → Team → Fetch from Upstream
フェッチを活用するケース
変更箇所を目で一つ一つ確認しながら、慎重にマージしたいときに活用できる。
変更履歴のマージ
変更履歴のマージとは、他のユーザーが修正した内容を、自分の
ローカルリポジトリに自動で統合する機能である。
このマージは
フェッチ後に行う。
しかし、
競合が発生した場合、自動的に統合できない。
この場合、手動で
競合箇所を修正せねばならない。
Eclipseで変更履歴をマージする方法
フェッチの後に プロジェクト右クリック → Team → Merge
競合発生のタイミング
ローカルリポジトリ
で
コミット
したファイルが、同時期に別ユーザーにより変更されてしまった時に、競合発生の条件が整う。(別ユーザーが先に
コミット&
プッシュ)
競合発生が現れるタイミングは、フェッチ後、
リモートリポジトリとローカルリポジトリを
マージする時である。
プルや
プッシュのタイミングでも競合は発生する。内部でマージを行っているからである。
下記の競合発生手順は、フェッチ→マージの操作で競合を発生させている。
競合が起こる手順
-
ローカルリポジトリ側のファイルを修正してコミットする。
-
リモートリポジトリ側のファイルを修正してコミットする。(別ユーザーによる修正を想定)
-
ローカルリポジトリ側(Eclipse側)でフェッチを行う。
フェッチを行った時点では競合は起こらず。
-
続いてマージを行う。
-
マージ後のタイミングで競合が発生する。
プッシュとは | push
プッシュとは、
ローカルリポジトリを
リモートリポジトリ(GitHubサーバー)へ反映させることである。
プッシュまでの基本的な流れ
- ファイルを編集する
- 編集情報をローカルリポジトリにコミット
- ローカルリポジトリをリモートリポジトリへプッシュ
インデックスへ追加 | add
ローカル環境におけるGitのファイル保存領域には
ワークツリーとローカルリポジトリの他に、インデックスという領域がある。
インデックスはワークツリーとローカルリポジトリの中間に位置する領域である。
インデックスにはコミット予定のファイル情報を一時保管している。
コミットを実行するときインデックスのファイル情報をローカルリポジトリへ反映させる。
インデックスはステージという別の呼び方もある。
Eclipseで add 操作
Eclipseでは add index という操作を行う。
編集ファイルを右クリック → Team → Add to index
編集ファイルをインデックスにadd する手順
-
編集したり新規追加したファイルを右クリックする。
-
Team → Add to index と操作する。
以上で編集ファイルの情報がインデックスに追加される。
-
インデックスに追加すると、プロジェクト名に「*」アイコンが付く。
インデックスに追加したファイルには「+」アイコンが付く。
コミットしたりインデックスから解除したりすると、これらのアイコンは消える。
インデックスの省略
通常、Eclipseではファイルを編集したらCommitする、という流れであることが多い。
しかし、内部ではインデックスに編集ファイル情報を追加し、そこからCommitされている。
わざわざインデックスに手動で追加する必要はないではないかと思えるが、
利点もある。
インデックスへ add する利点
コミットすべき編集ファイルが多数存在する場合、直接Commitする方法だとコミットもれが出てくるかもしれない。
しかしaddは、1件ずつファイルをインデックスに貯めておいてから、切りの良いところで一気にコミットできる。
慎重にコミット作業を行う必要があるなら、add を使ったほうが良い。
また、他ユーザーが編集したファイルと
競合が起きたときにも add の操作を使う。
競合を手動で修正したら、必ずaddを経由してCommitしなければならない。
間違えてインデックスに追加してしまったら
EclipseのPHPエクスプローラー上で簡単にインデックス追加を解除できる。
間違えてインデックスへ追加してしまったファイルを右クリックし、Team → Remove from index と選択する。
ワークツリーとは
通常のファイル修正場所である。
Eclipseで言えばPHPエクスプローラが該当する。
HEADとは
HEADは最新コミットを指している。
リポジトリは作業毎にコミットが蓄積されていく。
それらのコミットにはハッシュ値が付加されている。
最新コミットのハッシュ値が
HEADと呼ばれている。
GitHubページ:最新コミットのハッシュ値がHEAD
ORIG_HEADとは
ORIG_HEADとは、前回、Resetを実施した時の、直前コミットを指す。
Resetで変更したが、やはり元に戻したいときにORIG_HEADを指定する。
FETCH_HEADとは
FETCH_HEADとは、最後にfetchしたときのコミットを指す。
他のユーザーが最後に修正した状態に戻したいときに指定する。
FETCH_HEAD自体はコミットのハッシュ値かと思われる。
Eclipseで ローカルリポジトリのコミット一覧を見る
操作手順
プロジェクト名を右クリック → Team → Show in History
リベースとは | rebase
2つのブランチを統合するときに使う。
2つのコミットを1つに統合する。
コミット履歴を整理したいときに利用できる。
マージとの違い
リベース | 2つのコミットのうち片方のコミットにもう片方のコミットを合成する。 |
マージ | 2つのコミットを統合する際、新たにコミットを作成し、こちらに統合する。 |
- ホーム
- プログラミングの覚書
- 情報技術
- GitとGitHubの覚書