目的

この宇宙をテーマにしたチュートリアルで Git の基本を学習します。 

ミッションの概要

あなたのミッションは、チュートリアルを完了し、チームの宇宙ステーションをすべて追跡することで、Git のロープを学習することです。このチュートリアルで説明するコマンド

  • git clone、git config、git add, git status、git commit、git push、git pull、git branch、git checkout、および git merge
所要時間 対象者 前提条件
30 分 Git リポジトリと Bitbucket Cloud を初めて使用する場合 Git をインストール済である
    Bitbucket アカウントを持っている

Git リポジトリを作成する

新しい Bitbucket 宇宙ステーションの管理者として、整理を行う必要があります。宇宙ステーション用にファイルを作成する時は、それらを 1 箇所に保存してチームメートが宇宙のどこにいても共有できるようにします。Bitbucket では、これはリポジトリにすべてを追加するということを意味します。1 つ作成してみましょう。

  • リポジトリの醍醐味

    • 作業中のファイルが1つか、複数かに関係なく、ローカルリポジトリですべてのファイルにアクセスできます。
    • Bitbucket アカウントがなくてもパブリックリポジトリの URL を知っていれば表示できます。
    • 各リポジトリは、ユーザーアカウントまたはチームに帰属します。ユーザーアカウントの場合、そのユーザーはリポジトリを所有しています。一方、チームの場合、リポジトリはそのチームの所有になります。
    • リポジトリ所有者はリポジトリを削除できる唯一のユーザーです。リポジトリがチームに帰属する場合、管理者がリポジトリを削除できます。
    • コードプロジェクトは、複数のアカウントが関係する複数のリポジトリで構成されますが、単一アカウントの単一リポジトリでも可能です。
    • 各リポジトリのサイズは 2 GB に制限されていますが、1 GB を超えないように利用することをお勧めします。

ステップ 1. リポジトリの作成

最初に、Bitbucket で作成するリポジトリにはコードは入っておらず空の状態です。これからいくつかのファイルを追加していくので空で問題ありません。Bitbucket リポジトリはご使用のファイルの中央リポジトリになり、権限を与えられたユーザーはそのリポジトリにアクセスできます。 リポジトリの作成後、ローカルシステムにバージョンをコピーします。このようにして、1つのリポジトリから別のリポジトリへ変更を転送することでリポジトリを更新できます。

中央リポジトリからローカルリポジトリへ

以下に従ってリポジトリを作成します。

  1. Bitbucket から、ページの一番上にある リポジトリ > リポジトリの作成 ボタンをクリックします。

    リポジトリメニューの作成

    新しいリポジトリの作成ページが表示されます。少し時間をかけ、ダイアログの内容を確認します。リポジトリタイプを除き、このページに入力した内容はすべて後から変更できます。

    リポジトリの作成

  2. BitbucketStationLocations」を 名前 フィールドに入力します。Bitbucket はリポジトリの URL にこの 名前 を使用します。例えば、ユーザー the_bestawesome_repo というリポジトリを持っている場合、そのリポジトリの URL は https://bitbucket.org/the_best/awesome_repo になります。

  3. アクセスレベルでは、[これは非公開リポジトリです] ボックスを選択したままにします。非公開リポジトリは、自分と、アクセス権を与えられたメンバーのみが見ることができます。このボックスをオフにした場合、誰でもこのリポジトリを見ることができます。

  4. リポジトリタイプGit を選択します。リポジトリの作成 をクリックした後でリポジトリタイプを変更することはできません。

  5. リポジトリの作成 をクリックします。Bitbucket によってリポジトリが作成され、概要 ページが表示されます。

ステップ 2. リポジトリの探索

少しの間、作成したばかりのリポジトリを探索します。今あなたはリポジトリの 概要 ページにいるはずです。

リポジトリの概要

それぞれの背後に何があるかを確認するには、ナビゲーション メニューの項目をクリックします。利用可能なショートカットを表示してこれらのアイテムをナビゲートするには、キーボードで ? キーを押します。

