Git(2) 实用技巧:打包、补丁、环境切换、修改记录和加速

简介: Git实用技巧包括:打包差异文件或补丁、在Git和Repo环境间切换、批量修改提交记录中的用户名和邮箱、设置Git命令别名以及解决下载速度慢和超时问题。这些技巧能提升Git使用效率和便捷性。

Git实用技巧:打包、补丁、环境切换、修改记录和加速

Git是一个非常强大和灵活的分布式版本控制系统,它可以帮助我们高效地管理代码,协作开发,追踪变更,解决冲突等。但是Git也有一些不太常用或者不太熟悉的功能和技巧,如果掌握了这些技巧,可以让我们的Git使用更加方便和高效。

本文将介绍以下几个Git实用技巧:

  • Git打包差异化:如何使用Git打包不同版本或者不同分支之间的差异文件或者补丁文件。
  • Git环境和Repo环境切换:如何在使用Repo工具同步代码时,切换到Git管理环境,以便使用Git命令。
  • Git批量修改Git Commit记录里的用户名和邮箱:如何在提交历史中批量修改错误的用户名或者邮箱信息。
  • Git命令别名设置:如何为常用的Git命令设置简短的别名,以便快速输入。
  • Git下载很慢问题解决方案:如何使用镜像链接或者浏览器插件来加速Git下载速度。
  • Github/googlesource/chromium下载Timed out解决办法:如何在终端中设置代理来解决下载超时的问题。

一、Git打包差异化

有时候我们需要把不同版本或者不同分支之间的差异文件或者补丁文件打包成一个压缩文件,以便于传输或者备份。Git提供了一些命令来实现这个功能。

差异文件打包

如果我们想要打包当前工作区与暂存区之间的差异文件,可以使用以下命令:

git diff --name-only | xargs zip dmtseic.zip

这个命令会把git diff --name-only输出的文件名作为参数传递给xargs命令,然后用zip命令把这些文件压缩成一个名为dmtseic.zip的文件。

两次提交差异文件打包

如果我们想要打包两次提交之间的差异文件,可以使用以下命令:

git diff f8a726 909e0e --name-only | xargs zip consumer_vstorage.zip

这个命令会把两次提交f8a726909e0e之间的差异文件名输出,并用zip命令把这些文件压缩成一个名为consumer_vstorage.zip的文件。

最后一次提交文件打包

如果我们想要打包最后一次提交所涉及的文件,可以使用以下命令:

git show --name-only | xargs zip last.zip

这个命令会把最后一次提交所修改或者添加的文件名输出,并用zip命令把这些文件压缩成一个名为last.zip的文件。

打包指定的commit_id

如果我们想要打包指定提交所修改或者添加的文件,可以使用以下命令:

git diff-tree -r --no-commit-id --name-only --diff-filter=ACMRT $commit_id | xargs tar -rf mytarfile.tar

这个命令会把指定提交所修改(M)、添加(A)、复制(C)、重命名(R)或者修改类型(T)的文件名输出,并用tar命令把这些文件压缩成一个名为mytarfile.tar的文件。其中,$commit_id是要打包的提交的ID,可以是完整的40位哈希值,也可以是简写的前几位。

差异补丁打包

如果我们想要打包不同版本或者不同分支之间的差异补丁,可以使用以下命令:

git format-patch -M master

这个命令会把当前分支与master分支之间的差异补丁打包成一个或者多个以.patch为后缀的文件。我们可以使用不同的选项来指定打包的范围,例如:

  • git format-patch -s 3005d6bfce45321dab853a3fa3724469acc84df7:打包从指定提交到最新提交之间的补丁。
  • git format-patch --root 3005d6bfce45321dab853a3fa3724469acc84df7:打包从根提交到指定提交之间的补丁。
  • git format-patch 3005d6..1f1342:打包两次提交之间的补丁。
  • git format-patch –n 3005d6:打包指定提交(含)之前的n次提交。

我们还可以使用其他参数来修改打包的结果,例如:

  • --numbered-files:只使用编号作为文件名,不包含提交信息。
  • --stdout:指定输出位置,例如当所有补丁输出到一个文件。
  • -o <dir>:指定补丁的存放目录。

检查和应用补丁

