
Git とは?
Git は分散型のオープンソース版管理システムです。開発者やデータサイエンティストがコードを追跡し、変更をマージし、過去のバージョンに戻すことを可能にします - AWS。リモートサーバーと変更を同期できます。柔軟性と普及により、ほぼすべての開発環境、コマンドラインツール、OSをサポートする業界標準となっています。
Git はどのように動作しますか?
Gitはファイルとその開発履歴をローカルリポジトリに保存します。変更を保存するたびに、Gitはコミットを作成します。コミットは現在のファイルのスナップショットです。これらのコミットは互いに連結され、下図のような開発履歴グラフを形成します。これにより、以前のコミットに戻ったり、変更を比較したり、開発プロジェクトの進捗を確認したりできます - Azure DevOps。コミットはユニークなハッシュで識別され、これを用いて変更の比較や取り消しを行います。

開発履歴のグラフ
ブランチ
ブランチは、メインのバージョンと並行して動作するソースコードのコピーです。加えた変更を保存するには、ブランチをメイン版にマージします。この機能により、コンフリクトのないチーム作業が促進されます。各開発者には担当タスクがあり、ブランチを使うことで他のメンバーに干渉されることなく新機能に取り組めます。タスクが完了したら、新機能をメイン版(masterブランチ)にマージできます。ブランチのクローン方法を学びたい場合は、Git Clone Branch のチュートリアルをご覧ください。

新機能をリポジトリに追加
コミット
Gitのファイルには、modified、staged、commitの3つの状態があります。ファイルを変更すると、その変更はローカルディレクトリに保存されますが、まだGitの開発履歴には含まれません。コミットを作成するには、まず変更されたファイルをステージする必要があります。ステージングエリアでは変更の追加・削除ができ、その後、変更内容を説明するメッセージを付けてコミットとしてまとめます。

Git におけるファイルの3つの状態
Git の利点は?
- 変更の追跡: 開発者が過去の変更を確認できます。開発履歴により、バグの特定と修正が容易になります。
- IDE との統合: 普及しているため、VSCodeやJupyterLabなど、あらゆる開発環境でGit統合が利用できます。
- チームコラボレーション: チームは進捗を把握でき、ブランチを使えば各自が個別にタスクに取り組み、メイン版に変更をマージできます。プルリクエスト、マージコンフリクトの解消、コードレビューがチームコラボレーションを促進します。
- 分散型VCS: 分散システムでは集中型のファイル保管はありません。同一プロジェクトに複数のバックアップがあります。このアプローチにより、開発者はオフラインでも作業し、コミットできます。
データサイエンスプロジェクトにおける Git
Gitはスクリプト、指標、データ、モデルのバージョン管理を提供します。Gitの拡張 git-lfs を使うと、大規模なデータベースや機械学習モデルを保存・版管理できます。典型的なデータサイエンスプロジェクトには、Jupyterノートブック、データセット、モデル、メタデータ、モデル指標が含まれます。メタデータには、機械学習モデル、特徴量、モデルパラメータ、オートメーションファイルに関するメタ情報を含むファイルが入ります。これらはすべて、AIアプリケーションの進捗監視や問題解決に必要です。
データサイエンスの実験を追跡することで、誤って行った変更の取り消し、性能指標に基づく最良の実験の選択、他メンバーとの協働が可能になります。下図は、データやコードの変更がメタデータやモデルの出力にどのように影響するかを示しています。こうした変更を追跡することは、他のメンバーがより良い解決策を考える助けにもなります。最新のSummer WorsleyによるブログでGit について詳しく学びましょう。

データサイエンスプロジェクトにおける Git
GitHub でのコラボレーション
GitHub はクラウド型のソフトウェア開発プラットフォームです。ファイル保存、変更履歴の追跡、開発プロジェクトでの共同作業に広く使われています。近年、GitHubはソフトウェア開発コミュニティにとって最も人気のあるソーシャルプラットフォームとなりました。個人はオープンソースプロジェクトやバグ報告に貢献し、新プロジェクトを議論し、新しいツールを見つけられます。
データサイエンティストや機械学習エンジニアもソフトウェア開発者に倣い、ワークフローをGitHubと統合しています。これにより、研究成果を共有し、コミュニティからの貢献を受け、データチームと協働できます。このプラットフォームでは、あらゆる種類のデータサイエンス・機械学習のプロジェクト、ガイド、チュートリアル、リソースを見つけられます。学生にとっては、実務経験を得て、最終的に有名企業での仕事につなげる機会にもなっています。
ポートフォリオ
多くの技術系リクルーターはポートフォリオプロジェクトやGitHubプロフィールの提示を求めます。これにより候補者が自社に適しているか判断できます。GitHubプロフィールを作成し、定期的に更新することを強く推奨します。採用担当者は、ソフトウェア開発に十分な経験があり、オープンソースに貢献している候補者を常に探しています。GitHubのポートフォリオを分析できると、技術面接の質問準備にも役立ちます。

