一个简单的git应用教程

Blog from xjfengck

1. 基本概念

1.1  SVN和git

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

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

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

  1. 创建repository:projectRepos

  2. import项目文件到preojectRepos

  3. 建立本地工作目录workingProject

  4. 从projectRepos中checkout项目文件到工作目录workingProject

  5. 在本地工作目录的日常操作

#如果修改了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文件夹里。

wKiom1MkJr6xNyicAAB95nDYs3Q337.jpg


通常我们在本地构建的仓库叫做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 "[email protected]"
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 [email protected]:twbs/bootstrap.git

3.3 fork github上的项目

有些时候,如果我们想参与某个开源软件的开发,最方便的方式是在你自己的github账户fork这个项目。然后,你可以clone这个项目到本地。你在本地的任何更改,都可以同步到你在github上的对应的repository里,你甚至可以提交更改到原始的软件项目。不过,这需要对方认可你才行。在github上,其实有很多项目并没有对所有的人开放权限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章