设为首页 收藏本站
查看: 807|回复: 0

[经验分享] git命令行(3)之远程版本库

[复制链接]

尚未签到

发表于 2018-9-16 11:17:29 | 显示全部楼层 |阅读模式
一、远程版本库相关概念

1.裸版本库和开发版本库
  裸版本库就是不含有工作区的版本库,而我们平常开发的代码库都是开发版本库,修改工作区,然后进行提交、推送提交等操作。
  可以使用git init --bare命令创建一个裸版本库。裸版本库一般作为服务器上的版本库。

2.refspec
  引用空间把远程分支版本库中的分支名映射到本地版本库中的分支名。其语法为:
  [+]source:dest如果有加号则表示不会在传输过程中进行正常的快进安全检查。

操作

目标
fetch
抓取的远程引用
更新的本地引用
push
推动的本地引用
更新的远程引用  比如git fetch命令会使用refspec:+refs/heads/:refs/remotes/origin/。其定义在.git/config文件中

3.远程版本库支持的协议
  git使用URL来定位远程版本库,支持多种url协议,常见的有http、https、git、ssh、file。

二、clone和remote命令

1.clone
  clone命令可以把远程的代码库克隆到本地,并在.git/config目录中记录远程版本库的url。.git/config文件如下:
  

[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”。

2.remote命令
  remote命令用于管理远程版本库
  

$git remote add daf_remote http://xxxx/*.git            --------添加daf_remote为别名的url,此时会看到.git/config文件变更  
$git remote rename                        -----重命名别名
  
$git remote remove          ------移除某个远程代码库
  
$git remote -v show         ------移除某个远程代码库
  

三、fetch和pull命令
  pull=fetch+merge。当我们执行git pull命令实际上会首先执行fetch抓取命令,然后把当前分支和抓取的SHA1合并。
  而当我们执行git pull命令的时候,git是如何知道拉取和合并的呢?




    • git pull命令的时候,git首先会查找远程库的url的别名,此时我们没有输入别名,那么git默认使用"origin"别名,此时等价于git pull origin.



    • 执行fetch命令,fetch命令要求refspec来获得抓取的范围。因为我们没有输入,那么git使用.git/config文件中的remote..fetch属性的值,一般是+refs/heads/:refs/remotes/origin/。那么这个ref表示抓取远程库上所有的以ref/heads/开头的引用,映射到本地的refs/remotes/origin开头的引用。以其中的master为例refs/heads/master:refs/remotes/origin/master,那么抓取的时候会把远程库上的refs/heads/master(记住远程库上的.git库同样和本地都有refs/heads/master文件)对应的SHA1值同步到本地仓库的refs/remotes/origin/master的文件中,并把其中差异的git对象(本地是a/b/c提交,而远程是a/b/c/d/e提交,那么差异的提交就是d/e和对应的git对象)从远程库下载到本地的对象库(.git/objects目录)。如果有多个分支(maste、develop、feature1)会循环执行同步SHA1和下载git对象内容。



    • 执行merge命令,把fetch到的远程版本(即refs/remotes/origin/master文件的SHA1)合并到当前分支  因此git pull=git fetch origin +refs/heads/:refs/remotes/origin/+git merge refs/remotes/origin/${当前分支}


  当我们执行git pull origin develop(:develop)的时候,同样和git pull相同,因为具体执行的时候,git fetch会补齐远程仓库和完整的refspac

四、git push
  push命令是和fetch命令是一个相反的命令,其refspac一般为refs/heads/${branchNam}:refs/heads/${branchNam}。表示源为本地refs/heads/${branchNam}的引用,目标为远程仓库refs/heads/${branchNam}的引用。


  • 当我们执行git push的时候,其等价于git push origin refs/heads/${branchNam}:refs/heads/${branchNam}。也就是默认情况下只推     送本地分支,而不是所有的分支。
  • 可以使用git push origin refs/heads/:refs/heads/推送本地所有的分支变更。
  • git push origin :${branchNam}表示删除某个分支



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-584481-1-1.html 上篇帖子: Git基本操作用法 下篇帖子: Git/Gitlab 基本操作--抓取、提交、库的迁移/备份及回收/重命名
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表