django - Git 神秘地删除东西(编辑 : actually django-storages)

标签 django git amazon-s3 git-branch django-storage

问题:有时,但不是每次,Git 都会删除存储库的 static 目录。我们不确定是什么触发了它,但它似乎在分支之间 merge 或有时甚至只是检查分支时发生。它会在不询问的情况下执行此操作,并吃掉跟踪的文件。

背景:

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

  • 作为这种情况何时发生的例子:

    1) 史蒂夫有一个干净的开发分支(没有更改提交或暂存)并且稳定。他使用 git flow release start|finish 剪切了一个新版本,并且在这个过程中(可能是从 master 到 develop 的反向 merge ),整个/static/树被删除了。

    2) 史蒂夫通过放弃更改来修复删除(实质上是取消删除文件)。但是随后,Steve 只是从 master 切换回 develop 并且/static/目录再次被破坏(这是 Git Tower 的情况)

    3) 有时只是从功能分支 merge 到开发作为临时 merge 可以触发它。尽管

这可能与我们如何修复/static/目录的切换有关吗?批量取消删除已删除内容的最佳方法是什么?丢弃本地更改或硬重置 HEAD 似乎都无法解决问题。 rebase 对我们有帮助吗?

更新 我们刚刚通过 git add . 再次体验了这一点 - 没有更改分支,没有 merge 。这对诊断有帮助吗?

这是 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\"

这里是.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/_*

最佳答案

女士们先生们,我要公开道歉。 Git 不是罪魁祸首。我将把这个问题留在这里作为对其他可能以同样方式通过的人的教训。

我们使用的是 django-storages 后端(一个“插件”,使 Django 能够透明地将文件存储在 Amazon S3 上)。这有一个名为 HashPathStorageTest 的测试。此测试的拆卸删除了 settings.MEDIA_ROOT,它被设置为 ./static。在我看来,这是错误的。它没有业务全面删除不是它创建的文件。

在 checkin 之前,我们像好公民一样运行我们的测试。大多数时候我们只为我们的代码运行测试,但偶尔我们为整个项目(包括第 3 方插件)运行测试。这产生了问题中的行为。因为我们同时运行了测试和 git 东西,所以很难确定哪个命令正在执行删除操作(并且删除的文件仅在我们运行 git status 时显示)。

这样问题就解决了。再次抱歉对 Git 的好名声进行诽谤!

关于django - Git 神秘地删除东西(编辑 : actually django-storages),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9158825/

相关文章:

ios - 错误 CordovaModuleLoadError - Visual Studio 中的多设备混合应用程序

node.js - AWS S3 - 以八位字节流的形式获取 PDF 并上传到 S3 存储桶

python - Django + Apache + Windows WSGIDaemonProcess 替代方案

git-svn 无法创建分支以遵循 SVN 分支

php - 存储库部署和 Composer : what workflow?

amazon-s3 - 如何使用 AWS AppSync 将文件上传到 AWS S3

python - 通过 Boto 的 AWS S3 对象生命周期

django - 如何与Django一起使用Dokku?

Django 总是尝试与本地主机建立 SSL 连接

django - 当主机系统上只有Nginx时,使用Docker的静态文件