情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Gitのリモート、クローン、プッシュ、プルなど

リモートとは

リポジトリはコピーすることができ、コピー元のリポジトリやコピー先のリポジトリをリモートと言います。

また、リポジトリをコピーすることをクローンと言います。

リモートからは新しいコミットを受け取ることもできますし、逆に、リモートに新しいコミットを送ることもできます。

リモートから新しいコミットを受け取ることをフェッチと言い、リモートに新しいコミットを送ることをプッシュと言います。

クローン

リポジトリをクローンするにはリポジトリをコピーしたいフォルダ(コピー先のフォルダ)でgit cloneコマンドを実行します。

第1引数にリポジトリのアドレスを指定します。

クローンはGitHubで公開している(あるいは、公開されている)リポジトリに対しても行うことができます。

GitHubのリポジトリのアドレスはリポジトリのページの「Clone or download」ボタンをクリックすると出現するボックスのテキストボックスの中に表示されます。

テキストボックスの右にくっ付いているボタンをクリックするとリポジトリのアドレスをクリップボードにコピーすることができます。

リモートの表示

リポジトリのリモートに関する情報を表示するにはリポジトリのフォルダにおいてgit remoteコマンドを実行します。

なお、--vervose-vオプションを使用すると詳細な情報を表示することができます。

リポジトリがクローンされたものである場合にはクローン元のリポジトリはoriginという名称のリモートとなります。

リポジトリがクローンされたものでない場合には(git initコマンドにより作成されたものである場合には)デフォルトではリモートは存在しません。

また、個別のリモートに関する詳細な情報を表示するにはgit remote showコマンドを実行します。

第1引数にリモートの名称を指定します。

実演

GitHubのリポジトリをクローンしてみます。

C:\work\gitフォルダでgit cloneコマンドを実行してhttps://github.com/takeprofit/project2.gitというアドレスのリポジトリをクローンしてみます。

C:\work\git>git clone https://github.com/takeprofit/project2.git
Cloning into 'project2'...
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.

dirコマンドを実行してC:\work\gitフォルダのファイルやフォルダの一覧を表示してみるとproject2フォルダが作成されていることが分かります。

C:\work\git>dir
 Volume in drive C is TI31035600A
 Volume Serial Number is 1CBD-3C48

 Directory of C:\work\git

2016/09/12  15:56    <DIR>          .
2016/09/12  15:56    <DIR>          ..
2016/09/12  17:54    <DIR>          project1
2016/09/08  09:05    <DIR>          project2
               0 File(s)              0 bytes
               4 Dir(s)  31,895,658,496 bytes free

cdコマンドを実行してproject2フォルダに移動します。

C:\work\git>cd project2

git logコマンドを実行してコミット履歴をチェックしてみます。

C:\work\git\project2>git log
commit 708e4aa2b908135b59e6e0554f12f6cefdffefe3
Author: takeprofit <aihsoft@hotmail.com>
Date:   Thu Sep 8 08:59:05 2016 +0900

    new text

commit 929cfbd92e5c879660fc668b9ad90ceb4edb64b9
Author: takeprofit <aihsoft@hotmail.com>
Date:   Thu Sep 8 08:52:34 2016 +0900

    edit

commit f0d8647339a8f8f629be7b10fdedceb07fa81e9f
Author: takeprofit <aihsoft@hotmail.com>
Date:   Thu Sep 8 08:44:45 2016 +0900

    Initial commit

git statusコマンドを実行してリポジトリの状態をチェックしてみます。

C:\work\git\project2>git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

git remoteコマンドを実行してリポジトリのリモートに関する情報を表示してみます。originという名称のリモートが存在していることが分かります。

C:\work\git\project2>git remote
origin

C:\work\git\project2>git remote -v
origin  https://github.com/takeprofit/project2.git (fetch)
origin  https://github.com/takeprofit/project2.git (push)

git remote showコマンドを実行してリポジトリのoriginリモートに関する詳細な情報を表示してみます。

C:\work\git\project2>git remote show origin
* remote origin
  Fetch URL: https://github.com/takeprofit/project2.git
  Push  URL: https://github.com/takeprofit/project2.git
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master merges with remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

リモートのアドレスの変更

リモートのアドレスを変更するにはgit remote set-urlコマンドを実行します。

フェッチ先のアドレスを変更する場合には--fetchオプションを使用し、プッシュ先のアドレスを変更する場合には--pushオプションを使用します。

第1引数にリモートの名称を指定します。

第2引数にリモートのアドレスを指定します。

実演

上でクローンしたリポジトリのリモートのアドレスを変更してみます。

GitHubのリポジトリにプッシュを行うには認証情報(ユーザ名とパスワード)が必要ですが、デフォルトのプッシュ先のアドレスには認証情報が含まれていません。

そのため、デフォルトのプッシュ先のアドレスではプッシュを行うことができません。デフォルトのアドレスのままでプッシュを試みても失敗してしまいます。

プッシュに成功するためにはプッシュ先のアドレスに認証情報を加える必要があります。

git remote set-urlコマンドを実行してプッシュ先のアドレスを適切なものに変更してみます。

C:\work\git\project2>git remote set-url --push origin https://takeprofit:xxxxxxxxxx@github.com/takeprofit/project2.git

プッシュ

クローンしたリポジトリのコミットをリモートにプッシュするにはgit pushコマンドを実行します。

第1引数にリモートの名称を指定します。デフォルトはoriginです。

第2引数にプッシュするブランチの名称を指定します。デフォルトは現在のブランチです。

プル

クローンしたリポジトリにリモートのコミットをプルする(フェッチしてからマージすることをプルと言います)にはgit pullコマンドを実行します。

第1引数にリモートの名称を指定します。デフォルトはoriginです。

第2引数にプルするブランチの名称を指定します。デフォルトは現在のブランチです。

実演

上でクローンしたリポジトリでプッシュとプルを行ってみます。

まず、textfile.txtを作成し、コミットしてみます。

C:\work\git\project2>echo this is text file. > textfile.txt

C:\work\git\project2>git add .

C:\work\git\project2>git commit --message "add text file."
[master f33e198] add text file.
 1 file changed, 1 insertion(+)
 create mode 100644 textfile.txt

次に、git pushコマンドを実行してプッシュを行ってみます。

C:\work\git\project2>git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 330 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://github.com/takeprofit/project2.git
   708e4aa..f33e198  master -> master

プッシュが正常に行われました。

次に、GitHubのリポジトリでコミットを行います。

その後、git pullコマンドを実行してプルを行ってみます。

C:\work\git\project2>git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/takeprofit/project2
   f33e198..d252ed5  master     -> origin/master
Updating f33e198..d252ed5
Fast-forward
 README.md | 2 ++
 1 file changed, 2 insertions(+)

プルが正常に行われました。

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Git