首页 > 解决方案 > git pre-push hook 合并冲突

问题描述

我试图在每次推送之前构建我的乳胶文件,所以我使用pre-push脚本:

#!/bin/sh

./compile y    # just does latex,bibtex,latex,latex
if [ "$?" -eq 0 ]; then
    git commit -a --amend --no-edit 
else
    echo "An error has occurred, check the logs in .bits"
fi

每次我推送时,它都会成功,但是当我拉取时,我会在编译的 pdf 文件上遇到合并冲突。我不明白。

标签: gitgithooks

解决方案


听起来您正在将 PDF 作为pre-push钩子中存储库的一部分签入。pre-push钩子不能影响推送的内容;它只能接受或拒绝它。

发生的事情是您尝试在未更新 PDF 文件(版本 A)的情况下推送版本,您的钩子正在修改提交以更新 PDF 文件(版本 B),版本 A 的推送成功,然后您尝试再次拉取远程版本(版本 A)。由于您的本地分支 (B) 和远程分支 (A) 现在不同,因此拉取创建了一个合并提交。

PDF 并非设计为面向行的,因此您会在旧 PDF 和新 PDF 之间遇到合并冲突。

您可以做两件事来改善这一点:不要尝试在预推送挂钩中修改内容(如果推送不是最新的或不完整的,则拒绝推送),不要签入像 PDF 这样的构建产品进入您的存储库。与两个面向行的源文件相比,您更有可能在两个二进制或非面向行的文件上发生冲突。


推荐阅读