《Pro Git 2》学习笔记_Chapter 10_remote & packfiles&refspec

Remote

通常情况下,在.git/refs/下没有remote夹,它是用来记录远程仓库的分枝信息的,只要远程仓库被添加并连接到本地仓库时,才会出现。

[root@localhost temp]# tree .git/refs
.git/refs
├── heads
│   └── master
└── tags

2 directories, 1 file


经过与远程仓库的同步,remote会出现,并在其下存放远程分枝的信息:

git remote add origin [email protected]:wangzhizhou2014GitHub/Joker.git

git pull


.git/refs
├── heads
├── remotes
│   └── origin
│       ├── dev
│       └── master
└── tags

4 directories, 2 files

并且这此远程的分枝信息是只读的,HEAD不会指向远程分枝上,这时是处于HEAD脱离状态


Packfiles

packfiles可以用来节省存储空间并使远程传送时更加快速,Git会不定期的对.git/objects/下的对象进行压缩以减少存储占用,但你出可以自己手动进行,

方法是运行:git gc命令

使用了上面的命令后,.git/objects/下面的对象会被压缩成两个文件,而原来的对象都被压缩在一个.pack文件中了,.idx文件上记录着每个文件在.pack文件中的偏移位置以及大小等相关信息:

.git/objects
├── d6
│   └── 70460b4b4aece5915caf5c68d12f560a9fe3e4
├── info
│   └── packs
└── pack
    ├── pack-ae209eaaddfb7080f26609b58d93cdd1f90502d9.idx
    └── pack-ae209eaaddfb7080f26609b58d93cdd1f90502d9.pack


查看.idx文件内容的方法:git verify-pack -v .git/objects/pack/pack-ae209eaaddfb7080f26609b58d93cdd1f90502d9.idx


refspec

我们把远程仓库的分枝映射到了本地仓库的引用目录下,即.git/refs/remote/origin

当我们输入:git remote add origin [email protected]:wangzhizhou2014GitHub/Joker.git时,会在.git/config文件中添加下面内容:

[remote "origin"]
        url = [email protected]:wangzhizhou2014GitHub/Joker.git

        fetch = +refs/heads/*:refs/remotes/origin/*

        push=refs/heads/master:refs/heads/master


refspec的格式是:可选的“+”,跟<src>:<dst>,<src>是远程仓库中的引用模式,<dst>是本地仓库的引用模式,"+"表示覆盖(overwrite)

.git/config 文件中的内容定义了git fetch 各 git push 命令的缺省值。

例如:git push origin :dev 就可以删除远程仓库的master分枝,因为本地的refspec为空。


你可能感兴趣的:(git,remote,refspec,packfiles)