Git系列——Git部署及应用

下面从如下几个方面介绍下其部署及应用:

Git服务器搭建

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研发的

Git客户端搭建

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 //使配置生效

Git常用命令

一般推荐直接使用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提交

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值