git-從零開始實現本地倉庫與遠程順暢推拉

  git是一個分佈式版本控制系統,本地git倉庫和遠程倉庫之間的傳輸支持ssh、https等協議。使用https協議缺點:速度慢,每次推送都必須輸入⼝令。若使用 ssh 協議,須要在你的github帳戶添加你的本機上的ssh公鑰,以後才能夠經過本機推送內容到你的github。javascript

從零開始實現本地倉庫與遠程順暢推拉的步驟:


  1. 安裝git,不一樣系統安裝方法不一樣。詳見https://git-scm.com/downloads
  2. 配置用戶名和密碼java

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

        能夠根據狀況使用不一樣的參數配置詳見git -- config 。不配置用戶名和密碼,提交時默認使用本機username和hostname。git配置的郵箱與github一致時,顯示github用戶名和頭像。github的contributions統計是按郵箱統計的。git

  3. 創建本地計算機與遠程github或者gitlab倉庫之間的鏈接github

    建立SSH Keysegmentfault

    $ 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一個遠程庫。能夠獲得一個遠程庫的地址 :ssh

    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.gitlab

    第二種:不使用clone命令,而是先把本地的倉庫推送上去。

    首先,fetch

    //初始化本地文件夾爲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]  把本地分支推送到遠程對應分支

    一、2能夠順利地使用git pull 和git push了,體如今.git/config中。經各類驗證, 一、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
相關文章
相關標籤/搜索