热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

git从零开始实现本地仓库与远程顺畅推拉

  git是一个分布式版本控制系统,本地git仓库和远程仓库之间的传输支持ssh、https等协议。使用https协议缺点:速度慢,每次推送都必须输入⼝令。若使用ssh协议,需要在

  git是一个分布式版本控制系统,本地git仓库和远程仓库之间的传输支持ssh、https等协议。使用https协议缺点:速度慢,每次推送都必须输入⼝令。若使用 ssh 协议,需要在你的github账户添加你的本机上的ssh公钥,之后才可以通过本机推送内容到你的github。

从零开始实现本地仓库与远程顺畅推拉的步骤:

  1. 安装git,不同系统安装方法不同。详见https://git-scm.com/downloads。
  2. 配置用户名和密码

    $ git config --global user.name "John Doe"
    $ git config --global user.email johndoe@example.com

        可以根据情况使用不同的参数配置详见git — config 。不配置用户名和密码,提交时默认使用本机username和hostname。git配置的邮箱与github一致时,显示github用户名和头像。github的contributions统计是按邮箱统计的。

  3. 建立本地计算机与远程github或者gitlab仓库之间的连接

    创建SSH Key

    $ ssh-keygen -t rsa -C "youremail@example.com"
    //参数-C: comment,提供一个新注释,这里的邮箱并木有实际意义

    github账户添加SSH Key

    把用户主目录下,.ssh文件夹中 id_rsa.pub 内容复制到github中,setting/SSH and GPG keys/new SSH key

  4. github或者gitlab上create一个远程库。可以得到一个远程库的地址 :

    git@github.com:(github用户名)/(creage的时候起的仓库名).git。

  5. 然后,本地仓库与远程仓库之间的首次互动,有几种做法:

    第一种:

    $ git clone git@github.com:name/xxx.git
    如果希望在克隆的时候,自己定义要新建的项目目录名称,可以在命令末尾指定新的名字:
    $ git clone git://github.com/schacon/grit.git mygrit

    此之后,我们就可以顺利地使用git pull 和git push了。
    github上删除远程仓库后,报错:Please make sure you have the correct access rights and the repository exists.

    第二种:不使用clone命令,而是先把本地的仓库推送上去。

    首先,

    //初始化本地文件夹为git仓库,文件夹名字和远程的不一定一致
    $ git init
    //添加origin为远程git@github.com:name/xxx.git仓库的别名,体现在.git/config中
    $ git remote add origin git@github.com:name/xxx.git

    然后,几种方法任选其一:

    1.$ git push --set-upstream origin master
    2.$ git push -u origin master
    3.$ git push [remote-name] [branch-name] 把本地分支推送到远程对应分支

    1、2可以顺利地使用git pull 和git push了,体现在.git/config中。经各种验证, 1、2这两个命令作用一致。推送内容并且,Branch ‘master’ set up to track remote branch ‘master’ from ‘origin’。有些地方讲,如果当前分支与多个主机存在追踪关系,则可以使用 -u 参数指定一个默认主机,这样后面就可以不加任何参数使用git push。实验一个分支追踪多个主机没有成功。3只推送内容,而不与远程分支建立关联关系。

  6. 拓展内容

    clone命令会做什么:

        会下载仓库文件夹(包含外层夹),到当前目录,提示你克隆了一个空仓库,包含.git 文件。
        会在.git/config中自动添加origin为远程仓库的别名,以便将来引用。
        会自动创建了本地的 master 分支并关联远程仓库中的 master 分支,体现在.git/config中。

    SSH警告

        当你第一次使用Git的clone或者push命令连接GitHub时,会得到一个警告,这是因为Git使用SSH连接,而SSH连接在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key的指纹信息是否真的来自GitHub的服务器,输入yes回车即可。然后,Git会输出一个警告,告诉你已经把GitHub的Key添加到本机的known_hosts信任列表里了。这个警告只会出现一次,后面的操作就不会有任何警告了。如果你实在担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。

    git pull <远程主机> <远程分支>:<本地分支>

    git push <远程主机> <本地分支>:<远程分支> :

    git push origin 推送当前分支到远程对应分支,如当前分支只有一个追踪分支,主机名可以省略(实验为一个本地分支添加多个追踪分支,没有成功)

    远程仓库的相关操作

    手动添加一个新的远程仓库,并指定一个别名:

    $ git remote add [shortname] [url]:

    查看远程库的信息

    $ git remote 列出远程库的别名
    $ git remote –v (译注:此为 --verbose 的简写)列出远程库的别名以及fetch 和 push 的url地址
    $ git remote show origin 查看某个远程仓库的详细信息,比如要看所克隆的 origin 仓库
    查看.git/config可以看到origin的含义

    远程仓库重命名, 在新版 Git 中修改某个远程仓库在本地的简称:

    $ git remote rename old new

    远程仓库的删除
    碰到远端仓库服务器迁移,或者原来的克隆镜像不再使用,又或者某个参与者不再贡献代码,那么需要移除对应的远端仓库,可以运行 git remote rm 命令,删除origin这个远端的仓库在本地的映射(移除了config中,logs/refs/remotes, 以及 refs/remotes中相关,不会对远程仓库产生作用。)

    $ git remote rm origin


推荐阅读
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 本文探讨了Hive中内部表和外部表的区别及其在HDFS上的路径映射,详细解释了两者的创建、加载及删除操作,并提供了查看表详细信息的方法。通过对比这两种表类型,帮助读者理解如何更好地管理和保护数据。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 构建基于BERT的中文NL2SQL模型:一个简明的基准
    本文探讨了将自然语言转换为SQL语句(NL2SQL)的任务,这是人工智能领域中一项非常实用的研究方向。文章介绍了笔者在公司举办的首届中文NL2SQL挑战赛中的实践,该比赛提供了金融和通用领域的表格数据,并标注了对应的自然语言与SQL语句对,旨在训练准确的NL2SQL模型。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
author-avatar
曾让我心碎的你俺_275
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有