メニューバーで コミット オプションをクリックすると、リポジトリにコンテンツを作成していないため、コミットがないことがわかります。リポジトリは非公開になっており、誰もリポジトリに招待していません。そのため、この時点でリポジトリのコンテンツを作成または所有できるのは、リポジトリの所有者であるあなただけです。

Git リポジトリをコピーしてファイルを追加する

これで、宇宙ステーションファイルを追加および共有する場所ができました。次に、ローカルシステムからそれらを取得する方法が必要です。これを設定するには、Bitbucket リポジトリを自分のシステムにコピーします。Git では、はリポジトリのコピーを「クローン」と呼びます。リポジトリをクローンする際、Bitbucket サーバー (Git が原点として認識しているサーバー) とローカルシステムの間で接続を確立します。

原点からローカル

あなたは、端末から多数の Git および非 Git コマンドを使用しようとしています。コマンドラインを使用したことがない場合は、コマンドラインクラッシュコースでどこに見つければよいかを学習します。

ステップ 1. ローカルシステム上でリポジトリをクローンする

デスクトップでブラウザーと端末ウィンドウを開きます。端末ウィンドウを開いた後、次の手順を実行します。

  1. ホーム (〜) ディレクトリに移動します。

    $ cd ~

    Bitbucket を使用すればするほど、おそらく複数のリポジトリで作業することになります。そのため、すべてのリポジトリを含むディレクトリを作成すると便利です。

  2. 自分のリポジトリを含むディレクトリを作成します。

    $ mkdir repos
  3. 端末から、新しいリポジトリディレクトリで作業したいディレクトリを更新します。

    $ cd ~/repos
  4. Bitbucket から、BitbucketStationLocations リポジトリに移動します。

  5. クローンをクリックします。

    ポップアップクローンダイアログが表示されます。既定では、クローンダイアログはご使用の設定に応じて、 HTTPS または SSH に対してプロトコルを設定します。このチュートリアルの目的のため、既定のプロトコルを変更しなようにしてください。

     

    クローンダイアログ

     

  6. 強調表示されたクローンコマンドをコピーします。

  7. 端末ウィンドウで、Bitbucket からコピーしたコマンドを貼り付け、戻るを押します。

  8. 端末から要求されたら、Bitbucket パスワードを入力します。Google にリンクしてアカウントを作成する場合、そのアカウントのパスワードを使用します。

    • Windows パスワードエラーが発生した場合:

      • Microsoft Windows オペレーティングシステムの一部のバージョンと Git の組み合わせでは、次のようなエラーが発生する場合があります。

        Windows クローンパスワードエラーの例

         $ git clone https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git Cloning into 'bitbucketspacestation'... fatal: could not read Password for 'https://emmap1@bitbucket.org': No such file or directory
      • このエラーが表示されたら、コマンドラインに以下を入力します。

         $ git config --global core.askpass
      • 次に、ステップ 4 に戻って複製プロセスを繰り返します。このとき、bash エージェントによってパスワードが要求されます。この操作は 1 度のみ実行する必要があります。

      この時点で、ご使用の端末画面には以下のような内容が表示されます。

       
      $ cd ~/repos
      $ git clone https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git Cloning into 'bitbucketstationlocations'... Password warning: You appear to have cloned an empty repository.

      ご使用のリポジトリは空でしたね?まだソースファイルを追加していなかったことを思い出してください。

  9. リポジトリディレクトリのコンテンツをリストすると、bitbucketstationlocations ディレクトリが表示されます。

    $ ls

おめでとうございます。これで、ローカルシステム上でリポジトリをクローンしました。

ステップ 2. ファイルをローカルリポジトリに追加して、Bitbucket に配置します。

