Git神秘地删除东西(编辑:实际上是django-storages)

Joe*_*Joe 11 git django amazon-s3 django-storage git-branch

问题:有时,但不是每次,Git都会删除static回购目录.我们不确定是什么触发它,但它似乎发生在分支之间合并或有时甚至只是检查分支.它没有询问就这样做,并且吃掉跟踪的文件.

的背景:

  • 我有一个(私人)项目,有一些分支,'发布','开发',多个功能线.
  • 我们有两个人(我和@stevejalim)正在处理回购.这个问题发生在我们俩身上.
  • 我纯粹使用git命令的命令行; 史蒂夫正在使用命令行和Git Tower的混合物.
  • 这是一个带有static目录的Django项目.我们可能在过去的某个时刻git rm编辑了static目录,或者将其放入.gitignore,但不是最近.而我们的开发分支的负责人并没有static.gitignore和具有文件static跟踪.
  • 这种情况很少发生,以至于我们不确定这是我们正在做的事情,还是间歇性问题,Git的错误或损坏的树
  • 可能只在将另一个分支合并回来时才会发生develop.但是分支总是从分支develop到分支develop.但我们不确定.
  • 我们正在使用git-flow,但是在使用非git-flow命令时也会出现问题.

  • 作为何时可以攻击的例子:

    1)史蒂夫有一个干净的开发分支(没有改变提交或阶段)和稳定.他git flow release start|finish在流程中切换了一个新版本(可能是从master到back的合并),整个/ static/tree被删除了.

    2)Steve通过丢弃更改来修复删除(基本上取消删除文件).然后,史蒂夫只是从主人回到开发,而/ static/dir再次被摧毁(这与Git Tower有关)

    3)有时只是从功能分支合并到开发作为临时合并可以触发它.但是,在切割新版本时,它似乎确实发生了

它可能与我们如何修复/ static/dir的切换有关吗?批量取消删除已删除的内容的最佳方法是什么?抛弃局部变化或硬重置HEAD似乎都无法治愈.一个rebase可能帮助我们?

更新我们刚刚再次体验过这一点git add .- 没有变化的分支,没有合并.这有助于诊断吗?

以下是Steve的.git/config的内容:

[core]
   repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
    ignorecase = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git@github.com:foobarbazbam/bar.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
[gitflow "branch"]
    master = master
    develop = develop
[gitflow "prefix"]
    feature = feature/
    release = release/
    hotfix = hotfix/
    support = support/
    versiontag = 
[difftool "tower"]
    cmd = \"/Applications/Tower.app/Contents/Resources/CompareScripts/kaleidoscope.sh\" \"$LOCAL\" \"$REMOTE\"
Run Code Online (Sandbox Code Playgroud)

以下是内容.gitignore:

.DS_Store
*.pyc
*.log
*.log.*
*.bak
*~
settings_local.py
/build/
/static_collected/*
/static/uploads/*
/static/theme_files/*
/static/picture/*
pip-log.txt
*.tmproj
*.dot
*.db
*.sublime-project
*.sublime-workspace
/docs/_*
Run Code Online (Sandbox Code Playgroud)

Joe*_*Joe 6

好的女士们和男士们,我要公开道歉.Git不应该受到指责.我将把这个问题留给其他可能以同样方式通过的人.

我们使用django-storages后端('插件'使Django能够透明地在Amazon S3上存储文件).这有一个叫做的测试HashPathStorageTest.撕下这个测试删除settings.MEDIA_ROOT,设置为./static.在我看来,这是错误的.它没有商业覆盖删除它没有创建的文件.

在签入之前,我们正在像好公民一样运行我们的测试.大部分时间我们只运行代码测试,但偶尔我们会对整个项目(包括第三方插件)进行测试.这就产生了问题中的行为.因为我们一起运行测试和git,所以很难确定哪个命令正在执行删除(并且删除的文件仅在我们运行时显示git status).

所以问题解决了.再次,抱歉对Git这个好名字进行诽谤!

  • 我们当然会! (2认同)