GitHub プロフィール
GitHubはデータサイエンティストが自分のプロジェクトを披露する場を提供し、履歴書における実務経験としてもカウントできます。ポートフォリオプロジェクトを公開することで、共同作業、スタートアップの立ち上げ、研究活動などの機会も生まれます。

ポートフォリオプロジェクト
機能
GitHubには、ポートフォリオの公開と同じくらい重要なさまざまな機能もあります。各機能を学び、データサイエンスプロジェクトに取り入れていくことが大切です。
- オープンソース: GitHubはオープンソースプロジェクトの完全なエコシステムを提供します。メンテナーへのスポンサー、プロジェクトへの貢献、既存プロジェクトでのOSSツールの活用、自身の成果の発信が可能です。
- コミュニティコラボレーション: GitHubは、課題、機能要望、コード、ドキュメントの貢献を議論できるコミュニティプラットフォームになっています。
- Explore: GitHubのExploreタブでは、新規プロジェクト、トレンドツール、開発者イベントを発見できます。
- GitHub Gist: コードのスニペットを共有したり、ブログやWebサイトに埋め込んだりできます。
- GitHub CLI: コマンドラインからマージリクエスト、コードレビュー、課題の確認、進捗の監視が可能です。
- 無料ストレージ: プライベート・パブリックのリポジトリを無制限に保存できます。
- Webホスティング: ポートフォリオサイトやドキュメントを公開できます。GitHub Pagesにより、簡単にWebサイトを構築・デプロイできます。
- Codespaces: GitHubリポジトリと統合されたクラウド開発環境。
- Projects: GitHub上の作業計画と追跡のためのカスタマイズ可能で柔軟なツール。
- 自動化: GitHub Actionsは、ビルド、テスト、公開、リリース、デプロイなどの開発ワークフローを自動化します。
- スポンサー: 月額または一度限りの支払いで、お気に入りのOSSプロジェクトや開発者を支援できます。ko-fiのようなサードパーティ決済プラットフォームも利用可能です。
基本コマンド
データサイエンスプロジェクトの管理に入る前に、どのプロジェクトでも使う一般的なGitコマンドを学びましょう。基本コマンドには、Gitリポジトリの初期化、変更の保存、ログの確認、変更のリモートへのプッシュ、マージなどが含まれます。
-
git initローカルディレクトリにGitリポジトリを作成します。 -
git clone <remote-repo-address>: リモートサーバーからリポジトリ全体をローカルディレクトリにコピーします。ローカルリポジトリのコピーにも使えます。 -
git add <file.txt>: 単一または複数のファイル・フォルダをステージングエリアに追加します。 -
git commit –m “Message”: 変更のスナップショットを作成し、リポジトリに保存します。 -
git configメールアドレス、ユーザー名、ファイル形式などのユーザー固有の設定を行います。 -
git status変更済みで未ステージ/未コミットのファイル一覧を表示します。 -
git push <remote-name> <branch-name>: ローカルのコミットをリポジトリのリモートブランチへ送信します。 -
git checkout -b <branch-name>: 新しいブランチを作成し、そのブランチに切り替えます。 -
git remote –v: すべてのリモートリポジトリを表示します。 -
git remote add <remote-name> <host-or-remoteURL>: ローカルリポジトリにリモートサーバーを追加します。 -
git branch –d <branch-name>: ブランチを削除します。 -
git pull mergeリモートリポジトリからコミットを取得してローカルディレクトリにマージします。 -
git merge <branch-name>: マージコンフリクトを解消後、選択したブランチを現在のブランチに統合します。 -
git log現在のブランチの詳細なコミット一覧を表示します。

