【发布时间】:2012-02-27 20:26:55
【问题描述】:
问题:有时,但不是每次,Git 都会删除存储库的 static 目录。我们不确定是什么触发了它,但它似乎发生在分支之间合并或有时甚至只是检出分支时。它会在不询问的情况下执行此操作,并吃掉跟踪的文件。
背景:
- 我有一个(私人)项目,它有几个分支、“发布”、“开发”、多个功能线。
- 我们两个人(我和@stevejalim)正在处理这个repo。这个问题发生在我们俩身上。
- 我在 git 命令中纯粹使用命令行; Steve 混合使用了命令行和 Git Tower。
- 这是一个带有
static目录的Django 项目。我们可能在过去某个时间点将git rmed 到static目录,或者将其放入.gitignore,但不是最近。并且我们的开发分支的负责人在.gitignore中没有static,并且在static中有文件被跟踪。 - 这种情况很少发生,以至于我们不确定这是我们正在做的事情,还是间歇性问题、Git 的错误或损坏的树
-
可能仅在将另一个分支合并回
develop时发生。但是分支总是从develop分支并返回到develop。但我们不确定。 我们正在使用 git-flow,但在使用非 git-flow 命令时也会出现问题。
-
作为这种情况何时发生的示例:
1) Steve 有一个干净的(没有对提交或阶段进行更改)且稳定的开发分支。他用
git flow release start|finish剪切了一个新版本,在这个过程中(可能是从master 到develop 的反向合并),整个/static/ 树被删除了。2) Steve 通过放弃更改来修复删除(实质上是取消删除文件)。但是随后,Steve 简单地从 master 切换回了 development,并且 /static/ 目录再次被删除(这是使用 Git Tower)
3) 有时只是从功能分支合并到作为临时合并进行开发就可以触发它。不过,在删减新版本时似乎确实经常发生这种情况
这可能与我们如何修复 /static/ 目录的 zapping 有关吗?批量取消删除已删除内容的最佳方法是什么?丢弃本地更改或硬重置 HEAD 似乎都无法解决问题。变基可能对我们有帮助吗?
更新我们刚刚通过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\"
这里是.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/_*
【问题讨论】:
-
@sehe 这只是一条路过的评论!我会将额外信息合并到问题中。抱歉,这不是公开回购。
-
@stevejalim @Joe -
ok遗憾的是,您无法链接到有问题的存储库。我会仔细阅读find .git/ -print0 | xargs -0 grep -w static和git log -- static/,特别是要确保该目录在技术上永远不会为空。 git 不跟踪空目录。另外,我会考虑稀疏结帐或子模块在您的脑海中玩花样。 -
顺便说一句,您可以通过
git filter-branch删除您不想公开的内容来“提炼”实际问题。如果您可以将其打包在一个小型共享存储库中,它将极大地帮助您获得答案。 (见progit.org/book/ch9-7.html#removing_objects) -
谢谢sehe - 稍后我会看看你建议的两件事。恐怕我们无法将当前的回购公开,我怀疑我们是否可以在一个小的共享回购中复制它 - 你是否建议从主回购中分叉并大量删除,只留下几个文件?
-
如果目录在一个分支中被删除,而在另一个分支中没有修改,则在合并时将被删除。会不会是这个原因?
标签: django git amazon-s3 git-branch django-storage