转载请注明出处:http://blog.csdn.net/liguojin1230/article/details/46728853
本讲内容:Git版本控制工具与GitHub的使用
作为一个程序员,肯定需要有一个自己的服务器,然后将一些重要数据备份在服务器中。如果是需要和朋友共同开发,那服务器更是不可或缺。但是一般我们都不会去买一个服务器。但是我们可以使用开源的Git版本控制工具。
一、安装Git
访问http://msysgit.github.io/ 把Git的安装包下载。虽然在Windows上安装的Git是可以在图形界面上进行操作的,但是并不建议使用这一功能,因为Git的各种命令才是你掌握的核心技能,并且不管你在哪个操作系统中,使用命令来操作Git都是通用的。
从开始里找到Git Bash并打开。首先应该配置一下你的身份,这样在提交代码的时候Git就可以知道是谁提交的了。
设置用户信息
$ git config --global user.name "your name"
$ git config --global user.email "youremail@163.com"
查看配置信息
$ git config --list
1)基本命令
1、基本操作
$ git init //初始化版本库(创建代码仓库)
$ git clone //克隆版本库
$ git add //添加新文件
$ git commit //提交到本地版本库
$ git checkout //检出(分支、标签)
2、分支
$ git branch //列出分支
$ git branch -r //列出远程分支
$ git branch -a //列出所有分支
$ git branch newBranch //基于当前分支创建新分支newBranch
$ git branch -D branchName //删除分支branchName
$ git branch -d branchName //仅删除已合并分支branchName
$ git merge <--> //合并分支<br>>git tag
3、历史
$ git log //显示全部历史
$ git log -p //显示版本历史,以及版本间的内容差异
$ git log -5 //显示最近的5个提交
$ git log -5 -p //显示最近的5个提交,以及版本间的内容差异
$ ...(很多很多参数...)
$ git diff 112 115 //显示112和115版本的差别
2)开始使用Git
1、创建代码仓库
这里我们尝试着给WeixinDemo项目建立一个代码仓库。先进入到WeixinDemo项目的目录下,如图所示
然后在这个目录下面输入命令: git init 来创建代码仓库。
仓库创建完成后,会在WeixinDemo项目的根目录下生成一个隐藏的.git文件夹,这个文件夹就是用来记录本地
所有的Git操作的。如图所示:
如果你想要删除本地仓库,只需要删除这个文件夹就行了。
2、提交本地代码
代码仓库建立完之后就可以提交代码了,使用add和commit命令就可以了。add是用于把想要提交的代码先添加进来,
而commit则是真正地去执行提交操作。譬如我们想添加AndroidManifest.xml文件,就可以输入如下命令:
git add AndroidManifest.xml
这是添加单个文件的方法,那如果我们想添加某个目录呢?只需在add后面加上目录名就可以了,譬如将整个src目录
下的所有文件都进行添加,就可以输入如下命令:
git add src
譬如将所有的文件都添加,就可以输入如下命令:
git add .
现在WeixinDemo项目下所有的文件都已经添加好了,我们可以来提交一下了,输入如下命令:
git commit -m "First commit."
注意在commit命令的后面一定要通过-m参数来加上提交的描述信息,没有描述信息的提交被认为是不合法的。
3、忽略文件
上面我们将WeixinDemo项目下所有的文件都加入到版本控制当中,但是我们都知道bin目录和gen目录下的文件都是
会自动生成的,我们不应该将这部分文件添加到版本控制当中,否则有可能会对文件的自动生成造成影响。
Git提供了一种可配性很强的机制来允许用户将指定的文件或目录排除在版本控制之外,它会检查代码仓库的根目录
下是否存在一个名为.gitignore的文件,如果存在的话就去一行行读取这个文件中的内容,并把每一行指定的文件
或目录排除在版本控制之外。注意.gitignore中指定的文件或目录是可以使用“*”通配符的。
现在,我们在WeixinDemo项目的根目录下创建一个名为.gitignore的文件,然后编辑这个文件中的内容,如图:
这样就表示把bin目录和gen目录下的所有文件都忽略掉,从而使用得它们不会加入到版本控制当中了。
排除了bin和gen这两个目录之后,我们就可以提交代码了
git add .
git commit -m "First commit."
4、查看修改内容
在进行了第一次代码提交之后,我们后面还可能会对项目不断地进行维护,添加新功能等。比较理想的情况是每当
完成了一小块功能,就执行一次提交。但是当某个功能牵扯到的代码比较多的时候,有可能写到后面的时候我们就
已经忘记前面修改了什么东西了。遇到这种情况时不用担心,Git全部都帮你记着的。下面我们来学习如何使用Git
来查看自上次提交后文件修改的内容。
查看文件修改情况使用status命令,在项目的根目录下输入如下命令:
git status
然后Git会提示目前项目中没有任何可提交的文件,因为我们刚刚才提交过,还没有修改过任何东西。下面我们对
WeixinDemo项目中的代码稍做改动,修改MainActivity中的代码,如图所示:
public class MainActivity extends Activity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setOverflowShow();
}
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
……
}
这里仅仅是在onCreateOptionsMenu()方法中,将返回值由false改成了true。然后重新输入git status命令,如示:
可以看到,Git提醒我们MainActivity.java这个文件已经发生了更改,可以用diff命令看到更改的内容。如下:
git diff
这样可以查看到所有文件的更改内容了,如果你只想查看MainActivity.java这个文件的更改内容,可以使用
如下命令:
git diff src/com/example/weixindemo/MainActivity.java
命令的执行结果如图:
其中,减号代表删除的部分,加号代表添加的部分,从图中我们就可以明显地看到,返回值由false改成了true。
5、撤销未提交的修改
有时候我们代码可能会写得过于草率,以至于原本正常的功能,结果反倒被我们改出了问题。遇到这种情况时
也不用急。因为只要代码还未提交,所有修改的内容都是可以撤销的。
譬如前面我们修改了MainActivity里一个方法的返回值,现在想要撤销这个修改就可以使用checkout命令,
用法如下:
git checkout src/com/example/weixindemo/MainActivity.java
执行了这个命令之后,我们对MainActivity.java这个文件所做的一切修改就应该都被撤销了。
重新运行git status 命令检查一下,结果如图:
可以看到,当前项目没有任何可提交的文件,说明撤销操作确实是成功了。
不过这种撤销方式只适用于那些还没有执行过add命令的文件,如果某个文件已经被添加过了,这种方式就无法撤销
其更改的内容了。对于已添加的文件我们应该先对其取消添加,然后才可以撤销修改。取消添加使用reset命令。
如下:
git reset HEAD src/com/example/weixindemo/MainActivity.java
然后再运行git status命令,你就会发现MainActivity.java这个文件重新变回了未添加状态,此时就可以使用
checkout命令来将修改的内容进行撤销了。
5)查看提交记录
当WeixinDemo这个项目开发了几个月之后,我们可能已经执行过上百次的提交操作了,这个时候估计你早就已经
忘记每次提交都修改了哪些内容。不过没关系,Git会一直都帮我们清清楚楚地记录着,可以使用log命令查看历史
提交信息,用法如下所示:
git log
执行之后,结果如图:
可以看到目前我们只执行过二次提交,最上层是最近提交的,每次提交记录都会包含提交id、提交人、提交日期,
以及提交描述这四个信息。当提交记录非常多的时候,如果我们只想查看其中一条记录,可以在命令中指定
该记录的id,并加上-1参数表示我们只想看到一行记录,如下所示:
git log 2852121141bb2476ddd723e98c04c07c9dafcda5 -1
而如果想要查看这条提交记录具体修改了什么内容,可以在命令中加入-p参数,命令如下:
git log 2852121141bb2476ddd723e98c04c07c9dafcda5 -1 -p
查询结果如图所示,其中减号代表删除的部分,加号代表添加的部分。
注意:和上面图不同,是因为我提交时是ture修改成false的。
3)分支(branch)的用法
主要的作用是在现有代码的基础上开辟一个分叉口,使得代码可以在主干线和分支线上同时进行开发,且相互之间
不会影响。如果想要查看当前的版本库当中有哪些分支,可以使用git branch -a 这个命令,如图
由于目前WeixinDemo项目中还没有创建过任何分支,因此只有一个master分支存在,这也就是前面所说的主干线,
接下来我们尝试去创建一个分支,命令如下:
git branch version1.0
这样就创建了一个名为version1.0的分支,我们再次输入git branch -a这个命令来检查一下,结果如图:
可以看到,有一个叫version1.0的分支出现了,你会发现,master分支的前面有一个*号,说明目录我们的代码
还是在master分支上的,下面我们来切换到version1.0这个分支上,使用checkout命令即可,如下所示:
git checkout version1.0
再次输入git branch -a来进行检查,结果如图:
可以看到,我们已经把代码成功切换到version1.0这个分支上了。
注意:在version1.0分支上修改并提交的代码将不会影响到master分支的。同样的道理,在master分支上修改
并提交的代码也不会影响到version1.0分支的。因此,如果我们在version1.0分支上修复了一个bug,在master
分支上这个bug仍然存在的。我们可以使用merge命令来完成合并操作,如下所示
git checkout master
git merge version1.0
这两行命令就可以把在version1.0分支上修改并提交的内容合并到master分支上了。当然,在合并分支的时候还有
可能出现代码冲突的情况,这就需要你自己解决了,Git在这里就无法帮助你了。
最后,当我们不需要version1.0这个分支的时候,可以使用如下命令将这个分支删除掉:
git branch -D version1.0
4)与远程版本库协作
如何使用Git来进行团队合作开发呢?这就需要有一个远程的版本库(下面讲到),团队的每个成员都从这个版本库中
获取到最原始的代码,然后各自进行开发,并且以后每次提交的代码都同步到远程版本库上就可以了,另外,团队中
的每个成员最好都要养成经常从版本库中获取最新代码的习惯,不然的话,大家的代码就很有可能经常出现冲突。
譬如说现在有一个远程版本库的Git地址是https://github.com/liguojin/cloudweather.git 就可以使用如下命令将代码
下载到本地:
git clone https://github.com/liguojin/cloudweather.git
之后你在这份代码的基础上进行了一些修改和提交,接下来你就需要借助push命令来将本地修改的内容同步到远程
版本库上。
用法如下:
git push origin master
其中origin部分指定的是远程版本库的Git 地址,master部分指定的是同步到哪一个分支上,上述命令就完成了将
本地代码同步到 https://github.com/liguojin/cloudweather.git 这个版本库的master分支上的功能。
知道了将本地的修改同步到远程版本库上的方法了,下面我们学习如何将远程版本库上的修改同步到本地。
Git提供了两种命令来完成此功能,分别是fetch和pull,fetch的语法规则和push是差不多的,如图所示:
git fetch origin master
执行这个命令后,就会将远程版本库上的代码同步到本地,不过同步下来的代码并不会合并到任何分支上的,
而是会存放在到一个origin/master分支上,这时我们可以通过diff命令来查看远程版本库上到底修改了哪些东西:
git diff origin/master
之后再调用merge命令将origin/master 分支上的修改合并到主分支上即可,如下所示:
git merge origin/master
而pull命令则是相当于将fetch和merge这两个命令放在一起执行了,它可以从远程版本库上获取最新的代码并且
合并到本地。用法如下:
git pull origin master
二、将代码托管到GitHub上(远程的版本库)
GitHub是全球最大的代码托管网站,主要是借助Git来进行版本控制的。GitHub的官网地址是https://github.com/
我们注册完成时,就会跳转到GitHub的个人主界面了,如图所示:
点击右下角的New repository按钮来创建一个版本库,譬如我们创建一个版本库并命名为cloudweather,然后选择添加一个Android项目类型的.gitignore文件,并使用Apache License 2.0来作为云天气的开源协议,如图所示:
接着点击Create repository按钮,coolweather这个版本库就创建完成了,如下图所示,版本库主页地址是https://github.com/liguojin/cloudweather 其中liguojin是我注册的用户名。
可以看到,GitHub已经自动帮我们创建了.gitignore、LICENSE和README.md这三个文件,其中编辑README.md文件中的内容可以修改云天气版本库主页的描述。
注意:删除某个版本库:
点击进入你的项目 — 右上角菜单栏有个setting— 点击进入往下拉 就能看到有个—— delete this repository按钮。然后会出现下图,接着输入你要删除的版本库的名称。
创建好了版本库之后,我们就需要在Eclipse中创建云天气这个项目了。如图所示
接下来我们需要将远程版本库克隆到本地。首先必须知道远程版本库的Git地址,可以在云天气版本库主页的右下角找到,如图所示:
点击右边的复制按钮,云天气版本库的Git地址是 https://github.com/liguojin/cloudweather.git 。然后打开Git Bash并切换到CoolWeather的工程目录下。如图所示:
接着输入https://github.com/liguojin/cloudweather.git来把远程版本库克隆到本地,如图所示:
看到图中所给的文字提示就表示克隆成功了,并且.gitignore、LICENSE和README.md这三个文件也已经被复制到了本地,可以进入到cloudweather目录,并使用ls -al命令查看下,如图所示:
现在我们需要将这个目录中的所有文件全部复制到上一层目录中,这样就能将整个CloudWeather工程目录添加到版本控制中去了,注意.git是一个隐藏目录,在复制的时候千万不要漏掉。复制完之后可以把cloudweather目录删除掉,最终CloudWeather工程的目录结构如图所示: