[英]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 diff
或git 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.