GitHub を用いた一連の開発
さらに多くのコマンドに興味があれば、Git チートシートをご覧ください。
はじめに
このセクションでは、データサイエンスプロジェクトの追跡にGitを、リモートサーバーとしてGitHubを使用します。Gitのインストール、GitHubでのリポジトリの作成とクローン、機械学習実験の実行、Windows PowerShell 7を用いた変更(ノートブック、モデル、データ)のGitHubへのプッシュを学びます。
Git のインストール
GitはすべてのOSをサポートしています。コマンドラインツールを使うか、セットアップをダウンロードして直接インストールできます。
Linux
Debian/Ubuntu系OSでは `apt-get install git` を使用し、その他のLinux系システムを使用している場合は、インストールコマンドの完全な一覧をこちらで確認してください。
macOS
homebrew がインストールされている場合は、`brew install git` でGitをダウンロード・インストールできます。バイナリインストーラーをダウンロードして実行することもできます。
Windows
WindowsへのGitインストールは簡単です。ダウンロードページにアクセスし、使用中のWindowsバージョンをクリックしてセットアップをダウンロード・インストールします。winget ツールがある場合は、PowerShellで winget install --id Git.Git -e --source winget と入力してインストールできます。
Gitのインストール後、ユーザー名とメールアドレスが設定されていることを確認してください。これらの情報はコミットの署名に使用されます。
git config --global user.name "your-user-name"
git config --global user.email "[email protected]"
Gitのインストール方法をさらに詳しく知るには、こちらをクリックしてください。
プロジェクトの初期化
GitHubアカウントがある場合は、「+」ボタンをクリックして新しいリポジトリを選択します。その後、リポジトリ名を入力し、簡単な説明を追加します。これで空のパブリックリポジトリが作成されます。

プロジェクトの作成
リモートリポジトリをローカルディレクトリにクローンする方法は多数あり、GitHubにはクローン、リモートの追加、Gitプロジェクトの初期化方法に関する詳細なガイドがあります。

GitHub のクローン
HTTPSリンクを指定するだけでリポジトリをクローンできます。コマンドプロンプトまたはPowerShellで作業ディレクトリにいることを確認してください。
git clone https://github.com/kingabzpro/DataCamp-Git.git
>>> Cloning into 'DataCamp-Git'...
>>> warning: You appear to have cloned an empty repository.
cd .\DataCamp-Git\
または
「DataCamp-Git」という新しいディレクトリを作成し、簡単なコマンドでGitを初期化します。その後、リモートリポジトリへの接続を追加し、GitHubと作業内容を同期できるようにします。
mkdir DataCamp-Git
cd .\DataCamp-Git
git init
>>> Initialized empty Git repository in C:/Repository/GitHub/DataCamp-Git/.git/
git remote add origin https://github.com/kingabzpro/DataCamp-Git.git
または
すでにディレクトリ内にプロジェクトがある場合は、`git init` でGitを初期化し、上記のようにGitHubのリモートを追加するだけです。
シンプルなコミット
ファイルをリポジトリに追加する前に、正しいローカルディレクトリにいることを確認してください。
まずは簡単に、見出し DataCamp-Git を含むREADMEファイルを作成します。次に、`git add` を使ってステージングエリアに追加します。
echo "# DataCamp-Git" >> README.md
git add README.md
git status は、現在mainブランチにいて、`README.md` ファイルがステージされコミット準備ができていることを示します。
git status
>>> On branch main
>>> No commits yet
>>> Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: README.md
最初のコミットを作成するため、メッセージ付きで `git commit` を使います。出力から、最初のコミットがハッシュ ed9c886 の下に追加されたことがわかります。
git commit -m "first commit"
>>> [main (root-commit) ed9c886] first commit
>>> 1 file changed, 1 insertion(+)
>>> create mode 100644 README.md
プロジェクトファイルの追加
DataCamp Workspace の LSTMとGRUによるMasterCard株価予測 を利用し、ファイルをダウンロードします。プロジェクトの著者はデータの前処理を行い、LSTMとGRUモデルでの時系列データの学習を済ませています。詳細は再帰型ニューラルネットワーク(RNN)チュートリアルをお読みください。
モデルファイルを保存するため、プロジェクトのJupyterノートブックに新しいコードセルを追加しました。この新しいスクリプトは「model」という新しいディレクトリを作成し、LSTMとGRUの両モデルを保存します。
!mkdir -p model
model_lstm.save('model/LSTM')
model_gru.save('model/GRU')
ご覧のとおり、GitリポジトリにはCSVファイルを含むdataフォルダ、モデルの重みとメタデータを含むmodelフォルダがあります。

