HTML5中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 860|回复: 0

[文章] Git基本操作(六)

[复制链接]

该用户从未签到

发表于 2016-1-1 17:55:47 | 显示全部楼层 |阅读模式
远程库操作

1.提交到远程库
  1. $ git push username@ipaddr: 远端repository名(目录/URL) 本地分支名:远端分支名
复制代码

这条命令将本地git库的一个本地分支push到远端git库的远端分支中
  1. $ git push origin master
复制代码
orign 为默认远程分支
master 为默认本地分支
可手动指定,也可在gitconfig中指定远程配置,即可直接使用git push
2.获取更新
  • get fetch & git merge
    git fetch [remote-name] 从远程仓库中拉取所有你本地仓库还没有的数据。需要记住,fetch命令指示将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能通过执行git merge命令合并。
  • git pull(= git fetch + git merge)
    git pull命令相当于git fetch + git merge,即从远程仓库中拉取所有你本地仓库中还没有的数据,并自动合并到当前工作分支。

与git clone不同, git pull可以从任意一个git库获取某个分支的内容。用法如下:
git-pull username@ipaddr: 远端repository名 远端分支名:本地分支名。
这条命令将从远端git库的远端分支名获取到本地git库的一个本地分支中。其中,如果不写本地分支名,则默认pull到本地当前分支。
需要注意的是,git-pull也可以用来合并分支。 和git-merge的作用相同。 因此,如果你的本地分支已经有内容,则git-pull会合并这些文件,如果有冲突会报警。
3.clone一个远程项目


linux内核源代码
当我们打开它的网站时,发现有如下面的一段提示:
  1. URL  
  2. git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git  
  3. http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git  
  4. https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
复制代码

URL下面的三行字符串表示三个地址,我们可以通过这三个地址得到同样的一份Linux内核源代码。
也就是说下面这三条命令最终得到的是同一份源代码:
  1. git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git  
  2. git clone http://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git  
  3. git cone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git
复制代码
URL
Git 仓库除了可以通过上面的git、http、https协议传输外还可以通过ssh、ftp(s)、rsync等协议来传输。git clone的本质就是把“Git目录”里面的内容拷贝过来,大家想想看,一般的“Git目录”里有成千上万的各种对象(提交对象,树对象,二进制对象......),如果逐一复制的话,其效率就可想而知。
如果通过git、ssh协议传输,服务器端会在传输前把需要传输的各种对象先打好包再进行传输;而http(s)协议则会反复请求要传输的不同对象。如果仓库里面的提交不多的话,前者和后者的效率相差不多;但是若仓库里有很多提交的话,git、ssh协议进行传输则会更有效率。
现在我们执行了下面这条命令,把linux-2.6的最新版源代码clone下来:
  1. $cd ~/  
  2. $mkdir temp  
  3. $git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git  
  4. Initialized empty Git repository in /home/liuhui/temp/linux-2.6/.git/
  5. remote: Counting objects: 1889189, done.
  6. remote: Compressing objects: 100% (303141/303141), done.
  7. Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.
  8. remote: Total 1889189 (delta 1570491), reused 1887756 (delta 1569178)
  9. Resolving deltas: 100% (1570491/1570491), done.
  10. Checking out files: 100% (35867/35867), done.
复制代码
当我们执行了“git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git”这条命令后大家可以看到这条输出:
  1. Initialized empty Git repository in /home/user/temp/linux-2.6/.git/
复制代码
这就是意味着我们在本地先建了一个“linux-2.6”目录,然后在这个目录建了一个空的Git本地仓库(Git目录);里面将会存储从网上拉下来的历史提交。
下面两条输入代表服务器现在调用 git-pack-objects 对它的仓库进行打包和压缩:
  1. remote: Counting objects: 1888686, done.  
  2. remote: Compressing objects: 100% (302932/302932), done.
复制代码
然后客户端接收服务器端发过送过来的数据:
  1. Receiving objects: 100% (1889189/1889189), 385.03 MiB | 1.64 MiB/s, done.
复制代码
在我们执行完上面的clone linux-2.6代码的的操作后,Git会从“Git目录”里把最新的代码到签出(checkout)到“linux-2.6”这个目录里面。我们一般把本地的“linux-2.6”这个目录叫做”工作目录“(work directory),它里面保存着你从其它地方clone(or checkout)过来的代码。当你在项目的不同分支间切换时,“工作目录”中的文件可能会被替换或者删除;“工作目录”只是保存着当前的工作,你可以修改里面文件的内容直到下次提交为止。
4.库的逆转与恢复
Git-reset的概念比较复杂。它的命令形式:
  1. git-reset [--mixed | --soft | --hard] [<commit-ish>]
复制代码
  1. 命令的选项:
  2. --mixed 这个是默认的选项。 如git-reset [--mixed] dev1^(dev1^的定义可以参见2.6.5)。它的作用仅是重置分支状态到dev1^, 但是却不改变任何工作文件的内容。即,从dev1^到dev1的所有文件变化都保留了,但是dev1^到dev1之间的所有commit日志都被清除了,而且,发生变化的文件内容也没有通过git-add标识,如果您要重新commit,还需要对变化的文件做一次git-add。 这样,commit后,就得到了一份非常干净的提交记录。
  3. --soft 相当于做了git-reset –mixed,后,又对变化的文件做了git-add。如果用了该选项, 就可以直接commit了。
  4. --hard 这个命令就会导致所有信息的回退, 包括文件内容。 一般只有在重置废弃代码时,才用它。 执行后,文件内容也无法恢复回来了。
复制代码


HTML5中国微信

小黑屋|关于我们|HTML5论坛|友情链接|手机版|HTML5中国 ( 京ICP备11006447号 京公网安备:11010802018489号  

GMT+8, 2017-1-16 18:52

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表