__pycache__合并冲突无法由gitignore解决

时间:2020-10-23 03:47:55

标签: python git

我正在尝试将开发分支合并回master。我在两个文件中都运行了git rm '*.pyc',这是我的gitignore(从here复制):

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
.pybuilder/
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
#   For a library or package, you might want to ignore these files since the code is
#   intended to run in multiple environments; otherwise, check them in:
# .python-version

# pipenv
#   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
#   However, in case of collaboration, if having platform-specific dependencies or dependencies
#   having no cross-platform support, pipenv may install dependencies that don't work, or not
#   install all needed dependencies.
#Pipfile.lock

# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/

# Celery stuff
celerybeat-schedule
celerybeat.pid

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/

# pytype static type analyzer
.pytype/

# Cython debug symbols
cython_debug/

但是,当我这样做

git checkout master
git merge version3ascii

({version3ascii是我的开发分支的名称)

我收到以下错误消息:

CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_subprocess.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_subprocess 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_subprocess 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_ssl.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_ssl 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_ssl 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_ssl.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_ssl 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_ssl 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_scipy_signal.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_scipy_signal 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_scipy_signal 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_scipy_signal 2.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_scipy_signal 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_scipy_signal 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_responses.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_responses 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_responses 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_responses.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_responses 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_responses 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_re.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_re 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_re 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_re.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_re 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_re 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_pytest.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_pytest 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_pytest 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_pytest.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_pytest 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_pytest 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_pkg_resources 2.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_pkg_resources 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_pkg_resources 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_pkg_resources.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_pkg_resources 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_pkg_resources 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_random_mtrand 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_random_mtrand 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_numpy_random_mtrand.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_random_mtrand 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_random_mtrand 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_numpy_ndarray.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_ndarray 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_ndarray 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_numpy_ndarray.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_ndarray 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_ndarray 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_numpy_core_umath 2.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_umath 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_umath 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_numpy_core_umath.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_umath 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_umath 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_numpy_core_numerictypes.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_numerictypes 2.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_numerictypes 2.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_http 2.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_http 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_http 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_http.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_http 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_http 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_curses.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_curses 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_curses 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_curses.cpython-37 2.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_curses 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_curses 3.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_collections 2.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_collections 4.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_collections 4.py left in tree.
CONFLICT (rename/delete): venv/lib/python3.7/site-packages/astroid/brain/__pycache__/brain_collections.cpython-37.pyc deleted in version3ascii and renamed to venv/lib/python3.7/site-packages/astroid/brain/brain_collections 3.py in HEAD. Version HEAD of venv/lib/python3.7/site-packages/astroid/brain/brain_collections 3.py left in tree.
Automatic merge failed; fix conflicts and then commit the result.

然后,当我运行git mergetool时,我得到:

git mergetool
Merging:
venv/lib/python3.7/site-packages/astroid/brain/brain_collections 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_collections 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_curses 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_curses 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_http 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_http 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_numerictypes 2.py
venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_umath 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_core_umath 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_ndarray 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_ndarray 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_random_mtrand 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_numpy_random_mtrand 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_pkg_resources 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_pkg_resources 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_pytest 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_pytest 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_re 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_re 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_responses 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_responses 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_scipy_signal 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_scipy_signal 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_ssl 3.py
venv/lib/python3.7/site-packages/astroid/brain/brain_ssl 4.py
venv/lib/python3.7/site-packages/astroid/brain/brain_subprocess 3.py

Deleted merge conflict for 'venv/lib/python3.7/site-packages/astroid/brain/brain_collections 3.py':
  {local}: created file
  {remote}: deleted
Use (c)reated or (d)eleted file, or (a)bort? a
Continue merging other unresolved paths [y/n]? n

有人知道这是怎么回事吗?

我不记得要重命名或删除任何venv/lib/*文件。

(这是Heroku网络应用程序的一部分-即该应用程序当前正在master上运行。不确定是否与此相关。)

1 个答案:

答案 0 :(得分:1)

首先,请注意.gitignore内容本身永远不会对合并产生任何直接影响。这是因为git merge合并了已提交且不能更改的 commits 的内容。他们有他们拥有的文件。地球上或其他任何地方的电力都无法改变它们。您的git merge正在合并一些现有的提交,以准备进行新的提交。

我在两个文件中都运行过git rm '*.pyc' ...

您是说“两次提交”吗? “在两个文件中”在这里毫无意义。

我不记得要重命名或删除任何venv/lib/*文件。

如果venv/lib包含*.pyc个文件,并且您运行了以上git rm,则将从工作树和Git索引中删除这些*.pyc文件。文件超出Git索引后,然后在现有*.pyc中现有的.gitignore条目即可生效,从而防止以后的*.pyc文件通过进入Git索引您的工作树。这样,随后的提交将缺少那些*.pyc文件。

在这里,我将只看第一个冲突,并将长行分开以仅用于发布目的:

CONFLICT (rename/delete):
venv/lib/python3.7/site-packages/
astroid/brain/__pycache__/brain_subprocess.cpython-37 2.pyc
deleted in version3ascii and renamed to
venv/lib/python3.7/site-packages/
astroid/brain/brain_subprocess 3.py
in HEAD. ...

这真的意味着:

  • 合并基础提交包含一个名为.../__pycache__/brain_subprocess.cpython-37 2.pyc的文件;
  • version3ascii提交缺少该文件;和
  • HEAD版本的 也缺少此文件,但是有一个名为.../astroid/brain/brain_subprocess 3.py new 文件

,该新名称的HEAD内容与旧名称下的合并基础内容相似,足以使git merge决定谁在合并基础提交和{{1}之间进行更改} commit必须已重命名(也许还修改了)文件的基于合并的副本。

似乎合并的基本提交包含这些HEAD文件所有这些*.pyc文件,并且venv/*文件已被正确删除在两个分支提示提交中(*.pyc分支提示和当前分支提示)。但是,version3ascii中存在一些venv/*文件,但HEAD中可能没有文件(否则,Git可能会在那里检测到类似的重命名)。 version3ascii文件不是.py文件的重命名和修改后的副本,而且Git的相似性检测器只是将其误检测为重命名,这似乎也很可能。

前进的道路很多。例如:

  • 如果任何.pyc文件都不应该在任一分支提示提交中,则可以进行两个缺少这些文件的新分支提示提交。现在,Git不会找到外观相似的文件作为重命名,这使Git相信不正确的事情。

  • 如果您不想进行新的提交,则可以中止此合并并使用扩展参数(venv/*参数)重新运行,该参数将重命名阈值设置得更高或关闭重命名检测器,例如-X,将其限制为99%相似的文件,而不是50%相似的文件。

  • 或者,您可以简单地手动调整Git索引中的所有内容。事实是,合并因合并冲突而停止。现在,您要做的是安排正确合并结果。尽管正确的合并可能以某种方式使用了所有三个输入,但是这些不需要与三个输入提交中的任何一个匹配。由于git merge -Xfind-renames=99 已完全停止,因此您现在可以完全控制 ,当您最终运行git merge或{ {1}}完成合并。您可以运行git merge --continue删除所有内容,从整个布料中构建所有新文件,然后git commit

(其他选项之一可能比“ nuke-and-pave”选项更有用,即使您确实进行了“ nuke-pave”的操作,也要删除并重新创建,但是您可能不想这样做)这样批发。)