前言
- 远程仓库是指托管在因特网或其他网络中的你的项目的版本库。你可以有好几个远程仓库,通常有些仓库对你只读,有些则可以读写。
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