ローカルシステムのリポジトリで、作業を始めましょう。全宇宙ステーションの場所の追跡を開始しましょう。これを行うには、すべての場所についてファイルを作成します。

  1. 端末画面で、ローカルリポジトリのトップレベルに移動します。

    $ cd ~/repos/bitbucketstationlocations/
  2. 次の行を端末ウィンドウに入力して、新しいファイルとコンテンツを作成します。

    $ echo "Earth's Moon" >> locations.txt

    コマンドラインから何も返されない場合は、ファイルが正しく作成されています。

  3. ローカルリポジトリのステータスを取得します。git status コマンドは、Bitbucket リポジトリと比較して、プロジェクトの進行状況を伝えます。

    この時点で、Git は新しいファイルが作成されたことを認識し、次のような内容が表示されます。

    $ git status On branch master Initial commit Untracked files: (use "git add <file>..." to include in what will be committed) locations.txtnothing added to commit but untracked files present (use "git add" to track)

    ファイルは追跡されません。つまり、Git は以前のコミットの一部でないファイルを確認します。ステータス出力にも次のステップ(ファイルの追加)が表示されます。

  4. Git に対し、新しい locations.txt ファイルを、git add コマンドを使用して追跡するよう伝えます。ファイルを作成したときのように、正しく入力されていれば git add コマンドは何も返しません。

    $ git add locations.txt

    git add コマンドは変更を作業ディレクトリから Git ステージングエリアに移動します。ステージングエリアでは、公式履歴にコミットする前に変更のセットのスナップショットを準備します。

     

    Git はステージングを追加する

     

  5. このフィルのステータスを確認します。

    $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached <file>..." to unstage) new file: locations.txt

    これで、新しいファイルが追加され (ステージング)、準備が整ったらコミットできます。git status コマンドには、ディレクトリとステージングされたスナップショットの状態が表示されます。

  6. 次の行のように、コミットメッセージ付きで git commit コマンドを発行します。-m は、コミットメッセージが続くことを示します。

    $ git commit -m 'Initial commit' [master (root-commit) fedc3d3] Initial commit 1 file changed, 1 insertion(+) create mode 100644 locations.txt

    git commit はステージされたスナップショットを取得し、プロジェクト履歴にコミットします。git add と組み合わせ、このプロセスはすべての Git ユーザーに基本的なワークフローを定義します。

     

    git commit

     

    ここまでで、作成したものはローカルシステムにあり、変更をプッシュするまで、Bitbucket リポジトリには反映されません。

    • Git とリモートリポジトリの詳細を学習しましょう。

      • リモートリポジトリと通信する Git の機能 (この場合、Bitbucket がリモートリポジトリです) は、あらゆる Git ベースのコラボレーションワークフローの基盤です。

      • Git のコラボレーションモデルでは、各開発者にリポジトリのコピーがあり、ローカルの履歴やブランチ構造を完全な形で保有しています。開発者は、他の開発者と個々の変更を共有する必要はなく、通常は一連のコミットをまとめて共有します。Git では作業コピー内の個々の変更項目を中央リポジトリにコミットするのではなく、ブランチ全体をリポジトリ間で共有します。

         

        Git ブランチング

         

      • 他のリポジトリとの接続を管理し、他のリポジトリにブランチを "プッシュ" することによってローカルの履歴を公開します。ブランチをローカルリポジトリに "プル" することによって他の開発者の進捗状況を確認することができます。

  7. ローカル端末ウィンドウに戻り、git push origin master を使用してコミットした変更を Bitbucket に送信します。このコマンドは、原点上 (Bitbucket サーバー上) で master ブランチ (Bitbucket 上のブランチ) へプッシュすることを指定します。

    次のような応答が表示されます。

    $ git push origin master Counting objects: 3, done.Writing objects: 100% (3/3), 253 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0) To https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.git* [new branch] master -> master Branch master set up to track remote branch master from origin.

    コミットは今、リモートリポジトリ (起点) にあります。

     

    Git のプッシュ

     

  8. Bitbucket の BitbucketStationLocations リポジトリへ移動して、メニューバーで コミット アイテムをクリックします。

  9. リポジトリに 1 つのコミットが表示されます。Bitbucket はそのコミットに対して行ったすべての操作を組み合わせて表示します。作成者 列には、Git グローバルファイル ( ~/.gitconfig) の構成時に使用した値が表示されます。

    Bitbucket コミット

  10. ソースオプションをクリックします。

    リポジトリに 1 つのソースファイル(先程追加した locations.txt)があると表示されます。

    Bitbucket ソース

最初に作成した際、リポジトリはどのように見えていたかを覚えていますか?おそらく今とは少し異なっていたでしょう。

Bitbucket クラウドで Git リポジトリから変更をプルする

