GitとGithub。 シンプルなレシピ

遅かれ早かれ、独自のプロジェクトを開発するときは、ソースコードを保存する場所と、複数のバージョンでの作業をサポートする方法について考える必要があります。 会社で働く場合、これは通常あなたのために決定され、受け入れられた規則を維持するだけで十分です。 一般的に使用されるバージョン管理システムはいくつかありますが、最も人気のあるものの1つであるGitとGithubサービスを見ていきます。



GitシステムはLinuxオペレーティングシステムのソース管理ツールとして登場し、オープンソース環境で多くの賞賛を受けています。



Githubサービスは、有料テキストと無料テキストの両方でソーステキストのホスティング(ストレージ)を提供します。 これは、オープンソースユーザーが愛する最大のシステムの1つです。 有料版との主な違いは、ソーステキストのプライベートリポジトリ(リポジトリ)を作成できることです。非表示にするものがなければ、無料版を安全に使用できます。



プロジェクトの作業を開始し、いくつかの実用的なプロトタイプを作成した後、作業の結果を保存することができます。 また、別のコンピューターで作業を続けたい場合にも役立ちます。 最も簡単な解決策は、すべてをUSBフラッシュドライブに保存することです。 このオプションは適切に機能しますが、インターネットに接続している場合(そして今では接続していない方)、Git / Githubシステムを使用すると便利です。



この記事では、コマンドラインを使用してLinux環境でプロジェクトを操作するときにGit / Githubシステムを使用するための基本的なシナリオについて説明します。 すべての例は、Linux Ubuntu 14.04およびGit 1.9.1を搭載したシステムでテストされました。 別のディストリビューションを使用する場合は、違いがある場合があります。



ローカルリポジトリを作成する



プロジェクトが/ home / user / projectフォルダーにあるとします。 ソースを保存する前に、プロジェクトフォルダーに一時ファイルがあるかどうかを確認し、可能であればそれらを削除します。



フォルダを表示するには、 treeコマンドを使用すると便利です。このコマンドは、各フォルダの内容だけでなく、ディレクトリのツリー構造も表示します。



多くの場合、一時ファイルには特定の接尾辞が含まれており、それらを検出して簡単に削除できます。 findコマンドを使用して、このようなファイルを検索できます。 例として、Pythonコンパイラーによって生成され、拡張子が.pycであるすべてのファイルを見つける方法を見てみましょう。



プロジェクトフォルダー/ home / user / projectに移動します。



cd /home/user/project
      
      





そして、拡張子が.pycのファイルのリストを表示します。



 find . -name *.pyc
      
      





このコマンドは、現在のディレクトリとそのサブディレクトリにある.pyc拡張子を持つすべてのファイルをリストします。 見つかったファイルを削除するには、このコマンドに-deleteスイッチを追加するだけです:



 find . -name *.pyc -delete
      
      





急がないで、すぐにこのキーを追加しないことを強くお勧めします。 ファイルを表示するコマンドを初めて呼び出し、リストに有用なものが何も追加されていないことを確認するだけで、削除キーを追加します。



プロジェクトフォルダーにローカルリポジトリを作成します。



 git init
      
      





このコマンドを実行すると、 .gitという名前の新しいフォルダーが表示されます。 いくつかのファイルとサブディレクトリがあります。 現時点では、バージョン管理システムにはまだファイルが表示されていません。



ローカルリポジトリへのファイルの追加



ファイルを追加するには、次のコマンドを使用します。



 git add readme
      
      





コマンドが実行された後、 readmeファイルがバージョン管理システムに追加されます(もちろん、プロジェクト内に既にある場合)。 ファイルを追加すると、次のようなハッシュ値が生成されます。



 9f2422325cef705b7682418d05a538d891bad5c8
      
      





追加されたファイルは.git / objects / xx / yyyyyyyyフォルダーに保存され、ハッシュの最初の2桁はディレクトリを示すために使用され、ハッシュ値の残りはファイルの名前です。 追加したファイルは次の場所にあります。



 .git/objects/9f/2422325cef705b7682418d05a538d891bad5c8
      
      





コマンドで見やすいもの:



 ls .git/objects
      
      





ファイル自体はアーカイブであり、簡単に解凍して画面に表示でき、ハッシュの完全な値を示します。



 git cat-file -p 9f2422325cef705b7682418d05a538d891bad5c8
      
      





