RICORA< image/svg+xml > image/svg+xml >
RICORA Programming Team

Gitのつかいかた init, add, commit

Git / GitHubの使い方 - 手元での管理

これは筆者の裁量でバンバン中身を削っているものなので、しっかりとgitの基礎を身に着けたい人は、次の資料を参照してください。

また、このチュートリアルは、CLIを使って操作することを念頭に置き書かれています。 コマンドラインツールが使えなかったり、まだ馴染んでいないと感じる人は、SourceTreeなどのソフトウェアを使いましょう。

プログラミング関連の様々なことに共通することですが、新しいツールを利用するときに苦手意識を持たないことが大切です。

Gitってなんぞや

分散型バージョン管理ツールのことです。 なぜ分散させてバージョン管理したいかというと、プログラムを書いているときに間違ってファイルを消滅させたり破壊的な変更を加えてしまう場合があるからです。 人間は誰でも大抵ミスをするので、うまく管理していくのが大切です。課題も、成績も。

Gitが作られた背景と特徴

GitはLinuxカーネル開発の文脈で、変更の追跡と統合を効率よく行うために設計されました。 そのため、次のような性質を強く持っています。

  • 履歴を高速に扱える
  • 誰がいつ何を変更したかを追跡しやすい
  • 複数人での並行開発に向いている

ここで重要なのは、Gitが単なるバックアップではなく、変更履歴を構造化して管理するための道具だという点です。

実際にバージョン管理ツールが役に立つと想定される例を示します。

AliceとBobは電脳たこやきについてのレポートを書いていましたが、Charlieが来て、電脳いかやきという文言をランダムに混入させてしまいました。 Charlieが去ったのち、バージョン管理ツールがあれば、レポートを書く対象である電脳いかやきを削除できますが、バージョン管理ツールがない場合は一つひとつ手作業で探す・プログラムで探索するなどの行為が必要になります。

実際に様々なものが破壊されたり破滅したりするので、適当に置き換えて想像してみてください。例え悪意がなくとも徹夜明けでデータを吹き飛ばしたり、うっかりミスでデータを吹き飛ばしたり、pythonを消すことでOSが起動不可になるなどのケースがありえます。いまはわからなくとも、データを吹き飛ばしたり誤ってデータを消したりする経験を通じて、分散の必要性とバージョン管理の必要性は実感できるはずです。

Gitの使い方 - ローカルリポジトリ

手順

いま、あるディレクトリ直下にいるとしましょう。 ここでgitによるバージョン管理を始めるには、このコマンドを打ちます。

git init

すると、このような出力が返ってくるはずです。

Initialized empty Git repository in (任意の文字列)

しかし、このコマンドを打ったことでgitがすべてのファイルを管理し始めるわけではありません。 私たちがgitをこのディレクトリ内で使うと宣言した上で、どのファイルを管理するかを明示的に教えてあげる必要があるのです。

gitに管理してほしいファイルを指示するには、以下のコマンドを使います。

git add (ファイル名)

しかし、このコマンドだけではgitによって記録される対象とはなりません。 gitその時々のファイルの状態を管理するツールです。 それはつまり、ファイルの追加、削除、変更といった操作のすべての履歴を記録するものではないということです。 実際には、ファイル変更のきりが良さそうなところでgitにバージョンの記録をお願いすることになります。

バージョン記録のためのコマンドが以下のものです。

git commit -m (コミットログ)

コミットログは、今回記録されるファイルでの変更点などを記すメッセージです。 後の自分や他者が読むことを意識し、意図が伝わる簡潔な表現で記しましょう。

わざわざgitがこのような婉曲したアプローチを採るのはなぜでしょうか。 その理由は、ブランチの概念を学ぶと明らかになります。

まとめ

いままでの流れをまとめてみましょう。

  1. 現在のディレクトリでgitによる管理を開始する。
git init
  1. いくつかのファイルをgitの管理対象に追加する。
git add (some files)
  1. いまの状態を記録し、メッセージを付与する。
git commit -m (message)

このような感じでバージョンを管理できます。良かったですね。

実務では、このローカル操作が次の流れにつながります。

  1. ブランチを切る
  2. add と commit を繰り返す
  3. push で共有する
  4. pull request でレビューを受ける
  5. merge で本流へ反映する

ファイルの削除など

では、以下にgit管理からの削除方法とファイル一覧取得方法を記しておきます。

  • addだけしたファイルをステージから外したい場合
git restore --staged (ファイル名)
  • 一度でもcommitしたことがあるファイルを管理から外したい場合
git rm --cached (ファイル名)
  • gitで管理されているファイルの一覧を取得したい場合
git ls-files

これらは概略であり、もっとたくさんのオプションとたくさんの操作が存在します。

詳しくは、次のコマンドで確認できます。

man git

manコマンドはmanualの略で、様々なコマンドの使用例に深く立ち入って学ぶことができます。 gitコマンド以外でもman (command)で検索してみましょう。

最後に

ここまでの流れの詳細については、次の資料を参照してください。

中ほどの図において、それぞれgit addがステージング、git commitがコミットに対応します。

つづきはGit / GitHub の使い方 - リモートについて