如果我们想要检查或者应用已经打包好的补丁文件,可以使用以下命令:

git apply --stat 0001-limit-log-function.patch
#查看补丁的情况
git apply --check 0001-limit-log-function.patch
#检查补丁是否能够应用成功,如果没有任何输出,则说明无冲突,可以应用
git apply 0001-limit-log-function.patch  
#应用补丁,但不会自动提交
git am 0001-limit-log-function.patch  
#应用并提交补丁,会保留原来的提交信息

二、Git环境和Repo环境切换

Repo是一个基于Git的工具,它可以帮助我们管理多个Git仓库。它常用于Android开发中,因为Android系统由很多个Git仓库组成。当我们使用Repo工具同步代码时,我们需要切换到Repo管理环境,以便使用Repo命令。当Repo同步完成后,我们需要切换到Git管理环境,以便使用Git命令

切换到Repo环境

当我们需要用Repo同步最新的代码时,可以使用以下脚本切换到Repo环境:

#! /bin/sh
gits=`find . -name .git`
for git in $gits
do
mv $git ${git}-bak
done
gitignores=`find . -name .gitignore`
for gitignore in $gitignores
do
mv $gitignore ${gitignore}-bak
done

这个脚本会把所有.git.gitignore文件重命名为.git-bak.gitignore-bak,这样就可以避免Git干扰Repo的操作。

切换到Git环境

当Repo同步完成后我们需要切换到Git管理环境,可以使用以下脚本切换到Git环境:

#! /bin/sh
gits=`find . -name .git-bak`
for git in $gits
do
mv $git ${git%-bak*}
done
gitignores=`find . -name .gitignore-bak`
for gitignore in $gitignores
do
mv $gitignore ${gitignore%-bak*}
done
mv .git-bak .git
mv .gitignore-bak .gitignore

这个脚本会把所有.git-bak.gitignore-bak文件恢复为.git.gitignore,这样就可以使用Git命令来管理代码了。

三、Git批量修改Git Commit记录里的用户名和邮箱

有时候我们可能会在提交代码时,使用了错误的用户名或者邮箱信息,这样会导致提交历史中显示不正确的作者信息。如果我们想要批量修改提交历史中的用户名或者邮箱信息,可以使用以下脚本:

