裸版本库就是不含有工做区的版本库,而咱们日常开发的代码库都是开发版本库,修改工做区,而后进行提交、推送提交等操做。
可使用git init --bare命令建立一个裸版本库。裸版本库通常做为服务器上的版本库。git
引用空间把远程分支版本库中的分支名映射到本地版本库中的分支名。其语法为:
[+]source:dest若是有加号则表示不会在传输过程当中进行正常的快进安全检查。安全
操做 | 源 | 目标 |
---|---|---|
fetch | 抓取的远程引用 | 更新的本地引用 |
push | 推进的本地引用 | 更新的远程引用 |
好比git fetch命令会使用refspec:+refs/heads/:refs/remotes/origin/。其定义在.git/config文件中服务器
git使用URL来定位远程版本库,支持多种url协议,常见的有http、https、git、ssh、file。ssh
clone命令能够把远程的代码库克隆到本地,并在.git/config目录中记录远程版本库的url。.git/config文件以下:ide
[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true [remote "origin"] url = D:/source-code/temp/server fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [branch "develop"] remote = origin merge = refs/heads/develop
注意[remote "origin"] url = D:/source-code/temp/server,其中origin是对url的一个别名,由于一个git库可能对应多个远程代码库(例如使用git remote add命令添加其余远程代码库,git协同模型的子树合并),若是没有这个别名,每次都填写这个长长的url会很麻烦,因此这个别名是必须的,并且clone的时候,别名默认为“origin”。fetch
remote命令用于管理远程版本库url
$git remote add daf_remote http://xxxx/*.git --------添加daf_remote为别名的url,此时会看到.git/config文件变动 $git remote rename <old> <new> -----重命名别名 $git remote remove <name> ------移除某个远程代码库 $git remote -v show ------移除某个远程代码库
pull=fetch+merge。当咱们执行git pull命令实际上会首先执行fetch抓取命令,而后把当前分支和抓取的SHA1合并。
而当咱们执行git pull命令的时候,git是如何知道拉取和合并的呢?spa
当咱们执行git pull origin develop(:develop)的时候,一样和git pull相同,由于具体执行的时候,git fetch会补齐远程仓库和完整的refspaccode
push命令是和fetch命令是一个相反的命令,其refspac通常为refs/heads/${branchNam}:refs/heads/${branchNam}。表示源为本地refs/heads/${branchNam}的引用,目标为远程仓库refs/heads/${branchNam}的引用。orm