python - gitpython 合并 -X 他们的
问题描述
我想通过选择master,使用gitpython将master合并到本地分支中,同时丢弃任何冲突的东西。
我在做
repo = self._repo
# have all history locally
repo.git.fetch('--all')
# set build branch as remote and discard local changes
repo.git.reset('--hard', '{origin}/{branch}'
.format(origin=self.origin_name, branch=self.build_branch_name))
# set active branch as build branch
repo.git.checkout(self._config.git_branch)
# merge master into build
current = repo.active_branch
master = repo.branches[self.master_name]
base = repo.merge_base(current, master)
repo.index.merge_tree(master, base, "-X theirs")
repo.index.commit('Merge master into feature', parent_commits=(current.commit, master.commit))
这失败repo.index.merge_tree(master, base, "-X theirs")
了TypeError: merge_tree() takes at most 3 arguments (4 given)
。
这样做的正确方法是什么?
解决方案
(我试图弄清楚同样的事情,所以这些基本上是我在调查时的笔记......)
merge_tree
不接受任何额外的参数,除了base
:
def merge_tree(self, rhs, base=None):
该文档说用于index.from_tree
控制合并分辨率:
引发:
GitCommandError – 如果存在合并冲突。错误将在第一个冲突路径引发。如果您想自己完成适当的合并解决方案,则必须提交更改的索引(或从中创建有效的树)并使用三向 IndexFile.from_tree 调用重试。
from_tree
通过接受额外的参数**kwargs
并将它们传递给它的git read-tree
命令:
def from_tree(cls, repo, *treeish, **kwargs):
...
repo.git.read_tree(*arg_list, **kwargs)
但是,read-tree
没有合并策略选项;相反,它只有--trivial
和--aggressive
(默认from_tree
使用--aggressive
):
git read-tree [[-m [--trivial] [--aggressive] | --reset | --prefix=<prefix>]
[-u [--exclude-per-directory=<gitignore>] | -i]]
[--index-output=<file>] [--no-sparse-checkout]
(--empty | <tree-ish1> [<tree-ish2> [<tree-ish3>]])
from_tree
返回一个新索引而不是操纵全局索引,所以我最好的猜测是:
new_index = IndexFile.from_tree(repo, base, current, master, m=True)
new_index.commit('Merge master into feature', parent_commits=(current.commit, master.commit))
在这一点上,我不确定您如何将该新提交与您的分支相关联。gitpython 团队建议还是使用repo.git.merge
:
但是,我的建议始终是
git
直接将命令用于此类常见功能(例如repo.git.merge(...)
),除非您确实必须实现自己的专用逻辑,从而在IndexFile
.
所以也许这不是:
repo.git.merge(master, X='theirs')
推荐阅读
- api - 如何在flutter中点击并上传多张图片
- mongodb - 在模型中添加一个 pre 中间件以在 mongoose 中进行扩展
- asp.net - 我需要创建一个动态站点地图,(一旦我创建一个新页面,它将自动应用站点地图)
- python - 如何在 Jupyter 笔记本内的 tqdm 循环中动态更新 matplotlib 图?
- javascript - 数组在 0 处有一个元素,但放入 console.log 时未定义
- python-3.x - pyrebase4 HTTPConnectionPool 最大重试次数超出了 url。NewConnectionError 建立新连接失败 getaddrinfo failed
- react-native - 当我在 android 背景上关闭应用程序时反应原生(expo)崩溃
- c++ - 我想在 qt 图表中做自定义轴
- java - java使用pdfbox添加带签名的图片
- ballerina - 如何在 Ballerina 中迭代时从数组中删除元素