关于git相关的学习-4

2016-06-29 | 阅读

查看远程仓库

远程仓库指托管在服务器上的版本库,用于多人协同开发.管理远程仓库需要了解如何添加远程仓库,移除仓库,和管理不同的分支,并定义它们十分被跟踪等等.

通过git remote命令,来查看远程仓库,会列出当前仓库指定的每一个远程仓库的简写.一般会输出origin,表示当前克隆的仓库服务器的默认名字.

使用-v选项,以显示远程仓库对应的URL:

 _posts git:(master) ✗ git remote -v
origin	https://github.com/CodingForMoney/CodingForMoney.github.io.git (fetch)
origin	https://github.com/CodingForMoney/CodingForMoney.github.io.git (push)

可以发现,服务器分两种,一个是fetch,一个是push,分别用来下载数据和提交数据.

添加远程仓库

使用git remote add <shortname> <url> 来添加远程仓库.

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

shortname表示对仓库的简写.可以使用shortname来替代整个URL使用,如:

$ 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

从远程仓库中抓取与拉取

使用git fetch [remote-name]来从远程仓库获得数据.执行完成后,将获得对应远程仓库所有分支的引用,可以随时合并或查看.

如果使用clone命令克隆一个仓库,命令会自动为其添加远程仓库并默认命名为origin的简写.必须注意的是git fetch命令将数据拉取到本地仓库,并不会自动合并或修改当前的工作区域.需要手动将其与工作区域合并.

使用git pull命令会自动跟踪的远程分支,然后合并远程分支到当前分支上.默认情况下,git clone命令会自动设置本地master分支跟踪克隆远程仓库的master分支.所以执行git pull就可以将最初克隆的服务器上抓取数据并自动尝试合并到当前分支.

推送到远程仓库

使用 git push [remote-name] [branch-name],将本地的分支推送到远程的服务器中:

$ git push origin master

将本地的master分支,推送到远程的origin仓库中.

只有当本地拥有克隆服务器的写入权限,且之前没有人推送过时,这条命令才能提交生效.所以多人协作时,需要先将远程仓库的最新数据拉下来,与本地工作区合并后,再执行该条命令,将工作推送到服务器中.

查看远程仓库信息

使用 git remote show [remote-name]命令,来查看远程仓库的更多信息,如 :

➜  _posts git:(master) ✗ git remote show  origin
* remote origin
  Fetch URL: https://github.com/CodingForMoney/CodingForMoney.github.io.git
  Push  URL: https://github.com/CodingForMoney/CodingForMoney.github.io.git
  HEAD branch: master
  Remote branch:
    master 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分支与远程的master分支绑定,使用git pull就会自动拉取远程originmaster分支,而使用git push就会推送到远程originmaster分支.

远程仓库的移除与重命名

如果需要重命名,使用git remote rename命令去修改一个远程仓库的简写:

$ git remote rename pb paul
$ git remote
origin
paul

通过git remote rm命令来从本地删除一个远程仓库的联系:

git remote rm paul

标签处理

与其他版本控制系统一样,git可以给历史的某一个提交打上标签.

通过git tag列出所有标签:

$ git tag
v0.1
v1.3

列出标签会以字母顺序排列,但是顺序并不重要.

标签分为两种 : 轻量标签lightweight 和附注标签annotated.

lightweight只是一个特定提交的引用,是一个不会改变的分支.

annotated是储存在git数据库中的一个完整对象,是可以校验的.

附注标签

git中创建一个附注标签是很简单的,通过tag命令的-a选项:

git tag -a v1.4 -m 'my version 1.4'

-m选项指定了一条会储存在标签中得信息,跟commit一样,必须要指定这样一条说明.

通过git show命令可以查看标签信息和对应的提交信息:

$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date:   Sat May 3 20:19:12 2014 -0700

my version 1.4

commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

轻量标签

轻量标签实际上是将提交校验和 储存到一个文件中,并没有保存任何信息.所以不需要-a-m选项,只需要提供标签的名字:

git tag v1.5

这是执行git show,不会看到额外的标签信息,值显示提交信息:

git show v1.5
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date:   Mon Mar 17 21:52:11 2008 -0700

    changed the version number

对之前的提交打标签

对之前的提交打标签,需要在命令的末尾提交校验和(或部分校验和). 如当前的log为 :

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme

打标签的操作为 :

git tag -a v1.2 9fceb02

共享标签

默认情况下,git push命令式不会传送标签到远程服务器上得.在创建完标签后,需要显示推送标签到服务器上,通过命令git push origin [tagname]

如果需要一次性推送很多标签,也可以使用带有--tags选项的git push命令,即git push origin --tags命令会将所有不在远程仓库服务器上的标签全部传送过去.

检出标签

git中,并不能真正的检出标签,因为标签不是分支,不能来回移动和随意更新.

可以通过命令 git checkout -b [branchname] [tagname]在特定标签上创建一个新的分支.这样可以在分支上对tag内容继续修改.但是分支上最新的内容就不是和tag标签绑定的了.

通过命令git checkout [tagname],可以切换到tag上.

git alias

通过简写来提高操作速度.在git config中,可以轻松的为每个命令设置别名,如:

$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

即设置后,可以输入 git ci来替代git commit命令.这个设置是相当灵活的,如对于解决取消暂存文件的操作的易用性,设置 :

git config --global alias.unstage 'reset HEAD --'

会使以下两个命令等价

$ git unstage fileA
$ git reset HEAD -- fileA