轉自: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 *