#!/bin/sh
git filter-branch --env-filter '
OLD_EMAIL="旧邮箱地址"
CORRECT_NAME="新用户名"
CORRECT_EMAIL="新邮箱地址"
if [ "$GIT_COMMITTER_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_COMMITTER_NAME="$CORRECT_NAME"
    export GIT_COMMITTER_EMAIL="$CORRECT_EMAIL"
fi
if [ "$GIT_AUTHOR_EMAIL" = "$OLD_EMAIL" ]
then
    export GIT_AUTHOR_NAME="$CORRECT_NAME"
    export GIT_AUTHOR_EMAIL="$CORRECT_EMAIL"
fi
' -f --tag-name-filter cat -- --branches --tags

这个脚本会使用git filter-branch命令来遍历所有的分支和标签,并修改所有匹配旧邮箱地址的提交者和作者的用户名和邮箱为新的用户名和邮箱。需要注意的是,这个操作会重写提交历史,所以在执行之前最好做好备份,并且在执行之后需要强制推送到远程仓库。

四、Git命令别名设置

Git提供了一种别名设置功能,可以简化命令的输入。例如,我们可以设置"st"为"status"的别名,如下:

git config --global alias.st status

这样,我们就可以用git st来代替git status了。我们还可以为其他常用的Git命令设置别名,例如:

git config --global alias.df diff
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.cm commit
git config --global alias.cfg config

这些别名设置会保存在用户目录下的.gitconfig文件中,我们可以随时修改或者删除它们。

五、Git下载很慢问题解决方案

有时候我们在使用Git下载代码时,可能会遇到速度很慢或者无法连接的问题,这可能是因为网络环境或者服务器的原因。我们可以使用以下方法来加速Git下载速度:

镜像链接修改

如果我们要下载的代码是托管在Github上的,我们可以把原链接中的github.com替换为一些镜像网站的域名,例如:

这样就可以利用镜像网站来加速下载速度了。

使用浏览器插件

如果我们不想每次都修改链接,我们也可以使用一些浏览器插件来自动替换链接。例如,我们可以安装一个名为"Github 加速"的插件,它可以自动把Github上的链接替换为镜像网站的链接,并提供一些其他功能,如克隆、下载、查看等。

六、Github/googlesource/chromium下载Timed out解决办法

如果我们在下载Github/googlesource/chromium等网站上的代码时,出现了Timed out(超时)的错误,这可能是因为终端没有走代理流量。我们可以使用以下命令来设置代理:

git config --global http.proxy "localhost:port"

其中,localhost:port是我们本地代理的地址和端口,例如localhost:1080。这样,我们就可以让Git通过代理来下载代码了。

总结

本文介绍了以下几个Git实用技巧:

  • Git打包差异化:如何使用Git打包不同版本或者不同分支之间的差异文件或者补丁文件。
  • Git环境和Repo环境切换:如何在使用Repo工具同步代码时,切换到Git管理环境,以便使用Git命令。
  • Git批量修改Git Commit记录里的用户名和邮箱:如何在提交历史中批量修改错误的用户名或者邮箱信息。
  • Git命令别名设置:如何为常用的Git命令设置简短的别名,以便快速输入。
  • Git下载很慢问题解决方案:如何使用镜像链接或者浏览器插件来加速Git下载速度。
  • Github/googlesource/chromium下载Timed out解决办法:如何在终端中设置代理来解决下载超时的问题。

如果有其他的Git实用技巧,欢迎在评论区分享给大家。谢谢!

相关文章
|
1月前
|
安全 开发工具 git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
Windows11搭建Python环境(2)- Anaconda虚拟环境中安装Git
87 0
|
1月前
|
存储 JavaScript 开发工具
Windows 10环境下Git安装之简易指南
该指南教小白在Windows 10上安装Git,介绍Git设置的基础知识,为你的开发项目做准备!
|
1月前
|
JSON Java Maven
SpringBoot使用git-commit-id-maven-plugin打包
【2月更文挑战第1天】 git-commit-id-maven-plugin 是一个maven 插件,用来在打包的时候将git-commit 信息打进jar中。 这样做的好处是可以将发布的某版本和对应的代码关联起来,方便查阅和线上项目的维护。至于它的作用,用官方说法,这个功能对于大型分布式项目来说是无价的。
118 0
|
1月前
|
Linux Shell 开发工具
Git 安装和配置教程:Windows - Mac - Linux 三平台详细图文教程,带你一次性搞 Git 环境
Git是一款免费、开源的分布式版本控制系统,广泛应用于软件开发领域。随着开源和云计算的发展,Git已经成为了开发者必备的工具之一。本文将为大家介绍Git在Windows、Mac和Linux三个平台上的安装和配置方法,带你一次性搞定Git环境
1778 0
|
9月前
|
API 开发工具 C语言
Windows 环境下 git 客户端中的 git-bash 和 MINGW64
Windows 环境下 git 客户端中的 git-bash 和 MINGW64
|
10月前
|
存储 JavaScript Shell
Git笔记(一)---- Git基本概念及基础环境
Git笔记(一)---- Git基本概念及基础环境
102 0
|
10月前
|
算法 Linux 网络安全
超详细!linux环境git clone探坑录
超详细!linux环境git clone探坑录
416 0
|
11月前
|
Shell 网络安全 Go
分享我的 Shell 环境,git 操作效率提升 100% !
本文分享我在工作中常用的环境变量 + Shell alias:比如 `git add .` 这样的命令,我只需要敲 `ga` 就好了!
56 0
|
NoSQL Java 关系型数据库
Centos 7 脚本命令环境部署安装JDK+Maven+Git+MySql+Redis,让你快人一步
Centos 7 脚本命令环境部署安装JDK+Maven+Git+MySql+Redis,让你快人一步
330 1
Centos 7 脚本命令环境部署安装JDK+Maven+Git+MySql+Redis,让你快人一步
|
API 开发工具 git
如何手写一个 webpack 插件:实现 vuecli3 打包时生成一个 git 分支版本信息的文件?
如何手写一个 webpack 插件:实现 vuecli3 打包时生成一个 git 分支版本信息的文件?
225 0
如何手写一个 webpack 插件:实现 vuecli3 打包时生成一个 git 分支版本信息的文件?