热门标签 | 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


推荐阅读
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文深入探讨了Linux系统中网卡绑定(bonding)的七种工作模式。网卡绑定技术通过将多个物理网卡组合成一个逻辑网卡,实现网络冗余、带宽聚合和负载均衡,在生产环境中广泛应用。文章详细介绍了每种模式的特点、适用场景及配置方法。 ... [详细]
  • 本文详细探讨了在Android 8.0设备上使用ChinaCock的TCCBarcodeScanner进行扫码时出现的应用闪退问题,并提供了解决方案。通过调整配置文件,可以有效避免这一问题。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 掌握远程执行Linux脚本和命令的技巧
    本文将详细介绍如何利用Python的Paramiko库实现远程执行Linux脚本和命令,帮助读者快速掌握这一实用技能。通过具体的示例和详尽的解释,让初学者也能轻松上手。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
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社区 版权所有