GIT版本控制系统
第一部分 基本概念
版本库:本地库、公共库
每个开发人员在本地都有自己的版本库,在服务器上有一个公共的版本库。所有的历史记录都存储在本地库中。向版本库提交代码无须连接远程版本库而是记录在本地库中。
版本库中存储什么:和项目相关的所有文件。
工作目录树:又称版本库的“断面视图”,就是项目的整个目录结构。工作目录树创建方法有两个,第一个用Git相关命令初始化版本库生成“.git”目录,于是“.git”的父目录就是工作目录树;第二个方法克隆一个已经存在的版本库(就是拷贝),随之也创建了相应的工作目录树。
代码修改与文件同步:push、pull
Push是一个修改-确认-提交的过程,把自己修改的提交到本地库和公共库,通过这个动作可以让项目组中其他人员看到、获得你做的修改;
Pull是一个取来-合并的过程,方便工作人员从公共库中取来项目中其他人员改动的部分到本地库中并和自己的合并在一起。
标签:版本管理的一个手段,可以理解为具体的版本号。
分支:项目开发中,遇到某些模块需要特别开发或者重写等情况,可以在版本库中创建分支,并行开发。分支的生命周期可以是长期也可能很短。
分支合并:所以的分支、主线都是围绕着项目服务,最终都是向着一个终点目标,这就会发生合并。Git能够自动合并,不能合并时会提示冲突
第二部分 Git服务器安装与设置
1先检查本机是否安装python,在终端输入
:python --version
,能显示处python版本即安装。
2安装 openssh服务器:
sudo apt-get install openssh-server openssh-client
3安装 git服务器 :
sudo apt-get install git-core
4配置 git服务器,创建git服务器管理用户 :
sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git
初始化全局设置 (设定用户名和邮箱):
git config --global user.name"myname"
git config --global user.email"myname@server"
5管理员在个人计算机上创建个人公钥和私钥 ,在默认用户的主目录路径下,运行以下命令,按照提示创建公钥和私钥:
ssh-keygen -t rsa
默认情况下,公钥和私钥会保存在~/.ssh目录下,如下所示:
id_rsa id_rsa.pub known_hosts 把id_rsa.pub拷贝到服务器上初始化gitosis用
6安装python的setuptool:
sudo apt-get install python-setuptools
7下载并安装gitosis :选定目录为src
cd /src
git clone git://eagain.net/gitosis.git
cd gitosis
sudo python setup.py install
8初始化gitosis 并让他运行起来 此处用来配置超级管理员
cp ~/***/id_rsa.pub /src/id_rsa.pub
sudo -H -u gitgitosis-init < /src/id_rsa.pub
9修改post-update权限:
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
10.管理员在自己的机器上clone gitosis管理平台
git clone git@192.168.17.109:gitosis-admin.git
Initializedempty Git repository in /usr/local/work/gitosis-admin/.git/
remote:Counting objects: 5, done.
remote:Compressing objects: 100% (4/4), done.
remote:Total 5 (delta 0), reused 5 (delta 0)
Receivingobjects: 100% (5/5), done.
11安装完成,在管理员PC上进入上一步clone形成的gitosis-admin目录修改gitosis用户权限,添加用户的公密到keydir,修改完后commit、push到服务器即可完成仓库权限的相关操作
第三部分 Git客户端安装
Linux中安装git:
sudo apt-get install git-core git-docgit-gui git-svn git-cvs gitweb git-daemon-run git-email git-arch gitk
git安装包说明:
git-core 、git-doc包是git的核心程序,它只包括最小的依赖关系,如果只安装git包的话,那么一些git的外围扩展将无法使用。
git-gui包是一个基于Tk的git程序,是带有GUI的,可以用鼠标点击操作的git。
git-svn包用于支持从svn仓库导入到git仓库
git-cvs包用于支持从cvs仓库导入到git仓库。
gitweb包则是一个成熟的基于web的用于git仓库管理的web程序
git-daemon-run包用于支持用户使用git://形式的命令来访问git仓库。
git-email包支持使用git发送邮件。
git-arch包是为了兼容arch仓库的。大家或许听说过linux的发行版本arch,但现在说的arch和这个发行版本似乎没有必然关系。git-arch中的arch是gnu arch,它是一个类似于cvs、sccs、svn的版本控制系统。git-arch包用于支持从gnu arch仓库导入到git仓库。
gitk包是一个带有Tcl/Tk GUI的可以用来浏览git仓库历史信息的桌面程序。
检测安装是否成功:
在终端输入git
测试下是否成功安装 git,出行如下表示提示成功
usage: git [--version] [--exec-path[=GIT_EXEC_PATH]][--html-path]
[-p|--paginate|--no-pager] [--no-replace-objects]
[--bare][--git-dir=GIT_DIR] [--work-tree=GIT_WORK_TREE]
[--help] COMMAND [ARGS]
The most commonly used git commands are:
add Addfile contents to the index
bisect Find by binary searchthe change that introduced a bug
branch List, create, ordelete branches
checkout Checkout a branch or paths to theworking tree
clone Clone arepository into a new directory
commit Record changes to therepository
diff& nbsp; Show changesbetween commits, commit and working tree, etc
fetch Downloadobjects and refs from another repository
grep Printlines matching a pattern
init Create anempty git repository or reinitialize an existing one
log Show commit logs
merge Join two ormore development histories together
mv Move or rename a file, a directory, or a symlink
pull Fetchfrom and merge with another repository or a local branch
push Updateremote refs along with associated objects
rebase Forward-port loca lcommits to the updated upstream head
reset Reset currentHEAD to the specified state
rm Remove files from the working tree and from the index
show Showvarious types of objects
status Show the working treestatus
tag Create, list, delete or verify a tag object signed with GPG
See 'git help COMMAND' for more information on a specificcommand.
Windows中安装git:
Windows中安装git:通过linux仿真器Cygwin安装和运行git
Git安装成功后设置
主要设置name和email两个全局变量。name用来说明版本历史上的修改是谁提交的,email用来联系修改者。
在终端上输入 如下进行配置:
git config --global user.name “XXXX”
git config --global user.email XXXX@XXXX.com
用下面的命令检查上述设置是否成功:
git config --global --list
user.name = XXXX
user.email = XXXX@XXXX.com
使用不同的颜色显示不同类型的内容
git config --global color.ui “auto”
取消颜色
git config --global color.ui “false”
第四部分 Git项目简单应用
GIT系统管理员部分:
1.管理员在自己的机器上clonegitosis管理平台
git clone git@192.168.xx.xx:gitosis-admin.git
Initialized empty Git repository in /usr/local/gitmanage/gitosis-admin/.git/
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
Initialized empty Git repository in /usr/local/gitmanage/gitosis-admin/.git/
remote: Counting objects: 5, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done.
出现上面的信息说明管理员成功的把管理平台clone到自己的PC机上。在gitmanage目录下会产生gitosis-admin目录
在这个目录下有gitosis.conf 配置文件和 keydir目录。修改gitosis.conf管理gitosis用户权限,keydir保存用户的公钥(一个pub文件)。修改完成后commit、push到服务器即完成系统管理员的相关操作,操作过程如下:
首次打开gitosis.conf文件如下所示
groupgitosis-admin 表示系统管理组;
writable 表示权限类别
members 表示管理组的成员
接下来管理员配置用户及项目,如下所示:
这个过程中往系统中添加了用户lds(以添加卢德山为例,lds为他pc机用户名),并给他赋了相关项目的权限。上面配置了textproj和uboot两个工程,writable表示读写权限,readonly表示只读权限。
如何向系统添加:用户在自己的PC机终端上执行ssh-keygen -t rsa 命令,生成id_rsa.pub把其重命名为lds交给系统管理员,系统管理员拷贝到gitosis-admin目录下的keydir目录即可,之后执行如下命令把这些配置提交到服务器:
git add .
git commit –am “addmembers and project”
git push
项目管理者,提交项目及管理过程
注:在新项目提交之前一定要先在gitosis.conf文件中配置这个项目,如下面要提交的textproj项目,提交之前在gitosis.conf已经配置好,如上图所示。
1.新建项目textproj及提交,过程如下:
mkdir textproj
cd textproj
git init
touch hello.txt
git add hello.txt 或者 git add .
git commit -am 'first commit'
git remote add origin git@192.168.xx.xx:textproj.git
git push origin master
2.提交现有的项目,和上面的稍微有一点区别。直接进入到要提交的项目目录,执行如下命令:
cd 项目目录
git init
git add .
git commit -am “注释说明”
git remote add origin git@192.168.xx.xx:项目目录名.git
git push origin master
3.更新现有的项目,过程如下:
cd 项目目录
git pull
普通开发人员使用方法
1首先从服务器上clone版本库,以上面的textproj为例,在终端执行如下:
git clonegit@192.168.17.109:git-testproj.git
成功后产生textproj工程目录,进入到目录下即可开始开发工作。
2.开发人员提交自己的工作,还是以上面的textproj为例,在终端执行如下:
假设开发人员对工程中的hello.txt进行了修改
git addhello.txe (或者git add .)
gitcommit –am“注释说明”
git push
3.更新现有的项目,过程如下:
cd 项目目录
git pull