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

  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 <远程主机> <本地分支>:<远程分支> <src>:<dst>

    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    
    原文作者:mayihetu
    原文地址: https://segmentfault.com/a/1190000013760587
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