1. 程式人生 > >iOS - Git 遠程倉庫(分布式版本控制系統)

iOS - Git 遠程倉庫(分布式版本控制系統)

遠程分支 refs don ref 倉庫 sin tps use ssi

前言

  • 遠程倉庫是指托管在因特網或其他網絡中的你的項目的版本庫。你可以有好幾個遠程倉庫,通常有些倉庫對你只讀,有些則可以讀寫。

1、查看遠程倉庫

  • 如果想查看你已經配置的遠程倉庫服務器,可以運行 git remote 命令。它會列出你指定的每一個遠程服務器的簡寫。如果你已經克隆了自己的倉庫,那麽至少應該能看到 origin,這是 Git 給你克隆的倉庫服務器的默認名字。

    $ git remote
    origin
  • 你也可以指定選項 -v,會顯示需要讀寫遠程倉庫使用的 Git 保存的簡寫與其對應的 URL。

    $ git remote -v
    origin  https://github.com/schacon/ticgit (fetch)
    origin  https://github.com/schacon/ticgit (push)
    • 如果你的遠程倉庫不止一個,該命令會將它們全部列出。例如,與幾個協作者合作的,擁有多個遠程倉庫的倉庫看起來像下面這樣。

      $ git remote -v
      bakkdoor  https://github.com/bakkdoor/grit (fetch)
      bakkdoor  https://github.com/bakkdoor/grit (push)
      cho45     https://github.com/cho45/grit (fetch)
      cho45     https://github.com/cho45/grit (push)
      defunkt   https://github.com/defunkt/grit (fetch)
      defunkt   https://github.com/defunkt/grit (push)
      koke      git://github.com/koke/grit.git (fetch)
      koke      git://github.com/koke/grit.git (push)
      origin    [email protected]:mojombo/grit.git (fetch)
      origin    [email protected]:mojombo/grit.git (push)
  • 如果想要查看某一個遠程倉庫的更多信息,可以使用 git remote show [remote-name] 命令。

    # git remote show [remote-name]
    $ git remote show origin
    • 如果想以一個特定的縮寫名運行這個命令,例如 origin,會得到像下面類似的信息。

      $ git remote show origin
      * remote origin
        Fetch URL: https://github.com/schacon/ticgit
        Push  URL: https://github.com/schacon/ticgit
        HEAD branch: master
        Remote branches:
          master                               tracked
          dev-branch                           tracked
        Local branch configured for 'git pull':
          master merges with remote master
        Local ref configured for 'git push':
          master pushes to master (up to date)
    • 它同樣會列出遠程倉庫的 URL 與跟蹤分支的信息。這些信息非常有用,它告訴你正處於 master 分支,並且如果運行 git pull,就會抓取所有的遠程引用,然後將遠程 master 分支合並到本地 master 分支。它也會列出拉取到的所有遠程引用。

    • 如果你是 Git 的重度使用者,那麽還可以通過 git remote show 看到更多的信息。

      $ git remote show origin
      * remote origin
        URL: https://github.com/my-org/complex-project
        Fetch URL: https://github.com/my-org/complex-project
        Push  URL: https://github.com/my-org/complex-project
        HEAD branch: master
        Remote branches:
          master                           tracked
          dev-branch                       tracked
          markdown-strip                   tracked
          issue-43                         new (next fetch will store in remotes/origin)
          issue-45                         new (next fetch will store in remotes/origin)
          refs/remotes/origin/issue-11     stale (use 'git remote prune' to remove)
        Local branches configured for 'git pull':
          dev-branch merges with remote dev-branch
          master     merges with remote master
        Local refs configured for 'git push':
          dev-branch                     pushes to dev-branch                     (up to date)
          markdown-strip                 pushes to markdown-strip                 (up to date)
          master                         pushes to master                         (up to date)
    • 這個命令列出了當你在特定的分支上執行 git push 會自動地推送到哪一個遠程分支。它也同樣地列出了哪些遠程分支不在你的本地,哪些遠程分支已經從服務器上移除了,還有當你執行 git pull 時哪些分支會自動合並。

