将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 *
二、提取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 *
【作者】sky
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .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概述 【转】