#安装git
1、更新包列表
$ sudo apt-get update
2、install git server
$ apt install git-core
3.create user of git manage
$ adduser git
4.创建仓库并设置权限
$ mkdir -p /home/git/repositories
$ chown git:git /home/git/repositoies
5.初始化仓库并配置所属权限
$ cd /home/git/repositories
$ git init --bare myproject.git
$ chown -R git:git myproject.git
6.为git用户配置ssh公钥
$ vim /etc/ssh/sshd_config
RSAAuthentication yes
PubkeyAuthentication yes
或编辑 /etc/passwd中git用户shell登录为/usr/bin/git-shell:
$ vim /etc/passwd
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
7.重启ssh服务
service ssh restart
克隆:git clone git@ip:/home/git/repositories/myproject.git
***********
自动部署
1git服务器仓库目录中,找到git仓库下hooks目录
2.创建post-receive
#!/bin/bash
# 定义变量
GIT_REPO=$PWD
DEPLOY_PATH=/path/to/your/deploy/directory # 替换为你的部署路径
BRANCH=master # 替换为你想要自动部署的分支名称
# 遍历推送的引用
while read oldrev newrev refname
do
# 检查是否是推送到指定分支
if [ "$refname" = "refs/heads/$BRANCH" ]; then
echo "Ref $refname received. Deploying $BRANCH branch to $DEPLOY_PATH..."
# 切换到部署目录
cd $DEPLOY_PATH || exit
# 清理旧的工作目录(可选)
# rm -rf *
# 拉取最新代码到部署目录(使用 git archive 或 checkout --work-tree)
# 注意:由于这是一个裸仓库,它没有工作目录,所以我们不能直接在这里使用 git pull
# 我们可以使用 git archive 来解压缩代码,或者使用 --work-tree 选项来指定一个工作目录
# 这里我们使用 --work-tree 选项
git --work-tree=$DEPLOY_PATH --git-dir=$GIT_REPO checkout -f $BRANCH
# 可选:执行其他部署操作,如安装依赖、构建项目、重启服务等
# 例如:npm install(针对 Node.js 项目)
# 或者:mvn clean install(针对 Java Maven 项目)
# 或者:systemctl restart your-service(重启服务)
echo "Deployment completed."
fi
done
***********
***客户端生成ssh密钥对,打开Git Bash或其他终端,通常生成于~/.ssh/is_rsa.pub
$ ssh-keygen -t rsa -b 4096 -C "email@example.com"
*把生成的公钥复制到Git服务器用户账户中SSH秘钥部分:~/.ssh/authorized_keys
*客户端测试ssh连接:$ ssh -T git@git服务器地址 成功:欢迎信息,否则失败
***
客户端配置开发者信息
git config --global user.email "email@163.com"
git config --global user.name "name"
#查看提交记录
*基本显示:git log 所有提交记录,从开始按时间顺序显示:哈希值、作者姓名、提交日期、消息
*简介显示:git log --oneline 仅显示哈希值、提交信息
*按作者过滤:git log --author="用户名"
*图形显示:git log --graph 仅显示分支合并、分支拓扑结构
*查看详细信息:git log -p
*统计信息:git log --stat
*结合使用:
你可以结合使用多个参数来定制输出。例如,要以图形的形式以及一行的简洁方式显示提交记录,并显示每个提交的短哈希值和提交消息,可以使用:git log --graph --oneline --abbrev-commit
*使用哈希值查看特定提交:
如果你知道某个提交的哈希值(或部分哈希值),可以使用 git show 命令来查看该提交的详细信息:git show commit_hash
#同时拉取两个远程仓库
1、初始化本地仓库
2、添加远程仓库
$ git remote add 远程仓库名/匿名 远程仓库地址
*删除远程仓库地址:
git remote remove origin
git remote rm origin
例如:
$ git remote add origin git@github.com:usergit/*.git
$ git remote add gitee git@gitee.com:usergit/*.git
3.拉取远程仓库
$ git fetch origin
$ git fetch gitee
4.查看本地与远程仓库分支差异
$ git diff origin/分支名
$ git diff gitee/分支名
5.合并差异到本地分支
$ git merge origin/分支名
推送远程
$ git push origin 分支名
#方法二:
1.克隆第一个仓库
$ git clone <repository-url-1>
2.进入新克隆仓库目录
$ cd repository-name
3.添加第二仓库(可取别名)如:origin2
$ git remote add origin2 <repository-url-2>
4.拉取第二仓库代码
$ git fetch origin2
5.设置追踪远程仓库的特定分支
$ git branch --set-upstream-to=origin2/分支名 本地分支名
6.拉取每个仓库更新
$ git pull origin
$ git pull origin2
配置多个推送地址(改变了git默认行为,可能出错):
$ git remote set-url --add --push origin https://github.com/username/your-repo.git
$ git remote set-url --add --push origin https://gitlab.com/username/your-backup-repo.git
$ git push origin branch-name
不支持配置多个拉取地址,可如下:
$ git config --global alias.fetch-all '!git fetch origin && git fetch upstream'
tag标签:
轻量级标签 不指定commit则默认HEAD
$ git tag 标签名 <commit>
$ git tag v1.0 默认
带注释标签 不指定commit则默认HEAD
$ git tag -a <标签名> -m '标签信息' <commit>
git tag -a v1.0 -m '版本信息'
#查看标签
列出所有标签:$ git tag
列出符合特定模式标签:git tag -l “v*”
#推送标签
*默认情况不会推送标签到仓库,需要显示地推送
*推送单个标签
git push origin <tagname>
*推送所有标签:
git push origin --tags
#删除标签
*删除本地标签
git tag -d <tagname>
*删除远程标签(1先删除本地tag再推送更新)
git push origin <tagname>
或执行如下删除远程标签:
git push origin :refs/tags/<tagname>
*git 2.23+
git push origin --delete <tagname>
#检出标签
可查看标签所执指向的提交
git checkout <tagname>
或
git switch --detach <tagname>
##检出tag对应的提交
git checkout tags/<tagname>
部署:
*克隆并进入项目目录:
$ git fetch --all --tags
$ git checkout tags/<tagname>
#回滚
git reflog查看最近操作(含切换分支/检出tag的记录)
git checkout 分支名
或丢弃所有未提交更改:git reset --hard HEAD……