1. 作業開始: プロジェクトのクローン
前の講義でやった続きから始めましょう。あなたはGitHubに作成したリポジトリを持っていて、作業を始めるためにそのローカルコピーを自分のマシンに取得する必要があります。このプロセスをクローンと言います。
ステップ 1. IDEを起動してください。もし何かプロジェクトが開いているなら、File -> Close Projectで閉じます。スタート画面でClone RepositoryかGet from VCSを選んでください。
ステップ 2. 開いたウィンドウにリポジトリのURLを貼り付けます。誰かのリポジトリをクローンする場合に便利です。URLはGitHubのリポジトリページからコピーできます。
自分のリポジトリをクローンする場合(今回のケース)は、IDEから直接GitHubにログインすると楽です。Log in to GitHubオプションを選んでください。IDEが認証のためにブラウザを開きます。
表示されるページで緑色のボタンAuthorize JetBrainsをクリックしてください。そのあとIDEからリポジトリ一覧を選べるようになります。目的のプロジェクトを選んでCloneを押します。
ステップ 3. IDEがこのプロジェクトを信頼するか尋ねます。自分のリポジトリならTrust Projectを押してください。
ステップ 4. ウイルス対策の設定(Windowsユーザー向け)
Windowsのウイルス対策ソフトがIDEの動作を不審に思うことがあります。プログラムを作成・実行するためにIDEが必要な操作を行えるように、IDEを制限なく動かせるようにする必要があります。Automaticallyボタンを押して、IDEに必要なフォルダを例外に追加させてください。
2. 変更の保存: Commit
commit はプロジェクトの「スナップショット」、つまり特定の時点で保存された状態です。ゲームのセーブポイントのように考えてください。問題が起きたらいつでもそこに戻れます。各コミットには一意のIDと変更内容を説明するメッセージがあります。
gitGraph
commit id: "Initial commit"
commit id: "Add user authentication"
commit id: "Fix login button bug"
commit id: "Refactor database connection"
プロジェクトのコミット履歴。新しいコミットは前のものを基にして作られ、プロジェクトの時系列を作ります。
ステップ 1. 変更を加える。
新しく作られたリポジトリをクローンしたばかりなら、通常はREADME.mdだけが入っています。
README.mdを開いてプロジェクトの説明を追加してみてください。ファイルを編集し始めると、IDEのプロジェクトパネルでそのファイル名が青色で表示されます。これはファイルが変更されたけれどまだGitに保存されていないことを意味します。IDEは変更した箇所に緑色のラインを付けます。
ステップ 2. Commitウィンドウを開く。
IDEの左側にあるCommitタブを開くと、保存準備ができている変更が全部見えます。初回のコミットではこのウィンドウをよく確認してください。
ここで見えるものを説明します:
- Changes: 既にGitで追跡されているファイルで変更があったもの。今回だとプロジェクトの計画を追加した
README.mdが該当します。 - Unversioned Files: プロジェクトフォルダ内にある新しいファイルで、まだGitが追跡していないもの。
ここで疑問が出るかもしれません: これらのサービスファイルを全部リポジトリに入れるべきでしょうか?
良いニュースは、GitHubでリポジトリを作るときにテンプレートとして.gitignoreを選んでいれば、そのファイルに不要なフォルダやファイルを無視するルールが既に含まれている場合があることです。これは後で詳しく説明します。
今はとにかく最初のコミットとして、プロジェクトの主要ファイルを履歴に追加して、コミットメッセージを書きましょう。
ステップ 3. コミットを実行する。
Commitボタンを押してください。完了です!ローカルリポジトリにプロジェクトのスナップショットを保存しました。ファイルの色は元に戻ります。
3. GitHubへの送信: Push
あなたのコミットは今のところローカルマシンだけにあります。チームと共有したり、安全な場所にバックアップするには、それらをリモートリポジトリ(GitHub)に送る必要があります。
sequenceDiagram
participant ローカルリポジトリ(あなたのコンピュータ)
participant リモートリポジトリ(GitHub)
note over ローカルリポジトリ(あなたのコンピュータ): あなたは1つか複数のコミットを作った。
それらはここにだけ存在する。
ローカルリポジトリ(あなたのコンピュータ) ->> リモートリポジトリ(GitHub): git push (コミットを送る)
note over リモートリポジトリ(GitHub): あなたのコミットがコピーされ、
サーバー上に安全に保存される。
ステップ 1. Pushボタンを押す。
IDEの右上にある緑色の上向き矢印がPushボタンです。押して下さい。
ステップ 2. 確認して承認する。
送信準備ができているすべてのコミットが見えるウィンドウが開きます。これが送る内容を最終確認するチャンスです。Pushを押してください。
成功すれば次のようなメッセージが表示されます: Pushed commits to origin/main. Create pull request
ステップ 3. GitHubで結果を確認する。
送信が成功したらGitHubの自分のリポジトリページを開いて、変更が反映されていることを確認してください。
4. Gitのコントロールパネル
IDEにはGitという専用メニューが上部にあります。ここがバージョン管理の中心です。主要な項目をさっと見ていきましょう。
Commit: 先に説明した変更を保存するウィンドウを開きます。Push: コミットをGitHubへ送るウィンドウを開きます。Update Project: とても重要な機能です。他のチームメンバーの最新の変更をダウンロードします(git pullを実行します)。毎朝作業を始める前に押しましょう!Branches: ブランチ管理ウィンドウを開きます。これは次の講義で詳しく扱います。Show Git Log: プロジェクトの全コミット履歴を表示します。あなた専用のタイムマシンです。
5. .gitignore ファイルの使い方
プロジェクトにサービスファイルを追加してしまい、それをリポジトリに誤って入れたくない場合、それらを除外リストに追加できます。これを行うのが .gitignore ファイルです。テンポラリファイル、ログ、パスワードなど、バージョン管理に入れるべきでないファイルがあるときに便利です。
ステップ 1. まず、プロジェクト内で無視したいファイルを作成します。例: notes.txt。ファイルを作ったら、IDEがGitに追加するか尋ねたらCancelを押します。
ステップ 2. Projectウィンドウで作成したファイルを右クリックします。Git --> Add to .gitignore --> Add to .gitignore を選んでください。このオプションは、選んだファイル名をプロジェクトルートの.gitignoreに追加します。
まだ.gitignoreがない場合、IDEが作成を提案します。承諾してください。
ステップ 3. IDEが自動でファイル名を.gitignoreに追加します。
.gitignore に追加されると、無視されるファイルは灰色または茶色で表示されます。コミットしようとしてもこれらのファイルは無視されます。.ideaフォルダは無視リストに入れて構いません。
.gitignore 自体はリポジトリにコミットして、GitHubに送るのを忘れないでください。そうすればプロジェクトの全員が同じ無視ルールを使えます。
ローカル専用の除外: .git/info/exclude
.gitignore はプロジェクト全員に適用される除外ルール用ですが、Gitにはローカル専用の無視ルールを作れるファイル .git/info/exclude もあります。これはコミットされず、あなたのローカルコピーだけに適用されます。
IDEが作るような、あなた個人にだけ関係するファイルを無視したいときに便利です。
重要! ローカルの除外ルールはあなたのローカルコピーにだけ効きます。
もし既にコミットしてしまったら?
.gitignore はまだ追跡されていない新しいファイルだけを無視します。もし既にファイルをコミットしていたら、そのファイルはリポジトリ履歴の中にあり、.gitignore に追加してもGitは引き続き追跡します。そういう場合はターミナルで次のコマンドを使います: git rm --cached <file>。この件は別途詳しく学んでください。
.gitignore のルール
.gitignore ファイルには、Gitが無視すべきファイルやフォルダ名のパターンを記述します。
空行は無視されます。コメントを追加するには行の先頭に#を付けます。
パターン:
*— 任意の数の任意の文字にマッチします。例えば*.logは拡張子が.logのすべてのファイルを無視します。/— パターンの末尾に付けるとディレクトリを意味します。例えばlogs/はlogsフォルダの中身をすべて無視します。!— 行頭に付けるとルールを反転します。例えば*.logがあってもimportant.logは追跡したいなら!important.logを追加します。**— 任意の深さのネストされたフォルダにマッチします。例:**/tempはどの階層にあってもtempフォルダを無視します。
.gitignore の例
# コンパイル済みのコード
/bin/
/obj/
# 一時ファイル
*.tmp
*.swp
# ログ
*.log
# IDEが作るフォルダ
.idea/
*.user
*.suo
# 仮想環境と依存関係
/venv/
/node_modules/
既製のテンプレート
これらのファイルをゼロから書く必要はありません。コミュニティで検証されたテンプレートがあります:
- さまざまな言語やフレームワーク向けの
.gitignoreコレクション(GitHub公式): https://github.com/github/gitignore. - gitignore.io — あなたの使っている技術に合わせた
.gitignoreを生成してくれる便利なウェブサービス。
GO TO FULL VERSION