繁体   English   中英

git pull / stash与git过滤器冲突

[英]git pull / stash conflicts with a git filter

这个问题是关于将git与nbstripout过滤器一起使用,它在将它存储在git之前从jupyter笔记本(JSON文件)中删除了一些字段。 剥离过滤器用于在几个开发人员处理同一个笔记本时最小化冲突。

所以repo配置开始于:

$ cat .git/config
[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = git@github.com:stas00/fastai_v1.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master
[include]
        path = ../.gitconfig

$ cat .gitconfig
[filter "nbstripout"]
        clean = nbstripout
        smudge = cat
        required = true
[diff "ipynb"]
        textconv = nbstripout -t

$ cat .gitattributes
*.ipynb filter=nbstripout

*.ipynb diff=ipynb

git diffgit commit期间使用此配置,笔记本通过一个过滤器运行,该过滤器删除本地的json字段(如cell的execution_count ),并且从开发人员到开发人员会有所不同。

现在考虑一个正常情况,即同一个笔记本在上游和本地更改。 尝试将本地仓库与上游同步失败:

$ git pull origin master
From github.com:stas00/fastai_v1
 * branch            master     -> FETCH_HEAD
Updating 1ea49ad..ae0ba93
error: Your local changes to the following files would be overwritten by merge:
        dev_nb/004_callbacks.ipynb
Please commit your changes or stash them before you merge.
Aborting

$ git diff dev_nb/004_callbacks.ipynb | wc -l
60

$ git stash
Saved working directory and index state WIP on pull-merge: 1ea49ad Console progress bar

$ git diff dev_nb/004_callbacks.ipynb | wc -l
0

$ git pull origin master
From github.com:stas00/fastai_v1
 * branch            master     -> FETCH_HEAD
Updating 1ea49ad..ae0ba93
error: Your local changes to the following files would be overwritten by merge:
        dev_nb/004_callbacks.ipynb
Please commit your changes or stash them before you merge.
Aborting

这不应该发生,因为git stash应该隐藏所有本地更改。 我不太确定究竟发生了什么,但我认为git stash也会通过过滤器运行,它只会隐藏通过nbstripout过滤器显示的更改。 那么也许git stash不会把文件带到预先修改状态? 然而,在我禁用过滤器后, git diff没有显示任何内容(并且在禁用之前都没有)。

换句话说,为什么git pull看到潜在的冲突并且不会合并,即使git diff显示不存在局部变化(但实际上它们确实存在,它们只是通过过滤器剥离的变化)。

至少我希望git diff能够在剥离过滤器被禁用后显示更改,但事实并非如此。

使git stash; gist pull git stash; gist pull work我必须在运行git stash之前禁用过滤器。

$ nbstripout --uninstall

$ git stash
Saved working directory and index state WIP on pull-merge: 1ea49ad Console progress bar

$ git pull origin master
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0
Unpacking objects: 100% (3/3), done.
From github.com:stas00/fastai_v1
 * branch            master     -> FETCH_HEAD
   1ea49ad..ae0ba93  master     -> origin/master
Updating 1ea49ad..ae0ba93
Fast-forward
 dev_nb/004_callbacks.ipynb | 1268 ----------------------------------------------------------------------------------------------------------------------------------------
 1 file changed, 1268 deletions(-)

现在我必须记得重新启用过滤器:

$ nbstripout --install

是否有更好的工作流程,不需要禁用/启用过滤器来实现此功能?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM