概述:该文档还有很多没有进行叙述,因为时间原因,所以不是很完整,比如git clone,git diff等一些重要操作,后续会进行补充和eclipse集成git,idea集成git的使用说明
git是一个分布式的版本控制系统,最初有linux Tovalds编写,初衷是为了管理linux内核代码的管理,在推出之后,git在其他项目中取得了很大的成功,尤其是在Ruby社区中,目前,包括Rubinius和Merb在内的很多知名项目都使用了Git。Git同样可以被诸如Capistrano和Vlad the Deployer这样的部署工具所使用。同样,eoe.cn客户端的源码也托管在github上。
Git的诞生其实是一个很偶然的机会,因为linus的linux代码是通过全世界的志愿者进行参与的,所以linus对于这种代码的手工合并坚持了10年之久,10年的发展,linus不可能在手工合并代码,这工作量可不小,当时也有版本控制的系统,比如svn和cvs,但是linus不喜欢,坚决反对,是因为速度比较慢,而且需要联网的前提下进行,虽然当时有商用的svn或cvs的服务器,但是linux是一个免费的开放系统,如果托管在收费的系统上,与linux的完全开源精神不符。于是乎linus选择了一款bitKeeper版本控制系统,安定团结的大好局面在2005年就被打破了,原因是Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气。开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错!),于是BitMover公司怒了,要收回Linux社区的免费使用权。这下linus进入了一个尴尬的境地,所以促使linus进行了自主研发了GIT分布式版本控制系统。
GitHub可以托管各种git库,并提供一个web界面,但与其它像SourceForge或Google Code这样的服务不同,GitHub的独特卖点在于从另外一个项目进行分支的简易性。为一个项目贡献代码非常简单:首先点击项目站点的“fork”的按钮,然后将代码检出并将修改加入到刚才分出的代码库中,最后通过内建的“pull request”机制向项目负责人申请代码合并。已经有人将GitHub称为代码玩家的MySpace。(MySpace全球目前第二大社交网站,如facebook)
Git的官方下载地址:http://msysgit.github.io/
下载完成后,进行傻瓜式安装即可。
Git库中有三部分组成,git库就是.git目录,其中存放的是我们所提交的文档索引内容,Git可基于文档索引内容对所管理的文档内容进行追踪,从而实现版本控制,.git目录位于工作目录内。
用户本地的目录
将工作目录下的所有文件(包括子目录)生成快照,存放在一个临时的存储区域,Git称该区域为索引。
将索引通过commit进行提交到仓库中,每一次提交意味着版本的一次更新。
$ gitconfig --global user.name "baoqiang"
$ gitconfig --global user.email "[email protected]"
工作目录中希望有些文件不需要git管理的,譬如程序编译生成的中间文件等,git提供了文档的忽略机制,可以将目录中不希望接受git管理的文档信息写到同一目录下的.gitignore文件中。
具体操作后面将会讲到。
Git与Repo的比较
Git操作一般对应一个仓库,而Repo操作一般对应一个项目,即一个项目会有若干个仓库组成。
通过git init命令可以进行初始化git,在当前目录下生成.git的子目录,所有的文件变化信息都会放在此目录底下,而不像cvs、svn一样,在每一个目录下生产cvs、svn目录,
在.git目录底下会有一个config文件,可以修改里面的配置项。
将当前目录中更改或者新增的文件加入到git的索引中,加入到git索引中就相当于记录到了版本历史中,也就是提交之前所要执行的一步。
可以进行递归添加,如果添加一个目录,会通过递归添加该目录下的子目录,一致有三种添加的方式,首先在当前目录下提交如下文件:
添加目录:
从当前的工作目录和索引中删除文件。(具体命令与add命令参数一致)
可以递归删除,即如果后面跟的是一个目录做为参数,则会递归删除整个目录中的所有子目录和文件。例如:
git rm –r *(进入某个目录中,执行此语句,会删除该目录下的所有文件和子目录)
git rmf1 (删除文件f1,包含本地目录和index中的此文件记录)
git rm--ached f1 (删除文件f1,不会删除本地目录文件,只删除index中的文件记录;将已经git add的文件remove到cache中,这样commit的时候不会提交这个文件,适用于一下子添加了很多文件,却又想排除其中个别几个文件的情况.)
提交当前工作目录下的修改内容。直接通过git commit会提示添加注释,通过以下命令就可以在提交的时候进行添加注释了。
Git commit还有一个-a的参数,就是将没有通过gitadd的文件进行强行一致提交,但是不推荐这样使用。每一次提交,git就会为全局代码建立一个唯一的commit的标识代码,用户可以通过git reset命令恢复到任意一次提交时的代码。
查看版本库的状态,可以得知哪些文件发生了变化,哪些文件还没有添加到git库中等等,建议每次commit前都要通过该命令确认状态。
最常见的误操作就是,修改了一个文件,没有调用git add通知git库该文件已经发生了变化,而commit完成以后,误以为改文件已经被add,后期又进行修改或者删除,而实际上该文件没有托管在git管理上,所以导致该文件丢失的情况。如果调用git status命令,格外要注意“changed but not updated”的文件,这些文件都是与上次commit之前相比发生了变化,但是此次没有进行git add操作的文件。
查看历史日志,包含每次的版本变化,每次版本变化对应一个commit id。
而进行展示的commit 71e1b9b386cf26e2dec4ec39b7771629e8a5c155,也就是对应的版本号,如果要查看具体信息,可以通过git show -71e1b9b386cf26e2dec4ec39b7771629e8a5c155,来查看此次版本的具体信息:
git merge
git diff
git checkout
git-ls-files
git mv
git branch
git rebase
git reset
git revert
git config
git show
git tag
Git
官方网站:https://github.com/
Github其实也就是git仓库的托管服务。所以只要注册一个github的账号,就可以拥有一个git的远程仓库。
首先进入网站,点击Signup for GitHub进行注册,然后登录系统:
注册功能就完成了,然后进行创建仓库,右上角点击+下拉:
进入仓库页面,根据自己的情况进行填写,具体填写说明如下:
点击create repository新建成功了!
由于git和github之间的传输是通过ssh加密的,所以需要创建ssh
1.查看是否已经有了ssh密钥:cd ~/.ssh
如果没有密钥则不会有此文件夹,有则备份删除
2.生存密钥:
$ssh-keygen -t rsa -C “[email protected]”
按3个回车,密码为空。
Youridentification has been saved in /home/tekkub/.ssh/id_rsa.
Yourpublic key has been saved in /home/tekkub/.ssh/id_rsa.pub.
Thekey fingerprint is:
………………
最后得到了两个文件:id_rsa和id_rsa.pub
注意:生成ssh默认生成在cd ~/.ssh,要进行查看具体目录结构,可以在Git Bash中进行查看,具体步骤:
然后在该目录底下会找到两个文件。
此时,生成的ssh key就完成了。
登录github,然后点击setting,再点击sshsetting进行设置ssh公钥(将你当前目录下的id_rsa.pub中的公钥复制到ssh setting的key中即可)
点击Add key则添加成功!
然后通过Git Bash就可以进行访问github了:
通过ssh –T [email protected] 如果出现以下说明即连接成功。
为什么github需要sshkey呢,因为github需要识别出,是你推送的数据还是别人推送的。而git支持ssh协议,所以只要你给github提供公钥,github就可以知道你的身份。
Github是可以支持多个key的,所以你可以再不同的电脑进行生产不同的key,然后添加在github上,这样,你就可以在不同电脑上进行推送数据了。
Github现在支持免费的git仓库是共有的,如果你不想公开你的项目,就可以交点保护费给github,将共有改成私有即可,或者可以再自己的服务器上搭建git服务器。
将本地仓库上传到github,在此之前需要设置username和email。因为github每次会记录以下他们来标识是谁提交的。
$ git config --global user.name "yourname"
$ git config --global user.email [email protected]
设置完用户名和email以后,在某个目录下新建自己的gitRepo,比如本人新建在E:\github\gitRepo,然后再该目录下打开Git Bash,初始化git,然后上传至github通过命令:
如果没有提示信息就成功了,linux下没有提示信息就是成功。
然后打开当前目录下的.git目录,打开config文件,则会发现多了一项配置。
[remote "origin"]
url= [email protected]:baoqiang/gitRepo.git
fetch= +refs/heads/*:refs/remotes/origin/*
注意:baoqiang是指你的github的用户名,而gitRepo是github的工程名。
新建一个test1.txt文件,然后上传到github,首先提交的git本地
然后将文件推送到github,通过命令:
,如果想将github的仓库获取到本地git仓库,通过命令:
修改完代码以后,可以通过git status来查看文件的差别,使用git add添加想要进行commit的文件,也可以通过git add –i来智能添加文件,之后通过git commit进行提交修改,git push上传到github。
Gitigore可以从单词就可以看出来,是git忽略,顾名思义就是告诉git需要忽略的文件,这是一个重要而且实用的文件,一般写完代码之后,将编译,调试的测试代码或者中间的一些执行代码,不需要提交到git管理的,就可以通过该文件进行配置,如果用git add –A来添加的话,会把他们都添加进去,是因为手动一个一个添加会很麻烦,这时我们就需要.gitignore了,比如一般java项目,我的.gitgnore会这么写:
.classpath
.project
.springBeans
.settings/
target/
*.iml
.idea/
创建gitigonre文件可以复制一个gitignore文件,也可以新建一个,在windows操作的话,建议是通过新建,因为复制的文件,在进行git add的时候会出现如下错误,解决方案,自己进行百度解决,我推荐使用自己新建gitignore,通过linux操作进行添加文件和内容:
新建.gitignore文件:
新建完成以后,在进行编辑忽略文件,如果对linux操作比较熟悉的话,可以通过vi进行编辑。
编辑完成后,进行查看:
这样就添加成功了,添加完以后,一定要进行提交到git和github’仓库,具体提交方法,不在熬述!
Tag是用来指向软件开发中的一个关键时刻,比如版本号更新的时候可以新建一个“v2.0”,”v3.0”之类的标签,这样在以后回顾的时候会比较方便,tag的操作比较简单,查看tag,创建tag,删除tag,验证tag以及共享tag。
对以前的提交信息进行加tag,可以通过如下的方式进行添加:
我们在执行git push的时候,tag是不会上传到服务器上的,比如现在的github,换件tag到git push,在github网页是看不到这些信息的,可以通过以下的方式,进行共享tag
参考资料:
廖雪峰的官方网站
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/
git for windows官方网站:
http://msysgit.github.io/
git – 简易使用指南
http://www.bootcss.com/p/git-guide/
http://blog.csdn.net/cdkd123/article/details/8959484
还有好多blog的贡献