將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 *

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM