代码之家  ›  专栏  ›  技术社区  ›  stason

git pull/stash与git过滤器冲突

  •  3
  • stason  · 技术社区  · 7 年前

    这个问题是关于将git与 nbstripout

    因此,回购配置首先是:

    $ 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 暂存 也可以通过一个过滤器运行,它只保存通过nbstripout过滤器显示的更改。所以也许 暂存 不完全使文件处于预修改状态吗?但是,在我禁用过滤器之后 不显示任何内容(禁用前也不显示)。

    换句话说,为什么 git pull 看到潜在的冲突并且不会合并,即使 差异比较 显示不存在本地更改(但它们确实存在,它们只是通过过滤器去除的更改)。

    至少我想 差异比较 以显示禁用条带输出筛选器后所做的更改。

    使 git stash; gist pull 工作我必须在运行前禁用过滤器 暂存 .

    $ 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
    

    是否有一个更好的工作流不需要禁用/启用筛选器就可以工作?

    0 回复  |  直到 7 年前
    推荐文章