赞
踩
下面从如下几个方面介绍下其部署及应用:
Git服务器搭建
Git客户端搭建
Git常用命令
Linux服务器搭建(Centos7.5):
一、安装配置SSH(参考XXX)
二、检查OS是否自带Git
1、git-version //查询版本
2、rpm -qa git //查询git详细信息
3、yum -y remove xxx //删除存在的git
三、新安装Git
1、cd /home //切换到home目录
2、mkdir /git //新建git目录
3、cd /home/git //切换到新建git目录下
4、yum -y install git //安装git
四、服务器端配置git
1、groupadd gitgrp //创建git用户组,gitgrp
2、useradd -m -g gitgrp gituser //创建用户gituser,隶属于用户组gitgrp
3、passwd gitpwd //设置用户密码 gitpwd
4、chmod 755 /home/git //修改/home/git目录权限
5、su gituser //切换到gituser用户
6、cd /home/git //切换到git所在目录
7、mkdir .ssh && chmod 700 .ssh //创建.ssh文件,并赋予操作权限
8、touch .ssh/authorized_keys && chmod600 .ssh/authorized_keys //创建公钥存储文件authorized_keys文件并赋予权限
五、服务器端创建git仓库
1、mkdir /home/git/repository //新建仓库目录
2、git init --bare/home/git/repository/gitrptest.git //创建仓库gitrptest.git
3、chown -R gitgrp:gituser /home/git/repository/gitrptest.git //将用户组及用户授权访问仓库gitrptest.git
六、安全处理
1、禁用gituser的ssh登录(若不禁用,加入公钥列表的用户,都能直接访问服务器,如:ssh gitsuer@ip
1)、nano /etc/passwd //打开密码文件
2)、按pagedown(PgDn)翻到下面,找到git:账户
3)、修改git用户权限
git:x:1001:1001:,,,:/home/git:/bin/bash 修改为:git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
七、客户端创建公钥
1、例如window下使用cmd、powershell、git bash里都可以执行,推荐git bash(在任意空白处右键,点击Gitbash here)
ssh-keygen -trsa //执行命令生成本地公钥
2、在用户/xxx(当前系统用户)/.ssh下有两个文件 id_rsa 和id_rsa.pub, 后面这个就是新生成的公钥
八、上传公钥到服务器并加入服务器公钥文件内(authorized_keys)
1、将刚创建的本地公钥文件id_rsa_pub文件copy到git服务器localrsa目录
scpid_rsa_put gituser@ip:/home/git/localrsa (弹出窗口按提示输入yes gituser的密码, 即可上传到服务器)
2、在服务器端追加刚上传的本地公钥文件到authorized_keys
cat /home/git/localrsa/id_rsa_pub >> /home/git/.ssh/authorized_keys
3、可以查看服务器公钥文件内容
1)、使用vi查看,具体操作自行查找
2)、head -n x /home/git/authorized_key //查看文件前x行内容, x为具体数量
九、团队权限管理
Git是为了管理Linux的源代码而开发的,延续了开源精神,所以没有提供权限管理,但提供了hook,可以直接控制git操作,做到权限管理。
下面有几种方式可以实现权限管理:
1、收集客户端公钥:共用gituser(这种方式使用简单,但不能做到实际的权限管理)
2、采用Gitosis:通过构建一个特殊的仓库来方便集中管理公钥,通过其配置文件实现权限管理
3、采用Gitolite:通过git用户和git进行通讯,用Python编写的,自己本身采用虚拟账户来进行权限管理,做到向SVN一样的权限控制
Windows服务器搭建(windows server 2012):
在windows平台下可以使用如下两种方式搭建Git服务器,Bonobo Git Server 和 Gitblit, 可根据自行条件选择。
两种方式本质上一样都是开发一套web应用集中管理用户及文件,底层仍旧是通过git来实现,都比较简单,自行查找搭建方式。
1、Bonobo Git Server (https://bonobogitserver.com)采用ASP.NET研发的
2、Gitblit (http://www.gitblit.com)采用Java研发的
Linux(centos7.5)客户端:
在centos下有两种安装方式,都比较简单:
一、通过yun命令安装
1、yum remove git //卸载旧版本
2、yum install -y git //安装 yum 源的 Git 版本(注意:该源下一般git版本都比较旧)
3、git version //查看版本
4、配置环境变量
vim ~/.bashrc //文件末尾添加如下内容:
exportPATH="/usr/local/git/bin:$PATH"
source~/.bashrc //使配置生效
二、下载源代码编译安装
1、yum install -y wget //若没有wget,先安装
2、//下载目标版本,例如v2.39.2.tar.gz
wgethttps://github.com/git/git/archive/refs/tags/v2.39.2.tar.gz
3、tar v2.39.2.tar.gz //解压
4、cd v2.39.2 //进入目录
5、./configure --prefix=/usr/local/git //配置安装路径, 可自行定义
6、make && make install //编译安装
7、配置环境变量
vim ~/.bashrc //文件末尾添加如下内容:
exportPATH="/usr/local/git/bin:$PATH"
source~/.bashrc //使配置生效
一般推荐直接使用GUI工具使用Git,例如:TortoiseGit
A、git配置命令
1、git config -l //查看当前git环境详细配置
2、git config --system --list //查看系统config
3、git config --global --list //查看当前用户配置
4、git config --local --list //查看当前仓库配置信息
5、git config [--local][--global][--system]section.key value //修改git配置
6、git config --local user.name xxx //设置当前项目的用户名
7、git config --global core.quotepathfalse //配置当前用户的编码项,可以解决中文编码问题
8、git config --local core.ignorecasefalse //配置当前项目不忽略文件大小写,git默认忽略文件名的大小写,这点值得注意
B、git操作命令
1、初始化、远程仓库
1.1 初始化
git init //进入当前目录执行,创建一个本地库
1.2 远程仓库
git remote -v //显示所有远程仓库
git remote show[remote] //显示某个远程仓库
git remote add[shortname] [url] // 添加远程仓库
git remote rmname //删除远程仓库
git remote renameold_name new_name //修改仓库名
2、克隆
git clone //克隆一个版本库,主要有3种形式:
用法1 : git clonegituser@ip:/home/git/repository/gitrptest.git 当前目录
说明:克隆一个选定版本库到当前目录,相当于copy了一个选定版本库的副本(称之为非裸版本库),里面有着一样的工作区,一样的 .git目录。差别是新克隆出来的这个版本库里的.git/config文件会记录上游版本库repository的位置。
用法2 : git clone --baregituser@ip:/home/git/repository/gitrptest.git 当前目录
说明:克隆出来的版本库不包括工作区,直接就是版本库的内容(即.git目录里的内容)。称之为裸版本库。
用法3 : git clone --mirrorgituser@ip:/home/git/repository/gitrptest.git 当前目录
说明:也是克隆出一个裸版本库。但可以通过git fetch命令与上游版本库持续同步。
3、添加、提交、回退、修改、删除、查看
3.1 添加(将工作区的文件添加到暂存区)
git add dir1 //指定目录,包括目录下的所有文件和子目录
git add fileName1,fileName2 //指定文件
git add . //所有
3.2 提交(将暂存区内容提交到本地库)
git commit -m '描述' fileName //-m 表示同时提交描述信息
git commit [file1][file2] ... -m [message] //提交指定文件
git commit -am '描述' //-a 表示修改文件后不需要执行 git add 命令,直接来提交
git revertHEAD //撤销最近的一个提交
git revert 版本号 // 撤销某次commit
3.3 回退
git reset [--soft| --mixed | --hard] [HEAD]
--mixed 为默认,可以不用带该参数,用于重置暂存区的文件与上一次的提交(commit)保持一致,工作区文件内容保持不变。
git resetHEAD^ //回退所有内容到上一个版本
git reset HEAD^hello.php //回退 hello.php 文件的版本到上一个版本
git reset xxx指针 //回退到指定版本
git reset HEADfile //回退已缓存的文件
--soft 参数用于回退到某个版本
git reset --softHEAD~3 //回退上上上一个版本
--hard 参数撤销工作区中所有未提交的修改内容,将暂存区与工作区都回到上一次版本,并删除之前的所有信息提交:
git reset --hardHEAD~3 //回退上上上一个版本
git reset –hard bae128 //回退到某个版本回退点之前的所有信息。
git reset --hardorigin/master //将本地的状态回退到和远程的一样
注意:谨慎使用 –-hard 参数,它会删除回退点之前的所有信息。
HEAD 说明:
HEAD 表示当前版本
HEAD^ 上一个版本
HEAD^^ 上上一个版本
HEAD^^^ 上上上一个版本
以此类推...
可以使用 ~数字表示
HEAD~0 表示当前版本
HEAD~1 上一个版本
HEAD^2 上上一个版本
HEAD^3 上上上一个版本
以此类推...
3.4修改
git mv [file][newfile] //移动或重命名一个文件、目录或软连接(linux下的目录映射,俗称软连接)
git mv -f [file][newfile] //-f 参数 表示新文件名已经存在,但还是要重命名它
3.5 删除
git rm<file> //将文件从暂存区和工作区中删除
git rm -f<file> //强行从暂存区和工作区中删除修改后的文件
git rm --cached<file> //把文件从暂存区域移除,但仍然保留在当前工作目录中
git rm –r * //执行此语句,会删除当前目录下的所有文件和子目录
git clean -df //加-d是指包含目录,加-f是指强制,删除所有未跟踪的文件
3.6 查看
git status //查看工作区、暂存区状态,在你上次提交之后是否有对文件进行再次修改。
git status -s //-s 参数来获得简短的输出结果
git diff HEAD //查看已缓存的与未缓存的所有改动
git diff --statHEAD //显示摘要而非整个diff
git diff[file] //显示暂存区和工作区的差异
git diff --cached[file] //显示暂存区和上一次提交(commit)的差异
git diff[first-branch]...[second-branch] //显示两次提交之间的差异
git log //查看历史日志
git log --oneline//历史记录的简洁的版本
git log --graph--oneline //历史记录的简洁的版本,同时展现分支、合并情况
git log--pretty=oneline //漂亮一行显示
git log --reverse--oneline //逆向显示
git log --author=某个用户 --oneline -n //显示某用户的最近n次日志
git blame<file> //查看指定文件的日志
git reflog //显示操作本地版本库的命令
4、拉取
4.1 拉取
git pull <远程主机名> <远程分支名>:<本地分支名>
git pull originmaster:brantest //将远程主机 origin 的 master 分支拉取过来,与本地的 brantest 分支合并。
git pull originmaster //如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
注意:git pull 其实就是 git fetch 和 git merge FETCH_HEAD 的简写。
4.2 fetch
git fetch [仓库] //拉取仓库
4.3 merge
git merge [仓库]/[branch] //将远程分支合并到当前分支
5、推送(将本地的分支版本上传到远程并合并,正常情况需要保证远程目标分支必须是本地分支的祖先)
git push <远程主机名> <本地分支名>:<远程分支名>
git push <远程主机名> <本地分支名> //本地分支名与远程分支名相同,则可以省略冒号:
push文件, 新建任意文件,例如:test.txt
git add -A //添加所有文件
git commit //提交文件
git push originmaster <=> git push originmaster:master //推送本地master分支到服务器主分支,远程克隆下的仓库,默认主分支名称叫:origin
git push -f originmaster //强制提交,正常情况需要保证目标分支必须是本地分支的祖先
git push origin--delete master //删除远程主机的分支可以使用 --delete 参数,以下命令表示删除origin 主机的 master 分支:
6、分支管理
git branch //列出所有分支
git branch(branchname) //新建分支
git checkout(branchname) //切换分支
git checkout -b(branchname) //-b表示创建新分支并立即切换到该分支下
git branch -d(branchname) //删除分支
//合并分支,先切换到要合并到的分支,然后merge需要合并的分支
git checkout (要合并到的目标分支)
git merge (被合并的分支)
例如:下面表示将otherbranc分支合并到master分支
git checkoutmaster
git mergeotherbranch
7、tag管理
git tag //查看所有标签
git tag -a <tagname> //执行打标签,会弹出输入标签描述
git tag -a<tagname> <分支号> //给某个分支追加标签
例如:git tag -a v0.9 85fc7e7
git tag -a <tagname>-m "描述" //创建标签并同时添加描述信息
git tag -s<tagname> -m "描述" //用自己的私钥签署标签
git show <tagname> //查看某个标签信息
git push<origin> <tagname> //将tagname标签推送到远程仓库
git push<origin> --tags //一次性推送全部尚未推送到远程的本地标签
//删除远程标签
git tag -d<tagname> //先删除本地标签
git push<origin> :refs/tags/<tagname> //删除远程标签
8、变基
git rebase masterfeature //将feature分支的基地址变更到master上
等价于下面两个命令
git checkoutfeature
git rebase master
git rebase -imaster feature //-i 表示以交互式方式执行,可以人工干预进行或终止
git rebase--continue; //让 rebase 过程继续执行。
git rebase--abort; //发生代码冲突后,放弃合并,回到操作前的样子。
rebase主要优点:
1、将当前分支的commit记录也合并到目标分支上
2、不会产生多余的合并提交commit,合并比较干净
3、可以回退到合并上来的分支上的某天commit提交
rebase主要缺点:
1、执行变基后就不知道最初是从那个节点上拉取的分支了
2、若commit提交过多,会执行多次解决冲突
注意:rebase和merge都是合并代码,二者可理解为互反
例如:将A分支合并到B分支, 一种是rebase操作,一种是merge操作
rebase:
git rebase A B
等价于
git checkout B
git rebase A
merger:
git checkout B
git merge A
merger主要优点:
1、直接一次解决完冲突
merge主要缺点:
1、会产生一条多余的合并commit记录
2、待合并分支上的所有commit提交记录都丢弃了
3、没办法再回退到合并分支的某个commit提交
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。