Git:如何在特定修订版之间获取文件

时间:2013-11-28 07:49:05

标签: git

在我的项目中有一个目录(即db / updates /),其中存储了DB的所有更新。每个更新都在单个文件中(即update_1.sql,update_2.sql等)。 在发布时,我需要自上次修订(存储在DB中)以来添加/更新的文件范围。 现在我按照以下方式进行:

# pull changes    
git pull origin branch --force

# make patch    
git diff $last_revision -- ./db/updates > ./PATCH

# remove all files in directory /db/updates    
rm -rf ./db/updates/*

# apply changes    
git apply --ignore-whitespace --inaccurate-eof ./PATCH

它工作正常,但有些情况会失败。 如果在提交A中添加的文件中提交B和C之间的文件发生了更改,则修补程序将失败并显示错误 错误:db / updates / update_xxx.sql:没有这样的文件或目录

如何忽略丢失的文件?我在创建补丁的时候使用了--diff-filter = A,但这将忽略所需的修订版B和C之间提交的所有更改。

2 个答案:

答案 0 :(得分:1)

尝试仅对添加的文件进行过滤:

git diff --diff-filter=A $last_revision -- ./db/updates > ./PATCH

这将只为您提供补丁中新添加的文件,而不是修改后的文件。

点击“Filter git diff by type of change”了解更多信息:
要获取新的修改过的文件:

git diff --diff-filter=ACMR $last_revision -- ./db/updates > ./PATCH

答案 1 :(得分:1)

嗯,有更简单的方法可以获得添加/修改的文件,而不会出现修补程序等问题:

# pull changes
git pull origin branch --force

# get modified files list since last revision
modified=`git diff --name-only last_revision -- ./db/updates`

# copy added/modified to another folder
for sql in $modified; do
    cp $sql ./temp/
done