2、添加遠程倉庫

  • 運行 git remote add [shortname] [url] 添加一個新的遠程 Git 倉庫,同時指定一個你可以輕松引用的簡寫。

    # git remote add [shortname] [url]
    $ git remote add pb https://github.com/paulboone/ticgit
    $ git remote -v
    origin  https://github.com/schacon/ticgit (fetch)
    origin  https://github.com/schacon/ticgit (push)
    pb  https://github.com/paulboone/ticgit (fetch)
    pb  https://github.com/paulboone/ticgit (push)
    • 現在你可以在命令行中使用字符串 pb 來代替整個 URL。例如,如果你想拉取 Paul 的倉庫中有但你沒有的信息,可以運行 git fetch pb

      $ git fetch pb
      remote: Counting objects: 43, done.
      remote: Compressing objects: 100% (36/36), done.
      remote: Total 43 (delta 10), reused 31 (delta 5)
      Unpacking objects: 100% (43/43), done.
      From https://github.com/paulboone/ticgit
       * [new branch]      master     -> pb/master
       * [new branch]      ticgit     -> pb/ticgit
    • 現在 Paul 的 master 分支可以在本地通過 pb/master 訪問到 - 你可以將它合並到自己的某個分支中,或者如果你想要查看它的話,可以檢出一個指向該點的本地分支。

3、從遠程倉庫中抓取

  • 從遠程倉庫中獲得數據,可以執行 git fetch [remote-name]。這個命令會訪問遠程倉庫,從中拉取所有你還沒有的數據。

    # git fetch [remote-name]    
    $ git fetch origin
    • 執行完成後,你將會擁有那個遠程倉庫中所有分支的引用,可以隨時合並或查看。
    • 必須註意 git fetch 命令會將數據拉取到你的本地倉庫,它並不會自動合並或修改你當前的工作,當準備好時你必須手動將其合並入你的工作。
    • 如果你使用 clone 命令克隆了一個倉庫,命令會自動將其添加為遠程倉庫並默認以 “origin” 為簡寫。所以,git fetch origin 會抓取克隆(或上一次抓取)後新推送的所有工作。

4、從遠程倉庫中拉取

  • 如果你有一個分支設置為跟蹤一個遠程分支,可以使用 git pull 命令來自動的抓取然後合並遠程分支到當前分支。

    $ git pull
    • 運行 git pull 通常會從最初克隆的服務器上抓取數據並自動嘗試合並到當前所在的分支。
    • 默認情況下,git clone 命令會自動設置本地 master 分支跟蹤克隆的遠程倉庫的 master 分支(或不管是什麽名字的默認分支)。

5、推送到遠程倉庫

  • 當你想分享你的項目時,必須將其推送到上遊。這個命令很簡單:git push [remote-name] [branch-name]。當你想要將 master 分支推送到 origin 服務器時(再次說明,克隆時通常會自動幫你設置好那兩個名字),那麽運行這個命令就可以將你所做的備份到服務器

    # git push [remote-name] [branch-name]
    $ git push origin master
    • 只有當你有所克隆服務器的寫入權限,並且之前沒有人推送過時,這條命令才能生效。
  • 當你和其他人在同一時間克隆,他們先推送到上遊然後你再推送到上遊,你的推送就會毫無疑問地被拒絕。你必須先將他們的工作拉取下來並將其合並進你的工作後才能推送。

6、遠程倉庫的重命名

  • 如果想要重命名引用的名字可以運行 git remote rename 去修改一個遠程倉庫的簡寫名。

    # git remote rename [old-shortname] [new-shortname]
    $ git remote rename pb paul
    • 例如,想要將 pb 重命名為 paul,可以用 git remote rename 這樣做。

      $ git remote rename pb paul
      $ git remote
      origin
      paul
    • 值得註意的是這同樣也會修改你的遠程分支名字。那些過去引用 pb/master 的現在會引用 paul/master。

7、遠程倉庫的移除

  • 如果因為一些原因想要移除一個遠程倉庫,可以使用 git remote rm

    # git remote rm [shortname]
    $ git remote rm paul
    $ git remote
    origin

iOS - Git 遠程倉庫(分布式版本控制系統)