您的位置:首页 > 编程语言

一个简单的git应用教程

2014-03-15 18:01 190 查看

1. 基本概念

1.1 SVN和git

说起软件版本管理工具,我们立刻会想到tortoiseSVN和git,而如果要说起两者的区别,我们的第一反应总是,前者是集中式的,后者是分布式的。我觉得,这种抽象的概念描述起来虽然简单,但是并不利于理解。

考虑一个典型的由tortoiseSVN管理的软件项目,每个项目的参与者都需要,而且只能与一个固定的SVN server进行交互,因为整个项目的版本和文件更新的协作都是由server来完成的;而在git系统中,任何一个项目的参与者都拥有这个项目repository的所有信息,任何两个项目的参与者都可以彼此交换更新的版本和文件更新信息,git的整个系统中并不存在唯一的server的概念。从系统的稳定性来说,git显然要远远强于SVN,因为SVN系统中,一旦server出现故障,整个系统都无法进行工作,但git却不存在这种问题。

以本地的软件版本管理为例,我们从实际操作的步骤和过程来进一步的看看两者的区别。假设我们有一个项目文件夹project,如果用tortoiseSVN来进行管理,那么我们需要采取如下的步骤,

创建repository:projectRepos
import项目文件到preojectRepos
建立本地工作目录workingProject
从projectRepos中checkout项目文件到工作目录workingProject
在本地工作目录的日常操作
#如果修改了workingProject中的文件,需要commit到repository

#如果需要获取projectRepos中的最新版本,采用update本地工作目录;

如果我们用git来进行管理,那么我们需要如下的步骤,

1)创建repository:建立文件夹projectRepos,并执行初始化命令,

git init

2)添加文件到repository

git add allFiles

git commit -m "set up all initial project files"

在git中,每次的文件更新或更改,都需要先git add, 然后git commit。 相对于SVN, 我们可以看到git的工作目录和repository是在一起的,我们每一次的更新操作无需提交到一个中央管理目录,都是在当前的目录完成的;而SVN中版本管理的repository是独立的,任何一个working directory想得到最新的文件和更新信息,都需要从repository check。

1.2 git的原理描述

如下图所示,git系统工作在三个层次上:工作区(working tree)、暂存区(staging area)和仓库分支(branch)。其中,工作区就是我们在git系统目录下实际看到的文件目录结构,例如命令行下ls显示看到的文件;在工作区中修改了某些文件之后,我们首先用git add命令把修改的文件提交到暂存区,然后会用git commit提交到对应的仓库分支中。在git系统文件夹下,暂存区和库分支信息都保存在.git文件夹里。



通常我们在本地构建的仓库叫做local repository, 但很多时候,我们需要和远在外地的合作者一起开发某个项目,因此需要和远方的合作者进行信息交换,此时远方合作者的repository叫做remote repository。Github提供了免费的remote repository的服务,这使得彼此的信息交互更加方便了。

2. 在本地应用git

下面以在ubuntu下的本地系统建立一个repository为例来说明常用的git操作,

1)创建一个repository,并初始化mkdir learnGit

cd learnGit

git init

2)添加一个文件到Git

git add readMe.txt

git commit -m "wrote a readme file"

3)查看repository中的修改日志

git log --pretty=oneline

4)比较修改前后的差异

git diff readMe.txt

5)回退到上一个版本

git reset --hard HEAD^

note: HEAD指工作的分支上的当前版本;

6)查看所有的commit的记录

git reflog

7)恢复工作区中误删的文件

git checkout -- file.txt

8)创建分支的相关命令

查看分支:git branch

创建分支:git branch name

切换分支:git checkout name

创建+切换分支:git checkout -b name

合并某分支到当前分支:git merge name

删除分支:git branch -d name

3. 使用github

3.1 github的环境设置

1)在本地命令行下,产生自己的ssh key

ssh-keygen -t rsa -C "youremail@example.com"

note: 产生的key pair存在于~/.ssh下

2) 登陆gitHub,点击account settings----> SSH Keys--->add SSH key

copy刚刚产生的sshKey.pub里的内容到窗口;

3) 在gitHub创建一个新的仓库,

点击右上角的加号,选择create a new repository给新仓库命名,例如learnGit

4) 关联本地的仓库和github上的仓库

git remote add origin https://github.com/yourname/learnGit.git
5) 推动本地库的所有内容到远程库上

git push -u origin master

---------以后每次在本地库做了commit之后,要同步到远程库,只需要git push origin master即可;

---------按照提示输入自己在github上的用户名和密码;

3.2 clone github上的项目

github上的开源项目众多,如果我们只是想实践一下这些开源软件,我们可以通过git clone在本地构建一个应用环境,这与SVN工具中的建立的本地拷贝没有什么区别。不过,git强大的地方在于,你在本地所做的任何更改无需commit到远端的server上,因为版本的管理工作完全是在本地的repository中进行管理的。

例如,我们想clone 前端开发框架bootstrap, 在终端中键入:

git clone git@github.com:twbs/bootstrap.git

3.3 fork github上的项目

有些时候,如果我们想参与某个开源软件的开发,最方便的方式是在你自己的github账户fork这个项目。然后,你可以clone这个项目到本地。你在本地的任何更改,都可以同步到你在github上的对应的repository里,你甚至可以提交更改到原始的软件项目。不过,这需要对方认可你才行。在github上,其实有很多项目并没有对所有的人开放权限。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  git github