Cisco DevNetでネットワークの最先端を学習していくシリーズ第4回

ネットワーク機器、操作・設定

第4回 ソースコードのファイル管理 「Git」 と 「Github」を触ってみる

Cisco DevNet を活用したネットワークの最先端とプログラミングを学習していきながらネットワークプログラマーを目指すシリーズ。第4回は、プラグラミングを開始する前に開発者にとって大切なファイルのバージョン管理システム 「Git」 をはじめて触る方に向けて基本的な使い方についての説明をします。

Git はバージョン管理システムとしてよくできていて使いこなすと非常に便利そうなシステムですが、使い慣れるまでは少し時間がかかりそうなのでこんなことができるのかとまずは確認しておければと思います。

今回はDevNetのLearning Labs にある以下のModuleを参考に進めます。

A Brief Introduction to Git (Japanese)

ソースコードファイルを管理する方法

作成したソースコードのファイルを管理する方法の1つとしてGitを使用します。

Gitを利用することでソースコードのバージョン管理や他の開発者との共有を手助けしてくれる仕組みを使って開発者は効率よく作業を進めることができるようになっています。

また、ここではソースコードを複数人の開発者で手を加える場合にはオンライン上で管理する Github を利用しています。

ここで説明している全体の流れとしては、以下のようになります。

①オンライン上で管理するファイルをローカルにダウンロード(複製)
②ダウンロードした内容と分離した同じ内容の作業領域を作成(ブランチの作成)
③ファイルを操作しバージョン管理ファイルとして設定する

ファイル管理の場所

アプリケーションの開発に関わるようなファイルが保管されている場所のことを、リポジトリ(repository)と呼びます。リポジトリとは日本語では貯蔵庫を意味します。

作成したバージョン管理対象のファイルをオンライン上で管理するサービスを使って他の開発者とリモートのサーバー上で共有できるようにして管理する「リモートリポジトリ」とローカルのPC上で管理する「ローカルリポジトリ」があります。

リポジトリの複製

チームで開発するような場合には、リモートリポジトリからローカルリポジトリへ一時的にリポジトリの複製を取得して必要なファイルをローカルで編集していきます。リポジトリの管理システムとしてここではGithubとGitを使用します。

GIt - Github リモートリポジトリとローカルリポジトリ

以下は、Github上にあるリモートリポジトリをローカルリポジトリとして複製する方法です。

Github上のリモートリポジトリをローカルPCへ複製する。

$ git clone [URL]

上記コマンドにリポジトリのあるURLを指定することで、Github上の指定のリポジトリがローカルの作業ディレクトリに複製されます。

マスターブランチとその他のブランチ

リポジトリ内で複数のブランチを作成して作業をおこなうことができます。基本となるマスターブランチと呼ばれるブランチとは別のブランチを作成しマスターブランチに影響を及ぼさないブランチ上で編集していきます。

他の開発者や追加機能ごとにブランチを作成し、必要なタイミングでマスターブランチ上のファイルに上書きする、という感じで使用します。

ブランチの作成

$ git branch [ブランチ名]

作成したブランチへの移動

$ git checkout [ブランチ名]

以下の方法では、ブランチを作成しつつそのまま作成したブランチに移動できます。

$ git checkout -b [ブランチ名]

ブランチの確認

$ git branch
master
* mycode

ブランチの一覧と現在自分がいるブランチ(左のアスタリスク*で表示)が確認できます。

これでローカル上に ブランチが作成され、ここでコミットする変更はこのローカル上のブランチに対してのみコミットされます。

コミット(Commit)とは、追加や変更をしたある時点のファイルのスナップショット。コミットするとリポジトリ内に保管され管理される。

Git上のファイル操作

Git 上では作業ディレクトリ(Working Directory)上でファイルを編集したりしますが、そこでファイルを保存してもコミットされるまではリポジトリには格納されません。