現在のディレクトリからすべてのファイルを追加するには、次のように入力します。



 git add .
      
      





現在のディレクトリとすべてのサブディレクトリからファイルを追加する必要がある場合は、次を使用します。



 git add --all
      
      





一時ファイルがシステムに入るのを防ぐために、それらを.gitignoreファイルに追加できます。このファイルを自分で作成し、プロジェクトのルートディレクトリ( .gitディレクトリと同じレベル)に配置する必要があります。



たとえば、次の行* .pycを .gitignoreファイルに追加すると、拡張子が.pycのすべてのファイルはリポジトリに追加されません。



ファイルを追加した後、すべての変更はいわゆるステージング (またはキャッシュエリアにあります。 これは、変更を蓄積するために使用される一時的なストレージであり、そこからプロジェクトの実際のバージョン( commit )が作成されます。



現在のステータスを表示するには、次のコマンドを使用できます。



 git status
      
      





コマンドを実行すると、ファイルがステージ領域にあることがわかります。



 new file: readme
      
      





readmeファイルを引き続き変更すると、 git statusコマンドを呼び出した後、ファイルの2つのバージョンが表示されます。



 new file: readme modified: readme
      
      





新しい変更を追加するには、コマンドを繰り返します。 git addコマンドは、新しいファイルを追加するだけでなく、以前に追加されたファイルへのすべての変更も追加します。



 git add readme
      
      





次のコマンドを使用して、 ステージング領域の readmeファイルの追加をキャンセルできます



 git rm --cached readme
      
      





コマンドの実行後、 readmeファイルはシステムによって未変更としてマークされます。



プロジェクトバージョンの作成



必要なファイルをステージング領域に追加したら 、プロジェクトのバージョンを作成できます。 コマンドを使って:



 git commit -m "comment"
      
      





新しいバージョンにはそれぞれコメントが付いています。



コミット後、 .gitリポジトリ内に2つの新しいオブジェクトを見つけることができます。



 .git/objects/9f/2422325cef705b7682418d05a538d891bad5c8 .git/objects/65/7ab4c07bd3914c7d66e4cb48fe57f5c3aa7026 .git/objects/da/c6721c3b75fcb3c9d87b18ba4cef2e15e0a3d3
      
      





中身を見てみましょう:



 git cat-file -t 657ab4c07bd3914c7d66e4cb48fe57f5c3aa7026
      
      





-tスイッチは、オブジェクトのタイプを示します。 その結果、次のことがわかります。



 commit
      
      





2番目のオブジェクトの場合:



 git cat-file -t dac6721c3b75fcb3c9d87b18ba4cef2e15e0a3d3
      
      





結果:



 tree
      
      





最初のファイルの場合:



 git cat-file -t 9f2422325cef705b7682418d05a538d891bad5c8
      
      





見る:



 blob
      
      





これらのファイルの内容を引き続き調査すると、ツリー構造が見つかります。 各コミットから、変更されたすべてのファイルのリンクをたどることができます。 実際に使用する場合、これはそれほど必要ではありませんが、Gitシステムで作業するときに何が起こるかを理解する方が簡単かもしれません。



最初のバージョンは元に戻せません。 修正のみ可能です。 最新バージョンに変更を追加する場合は、 commitコマンドを実行した後、必要な変更を追加して呼び出します。



 git commit -m "comment" --amend
      
      





または:



 git commit --amend --no-edit
      
      





コメントを再入力しないように、 -no-editスイッチが必要です。



最後にコミットした変更を表示できます。



 git show
      
      





または:



 git show --name-only
      
      





キー--name-onlyは 、変更されたファイルの名前のみを表示するために必要です。 これがないと、変更されたファイルごとにすべての変更のリストが表示されます。



作業を続け、 git addコマンドでシステムに既に追加されているファイルのみを変更した場合、1つのコマンドでコミットできます。



 git commit -a -m "comment"
      
      





すべてのコミットのリストを表示するには、次のコマンドを使用します。



 git log
      
      





または:



 git log --oneline
      
      





--onelineキー 、画面に表示される情報の量を減らすために必要です。 このキーを使用すると、各コミットが1行で表示されます。 例:



 2b82e80 update 657ab4c first
      
      





特定のコミットの変更を表示するには、コミットのハッシュ値をgit showコマンドに追加します。これは前のコマンドを使用して取得できます。



 git show 657ab4c
      
      





最後のコミット(最初のコミットを除く)を取り消すには、次のコマンドを使用できます。



 git reset HEAD~1
      
      





プロジェクトに関連せず、リポジトリに保存されていないフォルダー内のすべてのファイルを削除するには、次のコマンドを使用できます。



 git clean -df
      
      





Githubでリポジトリを作成する



これまでは、コンピューター上のフォルダーに保存されていたローカルリポジトリを使用していました。 プロジェクトをインターネットに保存できるようにする場合は、Githubにリポジトリを作成します。 まず、 github.comにmyuserという名前で登録する必要があります(この場合、他の名前でもかまいません)。



登録後、 「+」ボタンをクリックして、リポジトリの名前を入力します。 タイプPublicを選択し(無料版ではリポジトリは常にPublicです)、 Createをクリックします



その結果、Github Webサイトにリポジトリを作成しました。 画面に、ローカルリポジトリを新しく作成したリポジトリに接続する方法の手順が表示されます。 一部のチームはすでによく知っています。



名前originの下にリモートリポジトリを(SSH経由で)追加します( originの代わりに他の名前を使用できます)。



 git remote add origin git@github.com:myuser/project.git
      
      





次のコマンドを使用して、追加の結果を表示できます。



 git remote -v
      
      





すべてが正しく行われた場合、次のように表示されます。



 origin git@github.com:myuser/project.git (fetch) origin git@github.com:myuser/project.git (push)
      
      





リモートリポジトリを登録解除するには、次のように入力します。



 git remote rm origin
      
      





これは、 SSHアクセスをHTTPSに変更する場合に必要になることがあります 。 その後、たとえばgithubおよびHTTPS protocolという名前で再度追加できます



 git remote add github https://github.com/myuser/project.git
      
      





次のコマンドは、Githubのローカルリポジトリに加えられたすべての変更を取り込みます。



 git push -u github master
      
      





-uスイッチは、リモートgithubリポジトリとマスターブランチ間の接続を確立するために使用されます。 簡素化されたコマンドを使用して、さらにすべての変更をリモートリポジトリに転送できます。



 git push
      
      





リポジトリを別のコンピューターに転送する



Githubでリポジトリを作成したら、他のコンピューターにコピーできます。 これを行うには、次のコマンドを使用します。



 git clone https://github.com/myuser/project.git
      
      





このコマンドの結果、現在のディレクトリにプロジェクトフォルダーが作成されます。 このフォルダーには、ローカルリポジトリ(つまり、 .gitフォルダー)も含まれます。



ローカルリポジトリを配置するフォルダーの名前を追加することもできます。



 git clone https://github.com/myuser/project.git <myfolder>
      
      





異なるコンピューターの1つのリポジトリーで作業する



複数の開発者が異なるコンピューターの1つのリポジトリーで作業できます。たとえば、自宅と職場で同じプロジェクトに取り組んでいる場合は自分で作業できます。



リモートリポジトリから更新を取得するには、次のコマンドを使用します。



 git pull
      
      





ローカルファイルを変更した場合、 git pullコマンドはエラーをスローします。 ローカルファイルをリモートリポジトリのファイルで上書きすることが確実な場合は、コマンドを実行します。



 git fetch --all git reset --hard github/master
      
      





githubを、 git push -uコマンドで登録したリモートリポジトリの名前に置き換えます。



すでに知っているように、リモートリポジトリに変更を送信するには、次のコマンドを使用します。



 git push
      
      





リモートリポジトリにローカルバージョンより新しいバージョンのファイルが含まれている場合、 git pushコマンドはエラーをスローします。 バージョンの競合にもかかわらず、リモートリポジトリ内のファイルを上書きすることが確実な場合は、次のコマンドを使用します。



 git push -f
      
      





現在の変更を延期し、リモートリポジトリにあるファイルで作業することが必要になる場合があります。 これを行うには、次のコマンドで現在の変更を延期します。



 git stash
      
      





このコマンドを実行すると、ローカルディレクトリには最後のコミットと同じファイルが含まれます。 git pullコマンドを使用してリモートリポジトリから新しいファイルをダウンロードし、その後、コマンドで延期した変更を返すことができます。



 git stash pop
      
      





おわりに



GitおよびGithubシステムを操作する基本的なシナリオを検討しました。 上記の各コマンドにはかなり多くのキーがあり、それに応じて機会があります。 それらを徐々に学習することで、ソースを簡単に保護し、開発により直接集中する機会が得られます。



All Articles