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

Source: https://habr.com/ru/post/J273897/


All Articles