【问题标题】:How to set checkout strategy in libgit2?如何在 libgit2 中设置结帐策略?
【发布时间】:2020-08-23 11:26:57
【问题描述】:

我正在尝试使用 libgit2 从存储库中提取。

我的步骤如下:

我使用 git_remote_fetch 来下载远程原始数据并返回 OK。

在我使用 git_merge API 之后。

问题是当我刚刚使用 git_index_remove_bypath 删除了本地分支 'master' 中的文件 'aa.txt',但没有提交它。同时我合并远程分支('origin/master')头。远程头只需修改'bb.txt'。但是当我使用 git_merge 时,它会返回错误代码“-13”。错误信息是“1 个未提交的更改将被合并覆盖”。我刚刚删除了本地分支中的一个文件。

但我可以在 Git 命令行 'git pull' 中成功执行。

所以,我怀疑我在执行 Checkout 时的策略是错误的。如何避免这个错误?

【问题讨论】:

    标签: libgit2


    【解决方案1】:

    我刚刚删除了本地分支中的一个文件。

    如果您只调用了git_index_remove_bypath,并且您没有提交该更改,那么您还没有删除本地分支中的文件。您有未提交的更改。

    这就是您收到此错误的原因:

    1 个未提交的更改将被合并覆盖

    提交更改,然后进行合并。或者进行合并,然后删除文件。但是在您所处的状态下进行合并是不可能的,因为它会删除未提交的更改。

    【讨论】:

    • @Thomson,谢谢你的回答,对我很有用
    • @Thomson,两个用户修改同一个文件的同一个区域,libgit2会报内容冲突。还行吧。但是我在我的 git_checkout_options 中设置了一个 notify_cb,并将 notify_flags 设置为包含 GIT_CHECKOUT_NOTIFY_CONFLICT。结果 git_merge 只返回错误代码,没有输出冲突文件名。合并失败时如何从通知回调中获取冲突文件名?
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多