ここで、すべてのファイルをステージします。最初のコマンドに続けて、任意のディレクトリ、ファイル、データを追加できます。
git add .\data .\model LSTM_GRU.ipynb RNN.png
または
ステージングエリアにすべてのファイルを追加したい場合は、ドットを使います。
git add .
コミットとプッシュ
すべての変更を簡単なメッセージでコミットします。出力には、新しいファイルがcreate modeで追加されたことが示されます。
git commit -m "project files added"
>>> [main aa3e19a] project files added
>>> 10 files changed, 5020 insertions(+)
>>> create mode 100644 LSTM_GRU.ipynb
>>> create mode 100644 RNN.png
>>> create mode 100644 data/Mastercard_stock_history.csv
>>> create mode 100644 data/Mastercard_stock_info.csv
>>> create mode 100644 model/GRU/saved_model.pb
>>> create mode 100644 model/GRU/variables/variables.data-00000-of-00001
>>> create mode 100644 model/GRU/variables/variables.index
>>> create mode 100644 model/LSTM/saved_model.pb
>>> create mode 100644 model/LSTM/variables/variables.data-00000-of-00001
create mode 100644 model/LSTM/variables/variables.index
GitHubのリモートリポジトリと同期するには、リモート名とブランチ名が必要です(`git push <remote-name> <branch-name>`)。リモートとブランチが1つずつしかない場合は、`git push` だけでも動作します。
`git push` の後、ポップアップウィンドウで認証情報が求められます。GitHubのユーザー名とパスワードを入力してください。Personal access tokens を生成して、パスワードの代わりに使用することもできます。詳しくは Git Push と Pull のチュートリアルをお読みください。
git push
>>> Enumerating objects: 21, done.
>>> Counting objects: 100% (21/21), done.
>>> Delta compression using up to 4 threads
>>> Compressing objects: 100% (19/19), done.
>>> Writing objects: 100% (21/21), 1.83 MiB | 1.59 MiB/s, done.
>>> Total 21 (delta 2), reused 0 (delta 0), pack-reused 0
>>> remote: Resolving deltas: 100% (2/2), done.
>>> To https://github.com/kingabzpro/DataCamp-Git.git
>>> * [new branch] main -> main
リモートに変更を正常にプッシュできたか確認するため、GitHubの kingabzpro/DataCamp-Git を確認します。GitHubのリポジトリには、すべてのファイル、データ、モデルが揃っています。

GitHub へのリモートプッシュ
Git のブランチ
ブランチを用いて作業することを推奨します。例えば、プロジェクトのドキュメントに取り組む場合、git checkout や git branch を使ってdocumentationブランチを作成します。READMEファイルを変更し、内容が固まったらベースにマージします。
ここでは readme という新しいブランチを作成して切り替えました。
git checkout -b readme
READMEファイルを編集し、プロジェクトの説明とRNNのDataCamp Workspaceおよびチュートリアルへのリンクを追加します。その後、変更をステージし、メッセージ付きでスナップショットを保存します。
git add README.md
git commit -m "project description and links to blog"
>>> [readme f3b8b9b] project description and links to blog
>>> 1 file changed, 8 insertions(+)
リモートリポジトリにはreadmeブランチが存在しません。新しいブランチを作成して変更をプッシュするには「readme:readme」を使用します。コマンド出力から、新しいブランチが作成され、ローカルとリモートの `readme` ブランチが同期されたことがわかります。
git push origin readme:readme
>>> remote: Resolving deltas: 100% (1/1), completed with 1 local object.
>>> remote: Create a pull request for 'readme' on GitHub by visiting:
>>> remote: https://github.com/kingabzpro/DataCamp-Git/pull/new/readme
>>> remote:
To https://github.com/kingabzpro/DataCamp-Git.git
>>> * [new branch] readme -> readme
README.mdを変更したローカルブランチを、GitHubに正常にプッシュできたことが確認できます。

GitHub 上の readme ブランチ
プルリクエスト
この機能は組織で一般的です。たとえば、ソフトウェア開発者が新機能に取り組み、リモートのメインブランチに変更をマージしたい場合です。ここではGitHubのGUIを使ってプルリクエストを作成します。プルリクエストボタンをクリックし、ベース(main)にマージしたいreadmeブランチを選択します。追加した機能の詳細説明を入力し、プルリクエストボタンをクリックします。

