一 Git介绍
Git在Wikipedia上的定义:它是一个免费的、分布式的版本控制工具,或是一个强调了速度快的源代码管理工具. Git的代码日志是在本地的,可以随时查看。SVN的日志在服务器上的,每次查看日志需要先从服务器上下载下来.
二 Git 命令常用命令操作
git add:
是将当前更改或者新增的文件加入到Git的索引中,一个工程,你只是修改了某个文件,只需要用git commit -am提交就行了,但是如果新增了文件,就要先执行add,再执行commit -am. 比如我在Test工程中新了一个名为test.cpp的文件,就要这样才能完整提交,
git rm:
从当前的工作空间中和索引中删除文件,例如'git rm app/model/user.rb'. 这个比较简单,就不举例了。
git commit:
提交当前工作空间的修改内容,类似于SVN的commit命令,例如'git commit -m "story #3, add user model"',提交的时候必须用-m来输入一条提交信息
通常是-m和-a一起使用才可以,比如要提交一条更改到本地版本库,用
它执行的动作和githubfor windows里(下面会讲到)commit是一样的,如下图:
git push:
将本地commit的代码更新到远程版本库中,例如'git push origin'就会将本地的代码更新到名为orgin的远程版本库中, 这个动作和github for windows客户端里的同步功能是一样的:
比如我本地有两个已经commit(上图显示),但是还没同步到服务器的版本库,可以直接git push,就会同步:
然后在客户端就会发现更新状态:
git log:
查看历史日志, 这个可以举个例子, 比如,我要clone一个以前的版本到本地进行修改(当然这个一般很少出现), 可以先用这个命令查看有哪些版本:
然后git checkout 加上前8位的key.
带上参数,有更强大的功能,比如想看到具体的修改内容,可以用 git log -p, 下面就是我用这条指令输出的信息,
可以清楚的看到,我修改的内容就是加了一条messageBox语句.
git log --stat 可以看到哪些文件被改了,就像如下的显示,
git -log --author可以查看指定作者的提交信息,如下:
git -log --before和--after可以查看指定日期区间的日志信息,
git revert:
还原一个版本的修改,必须提供一个具体的Git版本号,例如'git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20',可以先通过git log查询版本号的哈希值。
回到一个指定的版本后,就可以基于这个版本修改,commit和push.
git branch:
对分支的增、删、查等操作,例如'git branch new_branch'会从当前的工作版本创建一个叫做new_branch的新分支,'gitbranch -D new_branch'就会强制删除叫做new_branch的分支,'git branch'就会列出本地所有的分支
git checkout:
Git的checkout有两个作用,其一是在不同的branch之间进行切换,例如'git checkout new_branch'就会切换到new_branch的分支上去;另一个功能是还原代码的作用,例如'git checkout app/model/user.rb'就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚
git tag:
tag主要用于项目开发中的里程碑,比如开发到一定阶段可以单独一个版本作为发布等,它往往代表一个可以固定的完整的版本, 在开发的一些关键时期,使用标签来记录这些关键时刻, 例如发布版本, 有重大修改, 升级的时候, 会使用标签记录这些时刻, 来永久标记项目中的关键历史时刻.
可以将某个具体的版本打上一个标签,这样你就不需要记忆复杂的版本号哈希值了,例如你可以使用 'git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20'来标记这个被你还原的版本,那么以后你想查看该版本时,就可以使用 revert_version标签名,而不是哈希值了.
也可以在开发的某个阶段,为该阶段打上一个标签,这样查询时比较方便,
还可以查看现有的标签列表, 当我们把标签名设为版本号时,可以用这个命令方便的查询目前的版本列表,
我们在执行git push的时候,tag是不会上传到服务器的,比如现在的github,创建tag后git push,在github网页上是看不到tag的,为了共享这些tag,你必须这样:
git push origin --tags
另外,tag和release是共存的,关于如何添加release notes,参考如下链接:
https://github.com/blog/1547-release-your-software
三 注册Git账户
到github官网,注册一个账户,然后根据向导,会先提示你建立仓库(Repository).在github首页,点击页面右下角“New Repository”. 如下图所示:
起名叫Test.
以下几点要注意:
一个仓库里只能存放(或叫对应)一个项目
免费用户只能建公共仓库, 也就是说别人都看得到你放上来的源码工程.
四 githubfor windows
使用github,如果我们能有一个给力的客户端, 就不用记住那些繁琐的命令, 有时候可以起到事半功倍的作用, Windows下的Git客户端软件有那么几个,Github for Windows,TortoiseGit和SmartGit。
Github for Windows是Github官方出的, 就以这个为例(其实我也只用过这个).有了这个客户端,很多常用的操作基本可以通过图形界面来完成。
下载,安装,然后登陆进去.本地git项目与远程的github建立联系是通过SSH Key来完成的, Github for Windows会帮你创建SSH Key,你打开邮件应该会收到邮件帮你创建SSH Key的信息.客户端会让你指定一个storage directory, 我这里是D:\study\github\data, 这个目录就是你以后github项目的工作目录了,从服务器上clone的源码工程会自动下发到这个目录. 我们从服务器上把刚才建立的叫Test的项目仓库clone到本地, 这时在可以看到当前目录下多了一个Test文件夹:
然后我们在这个目录下,新建一个叫ddd的mfc对话框工程, 这时可以直接提交了,作为我们的第一次提交.加入一些注释说明,如下图:
然后”commit to master”, 这样是把工程提交到本地仓库, 这一点也是github比较给力的地方,有个” 本地仓库”的概念, 这样在没有网络的情况下,可以先提交到这里,然后有网络后,把同步到服务器. 同步服务器在右上角的”sync”操作:
这样就完成了一个修改,提交,多次操作之后,客户端上会记录各个版本,如下:
服务器上也有类似的记录:
五 如何从github下载开源项目修改, 参与开源项目协同开发
随便打开一个开源项目的网址,在网页的右下角可以看到如下图这样的:
选择clone in desktop,就可以下载源码工程到本地,然后就可以修改,提交,这个步骤前面已经讲过了.通过命令行方式就用clone命令,比如:
六 如何删除一个版本库.
浏览器登陆github, 然后按照图示的步骤:
点击"Test" 版本库,然后在侧边找到settting菜单,
接着在网页的最下面可以找到删除菜单,
七 关于readme
每个工程的根目录下,最好都有一个readme文件,说细说明你这个工程的作用,开发背景等内容,格式的话网上搜一下很多。
八 补充, 关于分支
对开发周期中的单独生命线作单独的修改,这条单独的开发生命线就可以称为Branches即分支。分支经常用于添加新的功能以及产品发布后的bug修复等,这样可以不影响主要的产品开发线以及避免编译错误等。当我们添加的新功能完成后可以将其合并到主干中。
许多使用 Git 的开发者都喜欢用这种方式来开展工作,比如仅在 master 分支中保留完全稳定的代码,即已经发布或即将发布的代码。与此同时,他们还有一个名为develop 或 next 的平行分支,专门用于后续的开发,或仅用于稳定性测试.