本節(jié)主要學習一下git遠程tag和branch在本地的存儲表現(xiàn)
http://www.worldhello.net/gotgit/03-git-harmony/030-git-tag.html#git-tag
前一篇討論了git本地的branch 和tag都是怎樣存儲的
這一篇主要是一起來了解一下git remote的branch 和tag在本地是如何存儲的
1技肩,問題發(fā)現(xiàn)
每次使用git fetch 和 git pull orgin master時候,如果想同步下來branch 都是使用git pull origin master,如果是 同步tag的話則是直接使用 git fetch操作遥赚。感覺自己有必要了解一下git fetch和git pull之間的關系几迄。
實際發(fā)現(xiàn)在 .git目錄下
chuangchuang@chuang:~/work/temp/gittest[master*]$ tree .git/
.git/
├── branches
├── COMMIT_EDITMSG
├── config
├── description
├── FETCH_HEAD
├── HEAD
├── hooks
│ ├── applypatch-msg.sample
│ ├── commit-msg.sample
│ ├── post-update.sample
│ ├── pre-applypatch.sample
│ ├── pre-commit.sample
│ ├── prepare-commit-msg.sample
│ ├── pre-push.sample
│ ├── pre-rebase.sample
│ └── update.sample
├── index
├── info
│ └── exclude
├── logs
│ ├── HEAD
│ └── refs
│ ├── heads
│ │ ├── dev
│ │ └── master
│ └── remotes
│ └── origin
│ ├── dev
│ └── master
├── objects
│ ├── 45
│ │ └── 776d6cb67571cfe31656fb1d114e520c9e0ab2
│ ├── 68
│ │ └── d98b1781c29d1df8b4ac7b6d457bccecf9756e
│ ├── a3
│ │ └── c8effc24eeb66de97a66b073c6d62c48fbc9ed
│ ├── c8
│ │ └── ec46b8063b47a12de692106db06822945d4b09
│ ├── e4
│ │ └── 626567ec9ae5a6f3abd77af37c25a85ec4e7f1
│ ├── e6
│ │ └── 9de29bb2d1d6434b8b29ae775ad8c2e48c5391
│ ├── f1
│ │ └── 3f51556efabe074d5b255eabcdd3ec33520c55
│ ├── info
│ └── pack
├── ORIG_HEAD
└── refs
├── heads
│ ├── dev
│ └── master
├── remotes
│ └── origin
│ ├── dev
│ └── master
└── tags
└── v1.0.0
可以看到揍拆,
- 遠程的branch 信息在本地是有單獨的存放地方的 在refs/remotes下面的禁漓。
- tags則是遠程和本地的是共用的新症。
2筑凫,git pull 也是可以拉下來
直接使用git pull 默認是使用的git pull origin ,這樣會把所有的東西都拉下來(包括 branch 和tag ,而且會進行branch的合并)
但是有進行分支跟蹤的設置嫌变,因為沒有進行跟蹤設置的話吨艇,git不知道如何合并,會報錯
chuangchuang@chuang:~/work/temp/gittest[master*]$ git branch --set-upstream-to=origin/master
分支 master 設置為跟蹤來自 origin 的遠程分支 master腾啥。
//設置當前分支跟蹤遠程的 master分支
chuangchuang@chuang:~/work/temp/gittest[dev*]$ git push --set-upstream origin dev
分支 dev 設置為跟蹤來自 origin 的遠程分支 dev东涡。
Everything up-to-date
2.1 在遠端的 master分支創(chuàng)建 master.txt dev分支創(chuàng)建dev.txt
2.2 在本地執(zhí)行git pull
chuangchuang@chuang:~/work/temp/gittest[master*]$ git pull
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 0
展開對象中: 100% (6/6), 完成.
來自 github.com:chenchuangc/test_git
45776d6..3bc8e4a master -> origin/master //拉到了本地的遠程分支保存地
45776d6..a027208 dev -> origin/dev //同上
更新 45776d6..3bc8e4a
Fast-forward
master.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 master.txt
chuangchuang@chuang:~/work/temp/gittest[master*]$ ll
總用量 20
drwxrwxr-x 3 chuangchuang chuangchuang 4096 11月 13 14:09 ./
drwxrwxr-x 6 chuangchuang chuangchuang 4096 11月 13 10:45 ../
-rw-rw-r-- 1 chuangchuang chuangchuang 37 11月 11 21:15 aa.txt
drwxrwxr-x 8 chuangchuang chuangchuang 4096 11月 13 14:09 .git/
-rw-rw-r-- 1 chuangchuang chuangchuang 19 11月 13 14:09 master.txt
可以看到在master分支上面已經(jīng)通了
再看看dev分支
chuangchuang@chuang:~/work/temp/gittest[master*]$ git checkout dev
切換到分支 'dev'
您的分支落后 'origin/dev' 共 1 個提交,并且可以快進倘待。
(使用 "git pull" 來更新您的本地分支)
chuangchuang@chuang:~/work/temp/gittest[dev*]$ ll
總用量 16
drwxrwxr-x 3 chuangchuang chuangchuang 4096 11月 13 14:09 ./
drwxrwxr-x 6 chuangchuang chuangchuang 4096 11月 13 10:45 ../
-rw-rw-r-- 1 chuangchuang chuangchuang 37 11月 11 21:15 aa.txt
drwxrwxr-x 8 chuangchuang chuangchuang 4096 11月 13 14:09 .git/
chuangchuang@chuang:~/work/temp/gittest[dev*]$ git merge origin/dev
更新 45776d6..a027208
Fast-forward
dev.txt | 1 +
1 file changed, 1 insertion(+)
create mode 100644 dev.txt
chuangchuang@chuang:~/work/temp/gittest[dev*]$ ll
總用量 20
drwxrwxr-x 3 chuangchuang chuangchuang 4096 11月 13 14:09 ./
drwxrwxr-x 6 chuangchuang chuangchuang 4096 11月 13 10:45 ../
-rw-rw-r-- 1 chuangchuang chuangchuang 37 11月 11 21:15 aa.txt
-rw-rw-r-- 1 chuangchuang chuangchuang 27 11月 13 14:09 dev.txt
drwxrwxr-x 8 chuangchuang chuangchuang 4096 11月 13 14:09 .git/
這里可以看到疮跑,切換到dev分支以后并沒有dev.txt但是執(zhí)行完 merge origin/dev以后就可以看到了,應該是合并了本地的遠程更新凸舵。
只有一個機器祖娘,暫時沒有測試tag,按理tag是直接有的啊奄,不用再merge了
3渐苏,總結
所以執(zhí)行git fetch 的時候是能夠將遠程的所有東西都拉下來的,但是 branch相關的信息在本地是單獨存放在一個地方的菇夸,不影響本地的分支琼富,
使用git branch 是看不到的;
但是tags則是共用的庄新,只要拉下來鞠眉,在本地倉庫使用git tag就可以看到