readme から main へのプルリクエスト
リポジトリのメンテナーは変更内容を比較し、すべてのテストを通過したらマージします。今回のケースでは自分がメンテナーなので、マージリクエストをクリックして変更をmainブランチに統合します。

GitHub でのプルリクエストのマージ
おめでとうございます。プルリクエストを作成し、mainブランチにマージできました。mainブランチでの変更はこちらで確認できます。
リポジトリ内のすべての変更を確認したい場合は、`git log` と入力すると、プロジェクトの変更履歴が表示されます。データサイエンスプロジェクトでのログの記録は重要であり、Gitは大規模データセットも含め、すべての変更を追跡するのに役立ちます。

Git ログの履歴
まとめ
GitOpsはデータアプリケーション開発において極めて重要です。あらゆるIT職種にとって不可欠なスキルとなっており、学術研究者でさえ実験コードを広く共有するために利用しています。一方でGitHubは、誰もが利用できる無料のソフトウェア開発エコシステムを提供することで、オープンソースプロジェクトの促進に大きな役割を果たしています。
このチュートリアルでは、GitとGitHubについて、そしてそれらがデータサイエンスプロジェクトにとって重要である理由を学びました。基本的なGitコマンドの紹介に加え、データ、モデル、コードの変更を追跡する実践も行いました。Gitをさらに学びたい場合は、DataCampの Introduction to Git コースを受講してください。GitHub Foundations 認定の重要性やキャリアへの役立て方についても学べます。
Git に関するよくある質問
Git とは何ですか?
オープンソースの分散型バージョン管理システムです。開発プロジェクトにおける変更を保存・版管理・可視化できます。柔軟なチームワークと最適化されたワークフローを促進します。
Git は何の略ですか?
頭字語ではありません。創作者のLinus Torvaldsによれば、“Gitは気分次第で何とでも意味づけられる” とのことです。UNIXコマンドで使われていない3つのランダムな文字の組み合わせです。
Git リポジトリをクローンするには?
ターミナルで `git clone <remote repository address>` と入力するだけです。ローカルおよびリモートのリポジトリをクローンできます。SSHとHTTPSの両方のプロトコルをサポートしています。
Git でブランチを削除するには?
ローカルブランチを削除するには `git branch -d <local_branch_name>`、リモートブランチを削除するには `git push <remote_name> -d <remote_branch_name>` を使用します。
Git でブランチを切り替えるには?
既存ブランチに切り替えるには `git checkout <branch name>`、新規作成して切り替えるには `git checkout -b <branch name>` を使用します。
Git をインストールするには?
Linuxシステムでは `apt-get install git` を使用し、その他のOSについては git-scm.com を参照してください。
Git は無料ですか?
はい。GitはGPL-2.0ライセンスの下で無償かつオープンソースです。
Git Bash とは?
Unix系のシェルユーティリティと体験を提供する、Microsoft Windows向けアプリケーションです。
Git で新しいブランチを作成するには?
ターミナルで `git branch <new-branch> <base-branch>` を使用します。新規作成して同時に切り替えるには `git checkout -b <branch name>` を使います。
git pull は何をしますか?
リモートサーバーからローカルのリポジトリを更新し、リモートの変更を取得してローカルディレクトリにマージします。この過程ではマージコンフリクトの解消が必要になることがあります。
Git でリポジトリをフォークするには?
GitHubでのフォークは、他のアカウントのリポジトリのコピーを自分のGitHubアカウントに作成することです。一般に、コミュニティへの貢献やチーム作業のために行われます。
Git でブランチ名を変更するには?
ローカルブランチ名の変更は簡単で、`git branch -m <old-name> <new-name>` を使います。リモートブランチの名前変更では、まず `git push origin --delete <old-name>` で古いブランチを削除し、その後 `git push -u origin <new_name>` で新しいブランチをプッシュします。
Git リポジトリを削除するには?
ローカルの場合、フォルダを削除するか、.git フォルダを `rm -fr .git` で削除します。GitHubでは、リポジトリの設定ページの末尾に削除オプションがあります。
Windows に Git をインストールするには?
Windows用セットアップを サイト からダウンロードして実行してください。Git Bash、Git CDM、Git GUIがインストールされます。
Git でコミットを取り消すには?
`git revert <commit sha>` を使用します。これは任意の過去のコミットのユニークなハッシュが必要です。`git revert HEAD~2` のように、ヘッドから2つ前のコミットを指定することもできます。