Gitのリモート、クローン、プッシュ、プルなど
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(+)
プルが正常に行われました。