次に、宇宙ステーション管理者アクティビティのリストでは、場所に関する詳細情報を含むファイルが必要です。今は多くの場所がないため、Bitbucket から直接す追加します。

ステップ 1. Bitbucket でのファイルの作成

新しい場所のファイルを追加する手順

  1. BitbucketStationLocations リポジトリから、ソースをクリックしてソースディレクトリを開きます。ディレクトリには、locations.txt という 1 つのファイルがあります。

    Bitbucket ソースウィンドウ

  2. ソース ページから、右上隅で 新規ファイル をクリックします。このボタンは 1 つ以上のファイルをリポジトリに追加した後にのみ表示されます。

    次の画像のように、新しいファイルを作成するページが開きます。

    Bitbucket の新しいファイル

  3. stationlocationsファイル名 フィールドに入力します。

  4. 構文モード リストから HTML を選択します。

  5. 次の HTML コードをテキストボックスに追加します。

    <p>Bitbucket has the following space stations:</p> <p> <b>Earth's Moon</b><br> Headquarters </p>
  6. コミット をクリックします。次のメッセージと共に コミットメッセージ フィールドが表示されます: stationlocations created online with Bitbucke

  7. メッセージフィールドの下にある コミット をクリックします。

これで、Bitbucket に新しいファイルができました。コミットの詳細ページへ移動し、そこで行った変更を確認できます。

Bitbucket のコミットメッセージ

これまでのコミットのリストを見たい場合は、左側の コミット リンクをクリックします。これまでに

ステップ 2. リモートリポジトリから変更をプル

次に、その新しいファイルをローカルリポジトリに取り込む必要があります。プロセスは非常に単純です。基本的には、Bitbucket へ locations.txtファイルを取り込んだ際に使用したプッシュを逆に実行するだけです。

ファイルをローカルのリポジトリにプルするには、次の手順を実行します。

  1. 端末画面を開き、ローカルリポジトリのトップレベルに移動します。

    $ cd ~/repos/bitbucketstationlocations/
  2. git pull --all コマンドを入力し、Bitbucket からのすべての変更をプルします。(より複雑なブランチングワークフローでは、すべての変更のプルやパージが適さない場合があります。)要求されたら Bitbucket パスワードを入力します。端末は次のようになります。

    $ git pull --all Fetching origin remote: Counting objects: 3, done.remote: Compressing objects: 100% (3/3), done.remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done.From https://bitbucket.org/emmap1/bitbucketstationlocations fe5a280..fcbeeb0 master -> origin/master Updating fe5a280..fcbeeb0 Fast-forward stationlocations | 5 ++++++++++++++ 1 file changed, 5 insertions(+) create mode 100644 stationlocations

    git pull コマンドは、1 つのコマンドで、リモートリポジトリ (Bitbucket) のファイルをローカルリポジトリへファイルをマージします。

    原点からローカル

  3. ローカルシステムのリポジトリフォルダーに移動すると、追加したファイルが表示されます。

よくできました!宇宙ステーションの位置に関する 2 つのファイルを追加することで、Bitbucket とローカル・システムの間で基本的な Git のワークフロー (クローン、追加、コミット、プッシュ、プル) を実行してきました。

Git ブランチを使用してファイルをマージする

宇宙ステーション管理者に伴う責任場合によっては、情報が漏れないようにロックダウンしておく必要があります。特に、太陽系に新しい場所をマッピングするときは必要です。ブランチについて学習することで、ファイルの更新と、準備が完了したときにのみ情報を共有することができるようになります。

ブランチは、チームで作業しているときに最も力を発揮します。自分自身のブランチからプロジェクトの担当箇所に取り組み、Bitbucket から更新をプルし、その後、準備が整ったらメインブランチへ自分の作業すべてをマージすることができます。ドキュメントには、ブランチを使用する理由に関するより詳細な説明が含まれています。

ブランチとは、ご使用のリポジトリの独立した開発ラインを意味します。まったく新しい作業ディレクトリやステージングエリア、プロジェクト履歴として、ブランチをとらえることもできます。新しいブランチを作成する前に、自動的にメインブランチ (マスターと呼びます) で作業に取り掛かることになります。次の図は、マスターブランチとその他のバグ修正更新のブランチを視覚的にわかるように示したものです。

