我有一个钩子,它接受已更改的文件并将它们复制到标准提交工作的目录中,但合并的自动提交将它断开,因为最后两个提交不包含任何更改的文件git hook在自动提交后获取变更集
这里是我当前的代码
generateChangeSet() {
if [ ! -d $WORKDIR ];then
mkdir $WORKDIR
fi
CHANGESET=$(git log -1 --name-status $oldrev $newrev | grep -v -e "^Merge" -e "^commit" -e "^Author" -e "^Date" -e "^ " -e "^$")
if [ -z $CHANGESET ]; then
echo Could not detect any files in the change set, aborting push
exit $RETVAL
fi
# Get a list of deleted files
DELFILES=$WORKDIR/deletedFiles.sh
if [ -f $DELFILES ];then
rm -rf $DELFILES
fi
for dFile in $(echo $CHANGESET | grep "^D" | awk '{print $2}'); do
echo deleted file $dFile
echo rm -f $dFile >> $DELFILES
done
if [ -f $DELFILES ];then
sed -i '1s/^/#!\/bin\/bash\n/' $DELFILES
chmod +x $DELFILES
echo find . -depth -type d -empty >> $DELFILES
echo rm deletedFiles.sh >> $DELFILES
fi
echo "Generating diff between $newrev and $oldrev"
git archive HEAD $(echo $CHANGESET | grep -v "^D" | awk '{print $2}') | (cd $WORKDIR && tar xf -)
}
如何拿到剧本,以获得最新修改过的文件在任何时候任何想法?
感谢
你是对的$ WORKDIR不同步。我首先这样做的原因是,由于历史原因,源代码包含硬编码数据库方案,我的任务是修复到位之前从git获取代码到测试服务器,并用测试服务器上的模式替换数据库方案。我在变更集上做的理由是,在整个源代码中进行搜索和替换需要很长时间,因为有超过25k个文件。我面临的问题是,当自动提交发生例如合并之后,$ oldrev不能正确反映 – rojanu
也许你应该在某处($ WORKDIR?)记录最后一次更新(通过钩子)。然后你可以使用'git diff-tree'来比较那个rev,而不是'$ oldrev'($ oldrev从哪里来,钩子的输入,我假设),而不是'$ newrev'。 – torek