将git修改的文件按照原来的目录层次全部复制出来【转】

转自:https://blog.csdn.net/davidhopper/article/details/90410419

严正声明:本文系作者davidhopper原创,未经许可,不得转载。

在使用git管理源代码时,经常需要将一台机器上一堆已修改但未提交的文件,按照原来的目录层次,全部复制到另一台机器上去。最笨的办法当然是一个个查找已修改的文件,并将其复制出来。不过已修改文件数量较多时,这种方法不但繁琐,而且容易出错。本文介绍一种使用git和Shell脚本,将修改的文件按照原来的目录层次全部复制出来的方法。

一、尚未使用git提交修改的文件

如果修改的文件尚未使用git提交,可使用如下命令复制并打包:

复制代码
# 在源代码根目录,使用git status命令获取已修改文件的列表
git status | grep modified | awk '{print $2}' > list.txt
# 在当前目录下,创建temp目录
mkdir temp
# 将已修改文件列表逐一复制到当前目录下的temp目录
xargs -a ./list.txt cp --parents -t ./temp

# 将temp目录下的所有文件打包为modules.tar.gz
cd temp
tar -czf modules.tar.gz *
复制代码

 

 

1
2

二、提取git某条提交记录中更改的文件

如果已使用git提交修改,可使用下述命令将某条提交记录中所有更改的文件按原来的目录层次全部复制出来:

复制代码
# 在源代码根目录,获取提交记录f3794bd30cb1d3f8e64f1177d3149f28cbc828e6中的更改文件名
# 你需要将提交记录f3794bd30cb1d3f8e64f1177d3149f28cbc828e6替换为自己的记录名
# git log f3794bd30cb1d3f8e64f1177d3149f28cbc828e6 -1 --name-only
# 可以替换为
# git show f3794bd30cb1d3f8e64f1177d3149f28cbc828e6 --name-only
git log f3794bd30cb1d3f8e64f1177d3149f28cbc828e6 -1 --name-only | grep '/' | awk '{print $1}' > list.txt
# 在当前目录下,创建temp目录
mkdir temp
# 将已修改文件列表逐一复制到当前目录下的temp目录
xargs -a ./list.txt cp --parents -t ./temp

# 将temp目录下的所有文件打包为modules.tar.gz
cd temp
tar -czf modules.tar.gz *
复制代码

 

posted @   Sky&Zhang  阅读(1632)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类
历史上的今天:
2016-11-04 BlueDroid介绍 【转】
2016-11-04 Android BlueDroid(一):BlueDroid概述 【转】
点击右上角即可分享
微信分享提示