文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

git命令行(3)之远程版本库

2023-01-31 06:13

关注

一、远程版本库相关概念

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 <old> <new>                      -----重命名别名
$git remote remove <name>         ------移除某个远程代码库
$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.<rep. alias>.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}表示删除某个分支
阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