また、コミットの前にステージ(Stage)またはインデックス(Index)と呼ばれる場所へ一旦ファイルを追加しておく必要もあります。

ステージに置かれたファイルをコミットすることでHEADと呼ばれる場所へ保管されます。

Git で使われているファイル管理3層 HEAD - Stagge(Index) - Working Directory

ファイル変更内容の確認

change_me.txt に変更(I have changed. を追記)を加えて状態を確認します。
作成したブランチ(mycode)上で変更されているファイルが確認できます。

$ git status

$ git status
On branch mycode
Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git restore …” to discard changes in working directory)
modified: intro-python/git-basics/change_me.txt

no changes added to commit (use “git add” and/or “git commit -a”)

$ git diff

$ git diff
diff –git a/intro-python/git-basics/change_me.txt b/intro-python/git-basics/change_me.txt
index cd50f2b..cef74cc 100644
— a/intro-python/git-basics/change_me.txt
+++ b/intro-python/git-basics/change_me.txt
@@ -1 +1 @@
-If you change even one character in this file… Git will know.
+If you change even one character in this file… Git will know. I have changed.

変更された内容を確認できます。

変更を元に戻す

保存した変更を取り消して元の内容で上書き。

$ git checkout [ファイル名]

ローカル上に作成したブランチを削除する。
※本当に削除して問題ないか確認!

$ git branch –delete [ブランチ名]

ファイルをコミットする方法

ファイルをコミットするには、コードを作成した人の名前とメールアドレスをあらかじめ指定しておく必要がある。

$ git config –global user.name “開発者の名前”

$ git config –global user.email xxx@xxx.jp

変更をコミットする

$ git add [ファイル名]

$ git commit -m “コミットメッセージ” [ファイル名]

変更したファイルを一旦 git add でステージに保管してから git commit でコミットしています。

コミット時の -m は指定しなければ、vim のようなテキストエディタが起動するのでそこで入力しても構いません。

コミット履歴を確認

$ git log

使用したコマンド一覧

使用コマンド

クローンのダウンロード

$ git clone [URL]: オンライン上のGithubからリポジトリを複製。

ブランチの作成、確認

$ git branch [ブランチ名] : 新規ブランチを作成。
$ git checkout -b [ブランチ名] : 新規ブランチを作成して作成されたブランチへ移動する。
$ git branch : ブランチの一覧と自分が現在いるブランチを確認。

ファイルの状態を確認

$ git status : ブランチの現在のファイルのステータスを確認。
$ git diff : 変更されたファイルの内容を確認。

変更の取り消し、ブランチ削除

$ git checkout [ファイル名]:保存した変更を取り消して元の内容で上書き。
$ git branch –delete [ブランチ名] : ブランチの削除。

コミットするための操作、確認

$ git config –global user.name “開発者の名前”
$ git config –global user.email xxx@xxx.jp

$ git add [ファイル名]:ステージ(インデックス)へファイルを保管。
$ git commit -m “コミットメッセージ” [ファイル名]:メッセージとともにファイルをコミット。

$ git log : コミットした履歴を確認。

最後に

普段はファイルのバージョン管理に関してはあまり意識せずに独自のルールで行っている方も多いと思います。そんな方にとってはバージョン管理システムの概念や操作は最初とても面倒で使いずらいかも知れません。しかしバージョン管理は開発においてとても大切なことなので、慣れるまでは面倒かもしれませんが、少しずつ調べながら覚えていきましょう。

また、もっと詳しく知りたい方や使っていて疑問などが出てきたときの参考として、Git のドキュメントがオンラインで用意されています。日本語での詳しい解説などもあり、概念の理解や操作方法の参考として利用できます。

git Documentation
https://git-scm.com/doc/ext

参考リンク

Cisco DevNetでネットワークの最先端を学習していくシリーズ第1回

CCNA(Cisco Certified Network Associate) 新試験の概要


コメント