Git ブランチング

ステップ 1: ブランチの作成と変更

まだコミットする準備が完了していない宇宙ステーションの今後の計画を追加できる場所にブランチを作成します。これらの計画を公開する準備ができたら、Bitbucket リポジトリに変更をマージし、その後で不要になったブランチを削除することができます。

ブランチが単なるコミットへのポインターであることを理解する必要があります。ブランチを作成したとしても、Git が行うのは新しいポインターの生成であり、ファイルやフォルダーの新しいセットを作成するのではありません。従って、開始する前、リポジトリは次のようになります。

マスターブランチ

ブランチを作成するには、次の手順を実行します。

  1. 端末ウィンドウで、次のコマンドを使用してローカルリポジトリのトップレベルに移動します。

    $ cd ~/repos/bitbucketstationlocations/
  2. 端末ウィンドウでブランチを作成します。

    $ git branch future-plans

    このコマンドはブランチを作成しますが、そのブランチに移動はしません。したがって、リポジトリは次のようになります。

    ブランチの作成

    ここではリポジトリの履歴には何の変更も加えられません。新たに作られるのは現在のブランチに対する新しいポインターのみです。新しブランチで作業を開始するには、使用するブランチをチェックアウトする必要があります。

  3. 作成したばかりの新しいブランチをチェックアウトして使用を開始します。

    $ git checkout future-plans Switched to branch 'future-plans'

    git checkout コマンドは、git ブランチと連携して機能します。何か新しい作業で機能するブランチを作成するため、新しいブランチを作成するたびに (git branch を使用) 、チェックアウト (git checkout を使用) するようにしてください。これで新しいブランチをチェックアウトしました。Git ワークフローは次のようになります。

    フィーチャーブランチ

  4. ローカルシステムで bitbucketstationlocations フォルダーを検索し、開きます。新しいブランチの結果、ディレクトリ内に追加のファイルやフォルダーがないことに注目してください。

  5. テキストエディタを使用して stationlocations ファイルを開きます。

  6. 他のステーションの位置を追加して、ファイルに変更を加えます。

    <p>Bitbucket has the following space stations:</p> <p> <b>Earth's Moon</b><br> Headquarters </p> <p> <b>Mars</b><br> Recreation Department </p>
  7. ファイルを保存して閉じます。

  8. 端末ウィンドウに git status と入力します。表示は次のようになります。

    $ git status On branch future-plans Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: stationlocations no changes added to commit (use "git add" and/or "git commit -a")

    On branch future-plans 行に注目してください。以前に git status を入力した場合、この行は branch master 上にあります。これは、master branch が 1 つしかないためです。変更をステージングまたはコミットする前に、この行を見て、変更を追加したいブランチがチェックアウトされていることを確認してください。

  9. ファイルを準備します。

    $ git add stationlocations
  10. 次の図のように、端末ウィンドウで git commit コマンドを入力します。

    $ git commit stationlocations -m 'making a change in a branch' [future-plans e3b7732] making a change in a branch 1 file changed, 4 insertions(+)

    最近のコミットでは、リポジトリは次のようになります。

     

    フィーチャーブランチのコミット

     

    次に、master ブランチで行った変更をマージします。

ステップ 2. ブランチのマージ: 早送りマージ

宇宙ステーションは大きくなっており、火星の拠点の開会式の時間です。将来の計画が現実となりつつあるため、future-plans ブランチを、ローカルシステムのメインブランチにマージできます。

1つのブランチのみ作成し、1つの変更を行ったので、ブランチを早送りする方法を使用してマージします。早送りマージ は 現在のブランチの先端からターゲットブランチに向かって 1 本の直線的なパスのみが通っている場合に適用されます。この場合は、"実際に" ブランチがマージされるわけではなく、単に現在のブランチの先端をターゲットブランチ の先端に移動させることによって (即ち「早送り」によって) 履歴の統合が行われます。これによって実質的に履歴の結合が行われ、ターゲットブランチからアクセス可能であったコミットがすべて現在のブランチからアクセスで きるようになります。

早送りマージ

