たった10分でGitの基本を学ぶ
by Gowtham Venkatesan
はい、このタイトルはクリックベイトです。 たった10分でgitテクノロジーの基本を理解できるわけがありません。 しかし、25分程度でかなり近づけることができます。 それがこの記事の目的です。
もしあなたがGitテクノロジーについて学ぶことを始めたいのであれば、あなたは正しい場所に来ました。 この記事は、Gitの包括的な初心者向けガイドです。 Gitには多くのクライアントがあります。 どのクライアントであっても、技術はすべて同じです。
はじめよう!
バージョン管理とは
Umm…Okay…But Why Tho?
理由は以下のとおりです
バージョン管理システム (VCS) を使用すると、ファイルを以前の状態に戻したり、プロジェクト全体を以前の状態に戻したり、時間をかけて行われた変更を確認したり、問題を引き起こしている可能性のあるものを最後に変更したのが誰か、問題を導入したのが誰か、いつ頃か、などを確認することができます。 また、VCSを使用することで、何かを失敗したり、ファイルを失ったりしても、通常は簡単に回復することができます。
では、Gitとは何でしょうか
Gitは、コンピュータファイルの変更を追跡し、複数の人の間でそれらのファイルに対する作業を調整するためのバージョン管理システムです。 Gitは、分散型バージョン管理システムです。 ですから、Gitは、プロジェクトのファイルのすべてのバージョンを保存する中央サーバーに必ずしも依存しません。 その代わりに、すべてのユーザーがリポジトリ(ファイルの集合体)のコピーを「クローン」して、自分のハードドライブにプロジェクトの全履歴を保存します。
Gitは、あなたがコードに加えた変更を追跡するのに役立ちます。 基本的には、コードエディタの履歴タブです(シークレットモードはありません)。 コーディング中に致命的なエラーが発生し、その原因がわからなくなった場合、いつでも安定した状態に戻すことができます。 つまり、デバッグにとても役立ちます。
上の例では、3枚のカードはすべて同じファイルの異なるバージョンを表しています。 私たちは、どの時点でも、どのバージョンのファイルを使用するかを選択することができます。
Git は、複数の人の間でコードを同期させるのにも役立ちます。 たとえば、あなたとあなたの友人があるプロジェクトで共同作業をしているとします。 二人は同じプロジェクトファイルに取り組んでいます。 Gitは、あなたと友人が別々に行った変更を、1つの「マスター」リポジトリにマージします。 つまり、Gitを使えば、二人とも最新バージョンのリポジトリで作業していることが保証されるのです。 そのため、ファイルをお互いに郵送したり、元のファイルのとんでもない数のコピーを使って作業することを心配する必要はありません。
Git Workflow:
Git コマンドで作業を始める前に、Git が何を表しているのかを理解する必要があります。
リポジトリとは
リポジトリ (repo) とは、ソース コードの集まりに他なりません。
作業ディレクトリ、ステージング エリア、ローカル リポジトリ、リモート リポジトリです。
作業ディレクトリにあるファイルを考えると、3つの可能な状態があります。
- ステージングされていることがあります。
- ステージングされている。つまり、更新された変更のあるファイルは、ローカル リポジトリにコミットされるようにマークされているが、まだコミットされていない。 つまり、更新された変更を含むファイルは、まだローカル リポジトリに保存されていません。
- コミットできます。
-
git add
は、作業ディレクトリにあるファイルをステージングエリアに追加するために使用するコマンドです。 -
git commit
は、ステージングされているすべてのファイルをローカル リポジトリに追加するために使用されるコマンドです。 -
git push
は、ローカル リポジトリにコミットされているすべてのファイルをリモート リポジトリに追加するために使用されるコマンドです。 -
git fetch
は、リモートリポジトリからローカルリポジトリにファイルを取得するために使用されるコマンドですが、作業ディレクトリには追加されません。 -
git merge
は、ローカルリポジトリから作業ディレクトリにファイルを取得するために使われるコマンドです。 -
git pull
git fetch
git merge
に相当します。
さて、Gitとは何か、その基本的な用語がわかったところで、gitの下にファイルを置く方法を見てみましょう。 ここでは、正しい方法と難しい方法の両方をご紹介します。
あなたはすでにバージョン管理下に置きたいファイルを持っていると思います。 そうでない場合は、「MuskCult」という名前のサンプル フォルダを作成し、いくつかのサンプル コード ファイルをそこに置いてください。
まだアカウントを持っていない場合は、ここで作成できます。
Step 1: Gitがマシンにインストールされていることを確認します。
Macを使用している場合は、ターミナルを起動して次のコマンドを入力します:
$ git --version
まだgitがインストールされていない場合は、インストーラーが起動します。 そこで、インストーラーを使ってセットアップします。 すでに git がある場合は、どのバージョンの git がインストールされているかが表示されるだけです。
Linux(deb)をお使いの場合は、ターミナルで次のように入力します:
$ sudo apt install git-all
Windowsをお使いの場合。
$ get a mac
冗談ですよ・・・落ち着いて・・・私がトリガーした分・・・ふぅ・・・
入手方法については、このリンクまたはこのリンクに行ってください。
Step 2: Tell Git who you are.
自己紹介をしましょう。 スライドしてください。 真面目な話、Git のユーザー名とメールアドレスを言いましょう。なぜなら、すべての Git コミットはこの情報を使ってあなたが作者であることを確認するからです。
$ git config --global user.name "YOUR_USERNAME"
$ git config --global user.email "[email protected]"
$ git config --global --list # To check the info you just provided
Step 3: 既存の SSH キーを生成するか、マシンをチェックする。 (オプション)
なぜでしょうか? SSHプロトコルを使用すると、リモートのサーバーやサービスに接続したり、認証したりすることができます。
このリンクをたどって SSH についてもっと学びましょう。
このリンクをたどって既存の SSH キーがあるかどうか調べましょう。
このリンクをたどって SSH キーを生成しましょう。
このリンクをたどって GitHub アカウントに SSH キーを追加しましょう。
そして最後にこのリンクをたどって接続をテストしましょう。
SSHを設定した場合、リンクを持つすべてのgitコマンドを次のように置き換えます:
Instead of : https://github.com/username/reponame
You use : [email protected]/username/reponame.git
Note : You can use both ways alternatively
このチュートリアルではSSHプロトコルを使用します。
Step 4: Let’s Git
GitHubに新しいリポジトリを作成します。 こちらのリンクを参照してください。
さて、ターミナルでgitの下に置きたいフォルダに移動します。
$ cd Desktop/MuskCult
Initialize Git:
そして、gitの下に置くために、次のように入力します。
$ touch README.md # To create a README file for the repository$ git init # Initiates an empty git repository
さて、README.mdファイルを編集して、Gitの情報を提供しましょう。mdファイルを編集して、リポジトリに関する情報を提供します。
Add files to Staging Area for commit:
さて、コミットするためにファイルを git リポジトリに追加します:
$ git add . # Adds all the files in the local repository and stages them for commit
OR if you want to add a specific file
$ git add README.md # To add a specific file
コミットする前に、どのファイルがステージングされているか見てみましょう。
$ git status # Lists all new or modified files to be committed
Git Repoに加えた変更をコミットする:
ここで、Git repoに追加したファイルをコミットします。
$ git commit -m "First commit"# The message in the " " is given so that the other users can read the message and see what changes you made
Uncommit Changes you just made to your Git Repo:
さて、コードにエラーがあったり、不要なファイルをリポジトリに入れてしまったりした場合、追加したファイルをアンステージするには以下の方法があります。
$ git reset HEAD~1# Remove the most recent commit# Commit again!
Add a remote origin and Push:
さて、ファイルに変更を加えて保存するたびに、GitHub上で自動的に更新されることはありません。 ファイルに加えた変更は、すべてローカルリポジトリに更新されます。 では、その変更をマスターに更新してみましょう。
$ git remote add origin remote_repository_URL# sets the new remote
git remote コマンドを使うと、他のリポジトリへの接続を作成したり表示したり削除したりすることができます。
$ git remote -v# List the remote connections you have to other repositories.
git remote -v コマンドを使うと、他のリポジトリに接続しているリモート接続の URL が一覧表示されます。
$ git push -u origin master # pushes changes to origin
さて、git pushコマンドは、ローカルリポジトリの変更点を、オリジンとして指定したリモートリポジトリにプッシュします。
さて、GitHub のリポジトリページを見てみると、次のようになっているはずです。
そして、これで終わりです。
See the Changes you made to your file:
ファイルに変更を加えて保存すると、そのファイルはgitにコミットされた最後のバージョンとは一致しません。 今行った変更を確認するには、
$ git diff # To show the files changes not yet staged
Git Repoに最後にコミットされたバージョンに戻してみましょう。
ここで、最後にコミットしたバージョンに戻すかどうかを入力して選択できます。
$ git checkout .
OR for a specific file
$ git checkout -- <filename>
コミット履歴を見る。
git logコマンドを使うと、ファイルに行ったコミットの履歴を見ることができます:
$ git log
GitHubに反映させたい変更を行うたびに、以下のような流れでコマンドを実行していきます。
$ git add .$ git status # Lists all new or modified files to be committed$ git commit -m "Second commit"$ git push -u origin master
さて、レポを見に行くと、各ファイルのコミットメッセージを見ることで、コミットが成功したかどうかを確認することができます。
Step 5 : That’s all well and good… but How do I download and work on other repositories on GitHub?
Cloning a Git Repo:
レポをクローンしたいディレクトリに移動します。
$ git clone remote_repository_URL
どうぞご自由に、私が上で作成したレポを以下の方法でクローンしてください。 https://github.com/Gothamv/MuskCult
Gitレポへの変更のプッシュ:
これで、必要なファイルを作業し、ローカルで変更をコミットすることができます。 変更をリポジトリにプッシュしたい場合は、リポジトリの共同作業者として追加されるか、プルリクエストと呼ばれるものを作成する必要があります。
共同作業:
例えば、あなたとあなたの友人があるプロジェクトで共同作業をしているとします。 二人とも同じプロジェクト ファイルに取り組んでいます。 あなたが変更を加えて master リポジトリにプッシュするたびに、友人はあなたが git リポジトリにプッシュした変更をプルしなければなりません。 つまり、作業を始めるたびにgit repoの最新バージョンで作業していることを確認するには、git pullコマンドを使うのがよいということです。
さて、以下は私と友人が共同で行っているプロジェクトの例です。
そこで、その変更が私のローカルコピーのレポに反映されるようにします。
$ git pull origin master
さらに便利なgitコマンドを2つご紹介します。
$ git fetch AND$ git merge
最も簡単に言えば、git fetch
git merge
git pull
になります。
git pull
を使うと、Gitは自動的に作業をしてくれようとします。 これは文脈を考慮したもので、Git はプルされたコミットをあなたが現在作業しているブランチにマージします。 git pull
では、あなたに最初にレビューさせることなく自動的にコミットをマージします。
git fetch
では、Gitは現在のブランチに存在しない対象ブランチのコミットを集めて、ローカルリポジトリに保存します。 しかし、それらを現在のブランチにマージすることはありません。 これは、リポジトリを最新の状態に保つ必要があるものの、ファイルを更新すると壊れてしまうような作業をしている場合に特に便利です。
One More Thing:
.gitignore
So what is it?
.gitignore
は、どのファイル (あるいはパターン) を無視すべきかを git に伝えます。 これは通常、他の共同作業者にとって有用ではない一時的なファイル (コンパイル結果や IDE が作成する一時ファイルなど) を作業ディレクトリからコミットしないようにするために使用します。
したがって、上記の例では、__pycache__、.DS_Store のようなファイルは、システムがより速くアクセスできるように情報を保存するために使用されます。 これは、他の共同作業者にとっては役に立ちません。 そこで、.gitignore
ファイルを追加することで、それらを無視するようにgitに伝えることができます。
touchコマンドを使用して、.gitignore
ファイルを作成します:
$ touch .gitignore
さらに、以下のパターンを追加することで、そのようなファイルを無視するようにgitに伝えることができます。
/*.cmake/*.DS_Store/.user/buildetc. depending upon the files you want git to untrack
以上が基本的な内容となります。
もしこの記事を楽しんでいただけたなら、拍手ボタンを押すのを忘れずに、第2部までフォローしてくださいね。
参考文献 :
Adding an existing project to GitHub using the command line – User Documentation
既存の作業をGitHubに載せることで、さまざまな方法で共有やコラボレーションを行うことができます。 …help.github.comHow to undo (most) anything with Git
バージョン管理システムの最も便利な機能のひとつは、ミスを「元に戻す」ことができることです。 blog.github.comGit on the commandline – Don’t be afraid to commit 0.3 documentation
Gitをインストールする方法は他にもあり、グラフィカルなGitアプリケーションを入手することもできます。ioStart using Git on the command line|GitLab
GitLab Community Edition、GitLab Enterprise Edition、Omnibus GitLab、GitLab Runner.docs.gitlab.com「git pull」と「git fetch」の違いは何ですか?
Moderator Note: この質問にはすでに67件の回答が投稿されています(そのうちのいくつかは削除されています)…stackoverflow.com