想想自己接触git也快一年了。记得当时刚刚接触的时候,一无所知,根本就不知道什么是版本控制系统。 听学长说是很有用的工具,然后也就这样开始接触。记得当时看着官方的help文档,一步一步地操作。 对于我这个大一英语全不及格的人来说,可真是苦不堪言啊。 忙了一整个下午,最终还是一头雾水,也不知道当时整好了没有。根本就分不清git和github的关系。 还看着一堆的英文的东西,哎……往事不堪回首,这样想起来,貌似这一年自己还是收获很多的。 希望下一年能够让自己收说更多的,嘿嘿……
我刚开始的时候,就是搞不懂git和github之间的关系。当时就知道这是个版本控制工具, 到底版本控制工具有什么作用呢,根本就没有什么切实的体会。再加上一堆的英文的文档,惨不忍睹啊。 其实本质上讲,git和github一点关系都没有。就像那些笔记本电脑和京东没有一点关系。git本身是一个程序。 这个程序能够对变动的目录进行跟踪,检出,恢复等等一堆强大的功能。 而我们写代码不就是在一个目录里到处变更文件吗?这样子管理起来就会很麻烦。所以git就很形象的称为版本控制 工具了。不过要说git的起源还是在维护linux内核的时候诞生的,这方面的资料网上有很多。所以git就是一个程序, 在linux下,它就形象的展现成命令行,你就可以在里面输入命令之类的。就这么简单。再来说说github。 它直观的表示就是一个网站,但是不同的是它这个网站有着特别的功能。最主要的功能就是,你可以在它那里托管 你的代码。再加上其它一些辅助功能,使得你能够更好的工作。想github这样的托管的网站有很多:
还有其他一些相似的网站,另外,相对的,版本控制工具也不止git一个,使用比较广泛的还有
svn
hg
cvs
这些都可以在网上很轻松的搜索到相关资料。
讲讲具体使用git和github来维护自己的项目时候要用到的命令和过程
这个比较简单。在linux下面,你可以选择编译安装或者是直接使用apt-get来安装。 使用apt-get安装:
sudo apt-get install git-core git-doc
安装完成之后,输入下面命令检查是否安装成功:
git --version
查看是否顺利的输出版本号
使用编译安装 运行下面命令安装编译依赖的软件包
sudo apt-get built-dep git-core git-doc
下载git源码包并且解压,切换到源码包的目录,执行下面命令:
make prefix=/usr/local all doc
sudo make install install-doc
安装完成后可以查看自己的git版本。
使用git 如果只是使用git版本控制工具,那么,你知道在你的项目文件目录下面运行命令
git init
就会在该目录下面创建一个版本库了,你会发现在该目录下面多了一个.git的目录。 在这里还是结合github一起讲解。 在github上注册一个帐号。之后主要的一部就是设置公钥和私钥。github采用ssh协议进行代码的传输认证。 其实ssh协议在这里理解很简单,就是你通过一个命令,产生一对公钥和私钥,这两个是有联系的。你把公钥放在 github的网站上,然后私钥留在自己的电脑里面,每次你要和github通信的时候,它就会认证一下是否是管理用户。 使用下面命令可以产生一堆公钥和私钥。
ssh-keygen
~/.ssh/id_rsa是私钥,~/.ssh/id_rsa.pub是公钥,你可以用文本编辑器打开公钥文件, 你把公钥文件里面的内容复制到github上的你的账户里的相应位置(专门有这么一个地方)。再执行下面命令, 测试是否成功。
ssh -T git@github.com
现在你可以在github上面建立一个仓库了。写好你的仓库的名字。然后就是把你的本地仓库代码送到远程里面。 假设你在本地有一个仓库了,执行下面两条命令,这两条命令是告诉远程版本库是谁提交的版本库
git config --global user.name "yourname"
git config --global user.email "youremail"
添加远程版本库:
git remote add origin git@github.com:cloudaice/helloworld.git
其中origin是给远程版本库起的一个名字,这个名字和我们在github上建立的版本库的名字是不相关的, 只是对于我们本地给它起的一个名字。后面表示,版本库的路径,在这里是cloudaice路径下的helloworkd.git 版本库。在这里要重点说一下,github支持三种协议传输,但是只有ssh协议才能够执行push操作, 因此在添加远程版本库的时候最好使用该添加方法,如果对于远程版本库,我们不执行推送的话, 比如是和别人协作的时候,对于管理员的版本库,我们就只需要pull。因此,可以使用另外两种方法
git remote add origin git://github.com:cloudaice/helloworld
git remote add origin https://github.com:cloudaice/helloworld
到此就算把本地版本库和远程的联系起来了,下面介绍一些常用命令。
下面提到的origin默认表示远程版本库的名称,origin/master默认表示远程版本库origin中的master分支
git add filename
把该目录下的这个文件添加到暂存区;
git add .
把目录下的所有文件添加到暂存区。在这里你可以通过建立一个.gitignore
文件,在里面写如你不想添加到暂存区的
文件的名字。这样即使执行这条命令也不会把那些文件添加到暂存区了。
git commit -m "infomation"
提交暂存区的内容到版本库,引号里面的为你的本次提交的信息,最好写的清晰明白。
git push origin master
将本地的版本库推送到远程版本库中,origin是远程版本库的名字,master是远程版本库的分支名称。 当有多个分支的时候,可以采用下面命令
git push origin localbranch:remotebranch
localbranch表示本地分支名称,remotebranch表示远程版本库分支名称
git branch
查看当前本地分支,其中当前使用的分支会在前面加上*号
git branch -a
查看所有分支,包括远程分支
git branch -r
显示远程版本库
git remote -v
查看所有远程版本库
git branch branchname
基于当前分支,创建分支
git checkout branchname
检出分支,即转到该分支目录下
git checkout -b currentbranch newbranch
基于currentbranch分支创建newbranch分支,并且检出newbranch分支
git branch -m oldname newname
分支重命名,oldname 为原来名字,newname为新的名字。
git merge branchname
合并分支,把branchname分支合并到当前的分支上面来,一般branchname分支是基于当前分支创立的。 这种合并方法是合并全部的。
git cherry-pick -n 提交号1
git cherry-pick -n 提交号2
.
.
git cherry-pick -n 提交号m
这样可以任意选择合并哪个提交号,git里面的提交号是由40位的hash码组成一般前七位就足够辨别了。
git branch -d branchname
删除分支branchname。
git status
查看当前状态
git fetch origin master
将远程版本库拖到本地的一个远程版本库中,其实添加一个远程版本库的时候,都会在本地有一个远程版本库的复制。 我们可以通过
git checkout origin/master
检出远程版本库,因此fetch命令计时将远程版本库的更新同步到本地的远程版本库
git pull origin/master
把远程版本库的更新同步到本地的远程版本库,并且合并与之相对应的本地版本库。相当于下面两条命令的组合:
git fetch origin master
git merge origin/master
另外:HEAD 关键字指向版本库中的末稍,即为最后一次提交的版本库
ubuntu下git的可视化工具
sudo apt-get install gitg
设置git使用代理提交代码
git config http.proxy http://127.0.0.1:8087/
git config http.sslVerify false
git remote add httporigin https://name@github.com/name/reps-name.git
这样子设置之后就可以使用http代理来提交代码了。
学习git的网站: