🏹

Gitコマンド入門::Gitオブジェクト(update-ref,remote)第五十八回

2021/03/23に公開

みなさんこんにちは! 今回もGit本家のサイトを参考にして進めていきます。そして今回はリモートです。リモート追跡ブランチとして、ここまでも取り上げ来ましたね。そして、いつもの事ですが、中身は、只のコミットのハッシュ値です。それでは、早速、試して行きましょう!

前回、第五十七回の記事はこちらから!

https://zenn.dev/shiozumi/articles/fa5f83189514ce

git本家本元の情報はこちらから!

https://git-scm.com/book/ja/v2

今日の課題も前回同様、ここを参考にしています!

https://git-scm.com/book/ja/v2/Gitの内側-Gitの参照

10.3 Gitの内側 - Gitの参照

git clone で取得!

環境が無い方は、こちらから、clone してください!
git clone https://github.com/shiozumi-makoto/20210319.git <任意のフォルダ名>

$ git clone https://github.com/shiozumi-makoto/20210319.git test0323

cd test0323
// フォルダ名、test0323 で作成して移動!

$ ls -a
.  ..  .git  bak  new.txt  test.txt
// ファイルは、このような状態ですね。

$ git branch -avv
  * master                1e3f489 [origin/master] third commit
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master 1e3f489 third commit

// リモート追跡ブランチ origin/masterがあります。
// remotes/origin/HEAD ファイルがあり、同じく、origin/master を指しています。

$ cat .git/refs/remotes/origin/HEAD
ref: refs/remotes/origin/master
// ファイルの中身も確認して置きます!

$ cat .git/refs/remotes/origin/master
cat: .git/refs/remotes/origin/master: そのようなファイルやディレクトリはありません
//  あちゃ~、エラーになりました。ファイルが無いようです。

$ ls .git/refs/remotes/origin/
HEAD
// HEADファイルのみで、master がありませんね。

git push -u origin master

とりいそぎ、new.txt を編集して、add,commit,pushしてみます。

$ vi new.txt
// ファイルを追加編集して、Esc + wq

$ git add new.txt
$ git commit -m "new.txt add"
[master 7ceaea0] new.txt add
 1 file changed, 1 insertion(+), 1 deletion(-)
// add, commit 

7ceaea0 (HEAD -> master, origin/master, origin/HEAD) new.txt add
1e3f489 third commit
514ff38 second commit
8cab88d first commit

// そして、GitHubのリモートリポジトリーへ、push
$ git push -u origin master

To https://github.com/shiozumi-makoto/20210319.git
   1e3f489..7ceaea0  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

$ git branch -avv
* master                7ceaea0 [origin/master] new.txt add
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master 7ceaea0 new.txt add

$ cat .git/refs/remotes/origin/master
7ceaea00d2240e3dc83be5c44cb190615d4b5114
// 今度は、無事にリモート追跡ブランチが作成されました!

git remote add TEST <リポジトリ名>

$ git remote add TEST https://github.com/shiozumi-makoto/20210323.git
// このURLは、みなさんのGitHubのアドレスになりますよ!

$ git remote -v
TEST    https://github.com/shiozumi-makoto/20210323.git (fetch)
TEST    https://github.com/shiozumi-makoto/20210323.git (push)
origin  https://github.com/shiozumi-makoto/20210319.git (fetch)
origin  https://github.com/shiozumi-makoto/20210319.git (push)
// TEST エイリアス名で、新しいリポジトリが追加されました!

https://github.com/shiozumi-makoto/20210323.git この部分のURLは、各自、みなさんのGitHubで作成した、リポジトリ名になりますね! 私も、20210323 のリポジトリ名で、追加してみました。

git push -u TEST master

先ほど追加した、TESTに対して、push してください!

$ git push -u TEST master

// 中略~

To https://github.com/shiozumi-makoto/20210323.git
 * [new branch]      master -> master
Branch 'master' set up to track remote branch 'master' from 'TEST'.

$ git branch -avv
* master                7ceaea0 [TEST/master] new.txt add
  remotes/TEST/master   7ceaea0 new.txt add
  remotes/origin/HEAD   -> origin/master
  remotes/origin/master 7ceaea0 new.txt add
  
// remotes/TEST/master リモート追跡ブランチが作成されました。

cat .git/refs/remotes/TEST/master
7ceaea00d2240e3dc83be5c44cb190615d4b5114
// これで、ハッシュ値も合っていますね!

一度、git push -u オプションを着ければ、リモート追跡ブランチを自動で作成してくれることは、以前にも学習していましたね。

今回のまとめ

これで、.git/refs フォルダーの中身については、一通り学習が済みましたね。heads,tags,remotes の3つのフォルダーの中に、ブランチ名でファイルが作成され、その中身は、コミットのハッシュ値となります。いままで、ブランチやタグという存在感が、あまりにも大きかったのですけど、ただの誇大妄想でしたね。中身は、只のハッシュ値です。それこそ、linuxコマンドのcatでも作成できる代物でした~(^▽^;)

それでは、今回はここまで、お疲れ様でした!

https://zenn.dev/shiozumi/articles/c6a4b1553ac075
https://twitter.com/esmile2013

Discussion