🏹
Gitコマンド入門::Gitオブジェクト(Refspec)第六十回
みなさんこんにちは! 今回も引き続き、本家サイトになぞって進めて行きます!
本家サイトから抜粋:
refspecの書式は<src>:<dst>
で、その前にオプションとして + を指定できます。+ は、fast-forwardでない場合でも、参照を更新するようGitに指示しています。
とまあ~、このようにサイトに書いてありますけど、早速、学習して行きましょう! ちなみに、本家サイトでは、git fetch から初めていますが、私は、git push を先に、git fetch は、次回の第六十一回で学習して行きま~す!(笑)
前回、第五十九回の記事はこちらから!
git本家本元の情報はこちらから!
今回からの課題は、ここを参考にしています!
10.5 Gitの内側 - Refspec
まずは、環境構築から!
私のリポジトリーは、こちらからどうぞ! 第五十八回と同じです。
$ git clone https://github.com/shiozumi-makoto/20210319.git 20210324
$ cd 20210324
$ git branch -avv
* master 7ceaea0 [origin/master] new.txt add
remotes/origin/HEAD -> origin/master
remotes/origin/master 7ceaea0 new.txt add
<src>:<dst>
形式!
Refspecは、$ cat .git/config
[remote "origin"]
url = https://github.com/shiozumi-makoto/20210319.git
fetch = +refs/heads/*:refs/remotes/origin/*
// ここ、fetch=以下の部分ですね。↑↑↑↑
//
// src => +refs/heads/*
// dst => refs/remotes/origin/*
- src は、GitHubにあるリモートリポジトリのヘッダーですね。
- dst は、ローカルにある、リモート追跡ブランチですね。
-
heads/*
,origin/*
*アスタリスクとなっているので、複数指定となっています。
リモートリポジトリのmasterから、リモート追跡ブランチorigin/testを作成してみましょう!
$ git fetch origin master:refs/remotes/origin/test
* [new branch] master -> origin/test
$ git branch -avv
* master 7ceaea0 [origin/master] new.txt add
remotes/origin/HEAD -> origin/master
remotes/origin/master 7ceaea0 new.txt add
remotes/origin/test 7ceaea0 new.txt add
リモート追跡ブランチorigin/testから、ローカルtestブランチ作成
$ git checkout -b test origin/test
Branch 'test' set up to track remote branch 'test' from 'origin'.
Switched to a new branch 'test'
$ git branch -avv
master 7ceaea0 [origin/master] new.txt add
* test 7ceaea0 [origin/test] new.txt add
remotes/origin/HEAD -> origin/master
remotes/origin/master 7ceaea0 new.txt add
remotes/origin/test 7ceaea0 new.txt add
ローカルtestブランチを、GitHubのリモートtestブランチ名で、push しま~す!
$ git push origin test:test
// 中略~
To https://github.com/shiozumi-makoto/20210319.git
* [new branch] test -> test
$ git branch -avv
master 7ceaea0 [origin/master] new.txt add
* test 7ceaea0 [origin/test] new.txt add
remotes/origin/HEAD -> origin/master
remotes/origin/master 7ceaea0 new.txt add
remotes/origin/test 7ceaea0 new.txt add
ローカルtestブランチを、GitHubのリモートリポジトリに、リモートtest_1ブランチ名で、push しま~す!
$ git push origin test:test_1
// 中略~
To https://github.com/shiozumi-makoto/20210319.git
* [new branch] test -> test_1
$ git branch -avv
master 7ceaea0 [origin/master] new.txt add
* test 7ceaea0 [origin/test] new.txt add
remotes/origin/HEAD -> origin/master
remotes/origin/master 7ceaea0 new.txt add
remotes/origin/test 7ceaea0 new.txt add
remotes/origin/test_1 7ceaea0 new.txt add
// リモート追跡ブランチ test_1 も追加されましたね!
<src>:<dst>
形式は、これで分かりましたね!
GitHubの画面でもこのように、testブランチ、test_1ブランチが作成されています!
<src>:<dst>
を指定せずに省略して、pushしたときの動作を設定します。
git push origin 通常は、git push origin test:refs/heads/test_1
のように、<src>:<dst>
を指定しますが、省略形コマンド git push origin
でも同じ動作にするための設定です。
$ git config remote.origin.push "+refs/heads/test:refs/heads/test_1"
// cat コマンドで確認
$ cat .git/config
[remote "origin"]
url = https://github.com/shiozumi-makoto/20210319.git
fetch = +refs/heads/*:refs/remotes/origin/*
push = +refs/heads/test:refs/heads/test_1
// config コマンドで確認!
$ git config -l | grep remote.origin.push
remote.origin.push=+refs/heads/test:refs/heads/test_1
git push origin ローカルtestブランチを、リモートtest_1ブランチへ、pushできるか、実際にテストしてみます。
// ファイルをviで開いて、任意のテキスト文字を追加!
$ vi README.md
// 毎度のadd,commit
$ git add README.md
$ git commit -m "push"
[test e09c3ef] push
// ローカルtestブランチのハッシュ値は、e09c3ef ですね!
// いよいよ、<src>:<dst> を省略して、push
$ git push origin
// 中略~
$ git branch -avv
* test e09c3ef [origin/test_1] push
remotes/origin/test_1 e09c3ef push
// リモート追跡ブランチorigin/test_1のハッシュ値も、e09c3ef ですね!
GitHubのリモートtest_1ブランチのハッシュ値を確認!
git config --unset remote.origin.push このコマンドで設定を削除し、掃除して終了します!
$ git config --unset remote.origin.push
// cat コマンドで確認
$ cat .git/config
[remote "origin"]
url = https://github.com/shiozumi-makoto/20210319.git
fetch = +refs/heads/*:refs/remotes/origin/*
// push の設定が削除されました!
git push origin :test_1
<src>:<dst>
形式で、src を省略すると、リモートブランチの削除になります。
// リモートtest_1ブランチも削除してみましょう!
$ git push origin :test_1
// 中略~
- [deleted] test_1
// これで、完了!
まとめ
Refspec は、<src>:<dst>
で指定する。そして省略時のデフォルト設定は、remote.origin.push に記述すれば、そちらを優先してくれます。まあ~、それだけの事ですが、普段、git pushの使用頻度が高い場合、間違えて、ローカルmasterブランチ を、リモートmasterブランチにプッシュしてしまうような操作ミスを防ぐためには、とても有効かと思います。まあ~それも、ほぼ無いと思いますが、、、(^▽^;)
それでは、今回はここまで、お疲れ様でした!
Discussion