开始
首先记下学习路线,学习资源,熟悉基本概念。访问GitHub主页,找到Hello World guide, 点此git guide。
这里翻译guide里面的一些重要句子
- GitHub是一个代码托管平台,用于版本控制和合作(对于什么是什么的句子能够体现出专业性)
- 重要概念:仓库,分支,提交,拉请求(后面再详细讨论)
Git使用步骤理解
- 创建一个仓库之后,有一个默认的master分支,要创建一个新的分支,在GitHub平台上的操作是点击分支列表,输入分支名,点击创建。这个创建分支的时候有一个当前分支,创建的分支是从当前分支里面分出来的,所以创建分支的时候要注意观察当前分支是哪一个。
- master也可以向其他分支提交合并申请,但是这样做是不符合规范的,这里是要说明Git的内部逻辑,一个仓库(项目)可以创建很多分支,也就是说一个项目可以有很多的开发线,其实每条线都可以向其他线发起合并申请(你来合并我吧)(前提:符合一些逻辑条件,至少我比你新,或是说我有你没有的,如果我有的你都有了,这个请求是不合理的,也就是不允许的)。收到其他分支合并申请的分支可以决定是否要合并申请方的修改。但是实际上,应该都是其他分支向master分支提出合并申请(Pull request),而尽量避免在其他分支间随意发起合并申请和合并执行等操作,容易混乱。
使用Git工具
在Windows平台下,使用git for windows. 首先回顾一下git的特点, git是一个分布式的版本控制工具。有些概念和思考方式跟svn的使用不一样。前面是在GitHub上体验了一下git的功能,GitHub只是提供了一个操作和管理接口,也就是说我们是在远程操作git, 这样由于网络的原因,操作不流畅。那么第一个需求就是,怎么在本地使用git, 然后把代码提交到线上,使用svn的话就是从库上checkout, 在工作备份上修改好之后commit. 那么git从线上到本地的操作叫克隆, 怎样从线上克隆到本地呢?这里选择使用git gui的方式, 先从直观的方式入手。
这里有一篇博客 Git GUI的使用
这里也有一篇Git GUI上传文件
Git的提交跟SVN的提交有一点不同,Git的提交是向某个版本确认更改,加入到更改历史记录里面去,而要把代码提交到线上(或是一个共用的服务器),这个操作叫Push,也就是上面说到的上传文件。
Git GUI界面的几个按钮的用法
- Rescan: 扫描目录文件, 列出没有加入到项目的文件
- Stage Changed: 改变状态,准备提交到版本历史。
- Sign Off: 签名, 登录用户名
- Commit: 提交到版本记录。
- Push:同步到克隆源。
使用git命令
设置签名
git config --global user.email "you@example.com"
git config --global user.name "Your name"
在使用git命令之前,先设置好用户名和邮件地址,这个只是系统要求的一个签名标识,否则就提交不了代码。git 的提交是指的把代码提交到当前分支,而当前分支也是属于仓库的一部分,仓库是由分支组成的。
创建仓库
git init
在当前目录下会创建一个.git的目录,这个目录就是创建的仓库,而当前目录代表的是工作区。
加入暂存区(stage, index)
git add .
点号表示把当前目录下的所有文件加入到暂存区。
提交更改
git commit -m "this is comment"
-m选项表示写的注释。
在工作区内编辑文件
编辑工作区内的文件,表示当前的开发工作。
比较差异
git diff
这个差异表示的是工作区和当前分支的最新状态之间的差异。查看当前进行了哪些修改。
哪些修改
git status
这个命令可以列出工作区和当前分支的最新状态之间有哪些修改。
先加入暂存区,然后才能提交
git add . # 添加所有的修改到暂存区(包括文件修改和文件新增)
git add <filename> # 添加某个文件的修改到暂存区
然后是提交修改
git commit -m "comment"
#或
git commit -a -m "comment" # 提交之前自动添加到暂存区,但是对新增文件的情况
#(接上)无效,只对文件修改和删除文件的情况有效。
删除文件的情况也可以使用git add <filename>
命令。在实际使用中估计最常用的应该就是先git add .
全部添加到暂存区,然后再git commit -m "message"
提交修改。
百度搜索 git命令详解
本地仓库和远程仓库之间的协作
git是一个分布式的版本控制系统,不需要联网,在本地磁盘的任意一个目录下就可以创建一个仓库,并且这个仓库就具有版本控制的功能,提交,版本历史,分支,检出等功能,但是如果没有网络协作能力,那也是失去了关键功能,远程仓库的功能就是在不同位置的两个仓库之间同步和复制的能力。
克隆仓库
git clone <仓库地址>
#可以是本地路径,也可以是网络地址,可支持多种协议,如https, ssh等。
克隆仓库除了把被复制仓库的内容复制了一份之外,多了一个关键影响就是在克隆仓库和被克隆仓库之间多了一个联系,克隆仓库的remote列表里面多了一个值,把被克隆仓库的地址当成了克隆仓库的远程主机之一。
其实,git仓库都有remote属性,只是通过git init
创建的仓库的remote列表还是空的而已,git仓库的remote列表表示跟哪些主机可以建立联系,可以执行同步和拉取得动作。
主机名
默认的主机名是origin, 一个主机名代表某个特定地址的主机。在克隆仓库的时候可以指定主机名。
常用命令
git branch #列出本地分支
git branch -r #列出远程分支
git branch -a #列出所有分支
git branch <new_branch> #创建分支
git checkout <branch_name> #切换分支
git push <远程主机名> <本地分支名>:<远程分支名>
git pull <远程主机名> <远程分支名>:<本地分支名>
git checkout -b dev origin/dev #相当于克隆远程的一个分支
- 在克隆仓库时,只会克隆仓库的当前分支。
总结
以上基本对git的概貌有了一个认识,可以使用git进行代码管理了,对git的一些基本概念有了一定的认识,可以在GitHub上创建一个仓库了,然后在本地克隆这个仓库,在本地进行修改提交,最后推送更新到GitHub上对应的远程仓库上去。以后在使用的过程中再详细记录git的使用经验。
不错的学习博客
http://www.ruanyifeng.com/blog/2014/06/git_remote.html (易懂)
http://www.cnblogs.com/baby-blue/p/6130569.html (专业)
http://www.cnblogs.com/cspku/articles/Git_cmds.html (命令速查)