在使用git管理源代碼時队伟,經(jīng)常需要將一臺機器上一堆已修改但未提交的文件,按照原來的目錄層次氢惋,全部復(fù)制到另一臺機器上去。最笨的辦法當(dāng)然是一個個查找已修改的文件稽犁,并將其復(fù)制出來焰望。不過已修改文件數(shù)量較多時,這種方法不但繁瑣已亥,而且容易出錯熊赖。本文介紹一種使用git和Shell腳本,將修改的文件按照原來的目錄層次全部復(fù)制出來的方法虑椎。
一震鹉、尚未使用git提交修改的文件
如果修改的文件尚未使用git提交,可使用如下命令復(fù)制并打包:
# 在源代碼根目錄绣檬,使用git status命令獲取已修改文件的列表
git status | grep modified | awk '{print $2}' > list.txt
# 在當(dāng)前目錄下足陨,創(chuàng)建temp目錄
mkdir temp
# 將已修改文件列表逐一復(fù)制到當(dāng)前目錄下的temp目錄
xargs -a ./list.txt cp --parents -t ./temp
# 將temp目錄下的所有文件打包為modules.tar.gz
cd temp
tar -czf modules.tar.gz *
二嫂粟、提取git某條提交記錄中更改的文件
如果已使用git提交修改娇未,可使用下述命令將某條提交記錄中所有更改的文件按原來的目錄層次全部復(fù)制出來:
# 在源代碼根目錄,獲取提交記錄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
# 在當(dāng)前目錄下星虹,創(chuàng)建temp目錄
mkdir temp
# 將已修改文件列表逐一復(fù)制到當(dāng)前目錄下的temp目錄
xargs -a ./list.txt cp --parents -t ./temp
# 將temp目錄下的所有文件打包為modules.tar.gz
cd temp
tar -czf modules.tar.gz *
轉(zhuǎn)自:https://blog.csdn.net/davidhopper/article/details/90410419