androidapachebackendcentoscentos8.4commandcomposercrontabcurldesigndevelopdockerelasticfinancingfirewallfrontendgatewaygitgolanghybridiisiptablesjavajenkinskuberneteslaravelluamacmemcachemigrationmongodbmysqlnginxnodejsofficeopenrestyopensslperformancephpproductionredisregexprestfulsecurityshadowsocksshellsnippetsshstartupteamtraintravelunitvmwarevsftpwindowsworkwwwyaf

Git

部署 Git

安装 Git

yum install git

生成 id_rsa

ssh-keygen -t rsa

.ssh权限

chmod 400 ~/.ssh/id_rsa

全局Git配置

# 默认用户名
git config --global user.name "Lay"

# 默认 Email
git config --global user.email "veryide@qq.com"

# 存储密码
git config --global credential.helper store

克隆已有项目

# 初始化
git init
git remote add origin git@git.oschina.net:bangbang/TPS.git

# 完整克隆
git pull

# 只克隆最近一次commit
git pull --depth 1

# 检出
git checkout master

复制已有缓存和配置文件

\cp -r -f -p /disk/www/rj.shihuizhu.com/attach/ /disk/www/rj.shz.com/
\cp -r -f -p /disk/www/rj.shihuizhu.com/config/ /disk/www/rj.shz.com/
\cp -r -f -p /disk/www/rj.shihuizhu.com/cached/ /disk/www/rj.shz.com/

撤销已经推送(push)至远端仓库的提交(commit)

# 查看提交信息,获取要回退的版本号
git log

# 重置至指定版本的提交
git reset –soft <版本号>

# 强制提交当前版本号
git push origin master –force

生产环境定时拉取项目

crontab 脚本

# 项目自动更新(每天9:00 - 22:00,每10分钟执行一次)
*/10 9-22 * * * /disk/shell/gitpull.sh > /var/log/gitpull.log

# 主动拉取带 .gitlock 的项目(最好安排在机器重启之前)
25 04 * * * git --git-dir=/disk/www/Messager/.git --work-tree=/disk/www/Messager/ pull

sh 执行权限

chmod +x /disk/shell/gitpull.sh

Git hooks

hooks 位置

