在使用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 *
转自:https://blog.csdn.net/davidhopper/article/details/90410419