精通git中文版 (连载七)

3.5 与远端一起工作(Working with Remotes)

  为了能够在任意Git项目上进行协作,你需要知道怎么管理你的远端库。远端库是你项目的一个版本,它存储在Internet或网络的某处。你可以有几个这样的库,它们的每一个对你来说或者是只读的,或者是读写的。与其它人的协作涉及到了如何管理这些远端库以及当你需要共享工作时从中上载和下载(pushing and pulling)数据。管理远端库包括知道怎么增加远端库,移除一个不再有效的远端库,管理各种远端分支以及定义它们是否被跟踪等等。在本节中,我们将讲解远端管理技巧。

  3.5.1 显示你的远端(Showing Your Remotes)

  为了查看你已经配置了哪些远端服务器,你可以运行git remote命令。它列出你已经指定的每个远端句柄的简短的名称。如果你已经clone了你的库,你应当至少会看到origin—这是一个缺省的名字Git用来表示你从这个服务器上clone了库:

  $ git clone git://github.com/schacon/ticgit.git

  Initialized empty Git repository in /private/tmp/ticgit/.git/

  remote: Counting objects: 595, done.

  remote: Compressing objects: 100% (269/269), done.

  remote: Total 595 (delta 255), reused 589 (delta 253)

  Receiving objects: 100% (595/595), 73.31 KiB | 1 KiB/s, done.

  Resolving deltas: 100% (255/255), done.

  $ cd ticgit

  $ git remote

  origin

  你也可以指定-v参数,它显示出你的URL --Git存储的这个简短名称的扩展。

  $ git remote -v

  origin git://github.com/schacon/ticgit.git

  如果你有多个远端,这个命令会列出所有这些远端来。例如,我的grit库看起来是这样的:

  $ cd grit

  $ git remote -v

  bakkdoor git://github.com/bakkdoor/grit.git

  cho45 git://github.com/cho45/grit.git

  defunkt git://github.com/defunkt/grit.git

  koke git://github.com/koke/grit.git

  origin git@github.com:mojombo/grit.git

  这意味者我们可以相当容易的从任意这些用户哪里下载(pull)他们的贡献。但请注意仅只origin远端是一个sshURL,因此,它是唯一一个我可以上载的库(push)(我们将在第4章讲解为什么。)


  3.5.2 增加远端库(Adding Remote Repositories)

  在之前的章节中,我们已经提及并给出了一些增加远端库的例子,但此处将会更清楚地给出怎么做。为了简单地增加一个远端Git库到短名称列表中以便你的参考,运行git remote add [shortname] [url]:

  $ git remote

  origin

  $ git remote add pb git://github.com/paulboone/ticgit.git

  $ git remote -v

  origin git://github.com/schacon/ticgit.git

  pb git://github.com/paulboone/ticgit.git

  现在,你可以在命令行中使用串pb来代替整个的URL。例如,如果你想获取所有的Paul已经有的但你的库中还没有的信息,你可以运行 git fetch pb:

  $ git fetch pb

  remote: Counting objects: 58, done.

  remote: Compressing objects: 100% (41/41), done.

  remote: Total 44 (delta 24), reused 1 (delta 0)

  Unpacking objects: 100% (44/44), done.

  From git://github.com/paulboone/ticgit

  * [new branch] master -> pb/master

  * [new branch] ticgit -> pb/ticgit

  Paulmaster分支在本地可以以pb/master来存取--你可以合并它到其中任何一个你的分支中,此时,如果你想检视它,你可以检出一个本地分支。

  

  3.5.3 从你的远端获取和下载(Fetching and Pulling from Your Remotes)

  就象你刚看到的,为了从远端获得数据,你可以运行:

  $ git fetch [remote-name]

  这个命令到远端项目中并从该远端项目中下载你还没有的数据。在你这样做了以后,你应该有了该远端所有分支的索引,这样你可以在任何时间合并或者检视它们(我们将在第3章更详细地介绍什么是分支以及怎么使用它们。)

  如果你clone了一个库,该命令自动增加一个命名为origin的远端库。因此,git fetch origin将获取任何自从你clone(或最后fetch)后被上载到该服务器上的新的工作。必需注意fetch命令下载数据到你的本地库中--它并不自动的与你的任何工作合并,也不修改任何你现在正在进行的工作。当你方便的时候,你需要手工的合并这些工作到你的工作中。

  如果你已经创建了一个分支来跟踪一个远端分支(关于更多的信息,请查看第3),你可以使用git pull 命令来自动的获取并合并一个远端分支到你的当前分支中。这可能是一个更简单方便的工作方法。缺省情况下,git clone命令自动创建一个你本地的master分支并跟踪远端服务器上的master分支(假设远端具备一个master分支)。运行git pull通常会从你最初clone的服务器上获取数据并试图自动地合并它到你当前工作的代码中。

  

  3.5.4 上载回你的远端(Pushing to Your Remotes)

  当你有一些东西想共享给你的项目时,你需要把它上载到上一个服务器流中。这个命令非常简单:git push [remote-name] [branch-name]. 如果你想上载你的master分支到你的origin服务器(重申一遍,clone命令自动地创建了这两个名字),那么你可以运行以下命令返回你的工作到服务器上:

  $ git push origin master

  这个命令只对你clone来的那个server工作,且你必需具备写的权限,同时没有别人上载过东西。如果你和另外一个人同时clone了,且他上传了工作然后你再上传,你的上传将会被拒绝。你需要先下载他们的工作并在上传之前合并到你的工作中。关于更多上传到远端服务器上的信息,请查看第3章。


  3.5.5 检查远端(Inspecting a Remote)

  如果你想看到更多的关于一个特定远端的信息,你可以使用git remote show [remote-name] 命令。如果你运行这个命令附带了一个特定的短名称诸如origin,你会看到如下输出:

  $ git remote show origin

  * remote origin

  URL: git://github.com/schacon/ticgit.git

  Remote branch merged with 'git pull' while on branch master

  master

  Tracked remote branches

  master

  ticgit

  它列出了远端库的URL以及跟踪的分支信息。这个命令有用地告诉你你处于master分支上,你运行了git pull命令,它将会在它获取所有的远端参考后自动地合并进远端的master分支中。它也列出了它下载的所有远端参考。

  这是一个简单的你可能会遇到的一个示例。当随着你更深入地使用Git,你可能会看到git remote show显示的更多信息:

  $ git remote show origin

  * remote origin

  URL: git@github.com:defunkt/github.git

  Remote branch merged with 'git pull' while on branch issues

  issues

  Remote branch merged with 'git pull' while on branch master

  master

  New remote branches (next fetch will store in remotes/origin)

  caching

  Stale tracking branches (use 'git remote prune')

  libwalker

  walker2

  Tracked remote branches

  acl

  apiv2

  dashboard2

  issues

  master

  postgres

  Local branch pushed with 'git push'

  master:master

  这个命令告诉你当你在特定的分支上运行git push时,哪个分支会被自动的上传。它也告诉你服务器上的哪个远端分支你还没有,哪个你有的远端分支已经被从服务器上移除了,当你运行git pull时,哪些分支会被自动的合并。

  

  3.5.6 移除及改名远端(Removing and Renaming Remotes)

  如果你想改名一个远端,在较新版本的git中,你可以运行 git remote rename来变更一个远端的短名称。例如,如果你想把pb改为paul,你可以用git remote rename来实现:

  $ git remote rename pb paul

  $ git remote

  origin

  paul

  值得一提的是这也会改变你的远端分支的名称。过去用pb/master作为参考的分支现在是paul/master

  如果你想移除一个参考,例如你已经移除了服务器或者不再使用一个特定的镜像了,或者可能一个贡献者不再贡献了等等;你可以使用git remote rm :

  $ git remote rm paul

  $ git remote

Origin

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值