$GIT_DIR/hooks/* (or git config core.hooksPath/*)

权限设置

chmod +x .git/hooks/post-merge

.git/hooks/pre-commit

#!/bin/sh
# 自动更新版本号

php vendor/gitbuild.php

#!/bin/sh
# 禁止提交某些文件

git diff --cached --name-status | while read status file; do
    # do a check only on the .bak files
    if [[ ${file##*.} =~ \.bak$ ]] ; then
        echo "Please remove *.bak files before committing"
        exit 1
    fi
done

.git/hooks/post-merge

#!/bin/sh
# 自动刷新模块缓存

php vendor/gitmerge.php

#!/bin/sh
# 生产环境打包部署

npm install && npm run build

常见错误

packet_write_wait: Connection to 192.168.1.11 port 22: Broken pipe

echo IPQoS lowdelay throughput >> ~/.ssh/config

常用命令

# 强制重置工作区
git reset --hard

# 还原文件更改状态
git checkout -- file.txt

# 添加至暂存区
git add

# 交互式添加
git add–interactive

# 应用补丁
git apply

# 应用邮件格式补丁
git am

# 同义词,等同于 git blame
git annotate

# 文件归档打包
git archive

# 二分查找
git bisect

# 文件逐行追溯
git blame

# 分支管理
git branch

# 版本库对象研究工具
git cat-file

# 检出到工作区、切换或创建分支
git checkout

# 提交拣选
git cherry-pick

# 图形化提交,相当于 git gui 命令
git citool

# 清除工作区未跟踪文件
git clean

# 克隆版本库
git clone

# 提交
git commit

# 查询和修改配置
git config

# 通过里程碑直观地显示提交ID
git describe

# 差异比较
git diff

# 最近一个版本比较
git diff HEAD~1
git diff HEAD~1 --name-only

# 调用图形化差异比较工具
git difftool

# 获取远程版本库的提交
git fetch

# 创建邮件格式的补丁文件。参见 git am 命令
git format-patch

# 文件内容搜索定位工具
git grep

# 帮助
git help

# 版本库初始化
git init

# 同义词,等同于 git init
git init-db*

# 显示提交日志
git log

# 分支合并
git merge

# 图形化冲突解决
git mergetool

# 重命名
git mv

# 拉回远程版本库的提交
git pull

# 推送至远程版本库
git push

# 分支变基
git rebase

# 交互式分支变基
git rebase–interactive

# 分支等引用变更记录管理
git reflog

# 远程版本库管理
git remote

# 同义词,等同于 git config
git repo-config*

# 重置改变分支“游标”指向
git reset

# 重置到上一次成功的 commit
git reset --hard FETCH_HEAD

# 将各种引用表示法转换为哈希值等
git rev-parse

# 反转提交
git revert

# 删除文件
git rm

# 显示各种类型的对象
git show

# 同义词,等同于 git add
git stage*

# 保存和恢复进度
git stash

# 显示工作区文件状态
git status

# 里程碑管理
git tag

对象库操作相关命令

# 从树对象创建提交
git commit-tree

# 从标准输入或文件计算哈希值或创建对象
git hash-object

# 显示工作区和暂存区文件
git ls-files

# 显示树对象包含的文件
git ls-tree

# 读取标准输入创建一个里程碑对象
git mktag

# 读取标准输入创建一个树对象
git mktree

# 读取树对象到暂存区
git read-tree

# 工作区内容注册到暂存区及暂存区管理
git update-index

# 创建临时文件包含指定 blob 的内容
git unpack-file

# 从暂存区创建一个树对象
git write-tree

引用操作相关命令

# 检查引用名称是否符合规范
git check-ref-format

# 引用迭代器,用于shell编程
git for-each-ref

# 显示远程版本库的引用
git ls-remote

# 将提交ID显示为友好名称
git name-rev

# 显示版本范围
git rev-list

# 显示分支列表及拓扑关系
git show-branch

# 显示本地引用
git show-ref

# 显示或者设置符号引用
git symbolic-ref

# 更新引用的指向
git update-ref

# 校验 GPG 签名的Tag
git verify-tag

版本库管理相关命令

# 显示松散对象的数量和磁盘占用
git count-objects

# 版本库重构
git filter-branch

# 对象库完整性检查
git fsck

# 同义词,等同于 git fsck
git fsck-objects*

# 版本库存储优化
git gc

# 从打包文件创建对应的索引文件
git index-pack

# 过时,请使用 git fsck –lost-found 命令
git lost-found*

# 从标准输入读入对象ID,打包到文件
git pack-objects

# 查找多余的 pack 文件
git pack-redundant

# 将引用打包到 .git/packed-refs 文件中
git pack-refs

# 从对象库删除过期对象
git prune

# 将已经打包的松散对象删除
git prune-packed

# 为本地版本库中相同的对象建立硬连接
git relink

# 将版本库未打包的松散对象打包
git repack

# 读取包的索引文件,显示打包文件中的内容
git show-index

# 从打包文件释放文件
git unpack-objects

# 校验对象库打包文件
git verify-pack

数据传输相关命令

# 执行 git fetch 或 git pull 命令时在本地执行此命令,用于从其他版本库获取缺失的对象
git fetch-pack

# 执行 git push 命令时在远程执行的命令,用于接受推送的数据
git receive-pack

# 执行 git push 命令时在本地执行的命令,用于向其他版本库推送数据
git send-pack

# 执行 git archive –remote 命令基于远程版本库创建归档时,远程版本库执行此命令传送归档
git upload-archive

# 执行 git fetch 或 git pull 命令时在远程执行此命令,将对象打包、上传
git upload-pack

邮件相关命令

# 将补丁通过 IMAP 发送
git imap-send

# 从邮件导出提交说明和补丁
git mailinfo

# 将 mbox 或 Maildir 格式邮箱中邮件逐一提取为文件
git mailsplit

# 创建包含提交间差异和执行PULL操作地址的信息
git request-pull

# 发送邮件
git send-email

协议相关命令

# 实现Git协议
git daemon

# 实现HTTP协议的CGI程序,支持智能HTTP协议
git http-backend

# 即时启动浏览器通过 gitweb 浏览当前版本库
git instaweb

# 受限制的shell,提供仅执行Git命令的SSH访问
git shell

# 更新哑协议需要的辅助文件
git update-server-info

# 通过HTTP协议获取版本库
git http-fetch

# 通过HTTP/DAV协议推送
git http-push

# 由Git命令调用,通过外部命令提供扩展协议支持
git remote-ext

# 由Git命令调用,使用文件描述符作为协议接口
git remote-fd

# 由Git命令调用,提供对FTP协议的支持
git remote-ftp

# 由Git命令调用,提供对FTPS协议的支持
git remote-ftps

# 由Git命令调用,提供对HTTP协议的支持
git remote-http

# 由Git命令调用,提供对HTTPS协议的支持
git remote-https

# 协议扩展示例脚本
git remote-testgit

版本库转换和交互相关命令

# 导入Arch版本库到Git
git archimport

# 提交打包和解包,以便在不同版本库间传递
git bundle

# 将Git的一个提交作为一个CVS检出
git cvsexportcommit

# 导入CVS版本库到Git。或者使用 cvs2git
git cvsimport

# Git的CVS协议模拟器,可供CVS命令访问Git版本库
git cvsserver

# 将提交导出为 git-fast-import 格式
git fast-export

# 其他版本库迁移至 Git 的通用工具
git fast-import

# git 作为前端操作 Subversion
git svn

合并相关的辅助命令

# 供其他脚本调用,找到两个或多个提交最近的共同祖先
git merge-base

# 针对文件的两个不同版本执行三向文件合并
git merge-file

# 对index中的冲突文件调用指定的冲突解决工具
git merge-index

# 合并两个以上分支。参见 git merge 的 octopus 合并策略
git merge-octopus

# 由 git merge-index 调用的标准辅助程序
git merge-one-file

# 合并使用本地版本,抛弃他人版本。参见 git merge 的ours合并策略
git merge-ours

# 针对两个分支的三向合并。参见 git merge 的recursive合并策略
git merge-recursive

# 针对两个分支的三向合并。参见 git merge 的resolve合并策略
git merge-resolve

# 子树合并。参见 git merge 的 subtree 合并策略
git merge-subtree

# 显式三向合并结果,不改变暂存区
git merge-tree

# 供执行合并操作的脚本调用,用于创建一个合并提交说明
git fmt-merge-msg

# 重用所记录的冲突解决方案
git rerere

其他命令

# 由 git bisect 命令调用,确认二分查找进度
git bisect–helper

# 显示某个文件是否设置了某个属性
git check-attr

# 从暂存区拷贝文件至工作区
git checkout-index

# 查找没有合并到上游的提交
git cherry

# 比较暂存区和工作区,相当于 git diff –raw
git diff-files

# 比较暂存区和版本库,相当于 git diff –cached –raw
git diff-index

# 比较两个树对象,相当于 git diff –raw A B
git diff-tree

# 由 git difftool 命令调用,默认要使用的差异比较工具
git difftool–helper

# 从 git archive 创建的 tar 包中提取提交ID
git get-tar-commit-id

# 命令 git gui 的获取用户口令输入界面
git gui–askpass

# 提交评论管理
git notes

# 补丁过滤行号和空白字符后生成补丁唯一ID
git patch-id

# 将Quilt补丁列表应用到当前分支
git quiltimport

# 提交替换
git replace

# 对 git log 的汇总输出,适合于产品发布说明
git shortlog

# 删除空行,供其他脚本调用
git stripspace

# 子模组管理
git submodule

# 显示 Git 环境变量
git var

# 启动浏览器以查看目录或文件
git web–browse

# 显示提交历史及每次提交的改动
git whatchanged

# 包含于其他脚本中,提供合并/差异比较工具的选择和执行
git-mergetool–lib

# 包含于其他脚本中,提供操作远程版本库的函数
git-parse-remote

# 包含于其他脚本中,提供 shell 编程的函数库
git-sh-setup

相关链接