このブランチワークフローは、一時的なトピックブランチで変更も小規模な場合に一般的ですが、長期的なフィーチャーでは一般的とはいえません。

早送りマージを完了する手順

  1. 端末画面で、ローカルリポジトリのトップレベルに移動します。

    $ cd ~/repos/bitbucketstationlocations/
  2. あなたはすべての変更をコミットし、どのブランチをチェックアウトしたかを確認するため、git status コマンドを入力します。

    $ git status On branch future-plans nothing to commit, working directory clean
  3. master ブランチに切り替えます。

    $ git checkout master Switched to branch 'master' Your branch is up-to-date with 'origin/master'.
  4. future-plans ブランチの変更を master ブランチにマージします。次のようになります。

    $ git merge future-plans Updating fcbeeb0..e3b7732 Fast-forward stationlocations | 4 ++++ 1 file changed, 4 insertions(+)

    基本的に、master ブランチのポインタを現在のヘッドへ動かし、リポジトリは上記の早送りマージのようになります。

  5. future-plans は今後使用する予定はないため、ブランチを削除できます。

    $ git branch -d future-plans Deleted branch future-plans (was e3b7732).

    future-plans を削除すると、引き続きコマンド id を使用して master からブランチにアクセスできます。たとえば、future-plans から追加した変更を元に戻したい場合、受け取った commit id を使用してブランチに戻ります。

  6. git status と入力してマージの結果を確認します。ローカルリポジトリがリモートリ つ進んでいることを示次のようになります。

    $ git status On branch master Your branch is ahead of 'origin/master' by 1 commit.(use "git push" to publish your local commits) nothing to commit, working directory clean

ここまで学習したことは次のとおりです。

  • ブランチを作成してチェックアウトしました。
  • 新しいブランチで変更を行いました。
  • 変更を新しいブランチにコミットしました。
  • その変更をメインブランチに統合しました。
  • 不要になったブランチを削除しました。

次に、このすべての作業を Bitbucket (リモートリポジトリ) に戻す必要があります。

ステップ 3. 変更を Bitbucket へプッシュ

あなたは、他の人が新しいスペースステーションの場所を見ることができるようにしたいと思っています。そのためには、ローカルリポジトリの現在の状態を Bitbucket にプッシュできます。

この図は、中央リポジトリにはない変更がローカルリポジトリにあり、これらの変更を Bitbucket にプッシュするときに何が起こるかを示しています。

ブランチをプッシュする前に/プッシュした後で

変更をリモートリポジトリへプッシュする方法は次のとおりです。

  1. 端末ウィンドウのリポジトリ ディレクトリから、git push origin master を入力して変更をプッシュします。次のような結果が返されます。

    $ git push origin master Counting objects: 3, done.Delta compression using up to 8 threads.Compressing objects: 100% (3/3), done.Writing objects: 100% (3/3), 401 bytes | 0 bytes/s, done.Total 3 (delta 0), reused 0 (delta 0) To https://emmap1@bitbucket.org/emmap1/bitbucketstationlocations.gitfcbeeb0..e3b7732 master -> master
  2. Bitbucket の 概要 ページをクリックすると、最近のアクティビティ ストリームにプッシュが表示されているのがわかります。

  3. コミット をクリックすると、ローカルシステムで行ったコミットが表示されます。変更は、ローカルシステム上にあるため、同じコミット ID を保持します。

    アクティビティのコミット

    また、コミットリストの左の行には、直接のパスがあり、ブランチは表示されません。これは、future-plans ブランチがリモートリポジトリで操作されたことがなく、私たちが作成し、コミットした変更のみがあるためです。

  4. ブランチをクリックして、ページにブランチのレコードがないことに気付きます。

  5. ソースをクリックし、stationlocations ファイルをクリックします。ファイルへの最後の変更は、プッシュしたばかりのコミット ID が付いています。

  6. ファイル履歴リストをクリックして、このファイルにコミットされた変更を表示します。次の図と類似した内容が表示されます。

    ファイル履歴

完了しました!

学習したすべての Git コマンドを記憶できるか自信がない場合も、問題ありません。必要なときに参照できるよう、基本的な Git コマンドページをブックマークしてください。