Проблема: иногда, но не каждый раз, Git удаляет каталог static
репозитория. Мы не уверены, что вызывает это, но, похоже, это происходит либо при слиянии между ветвями, либо иногда даже при проверке ветвей. Он делает это, не спрашивая, и ест отслеживаемые файлы.
Фон:
- У меня есть (частный) проект с несколькими ответвлениями: «релиз», «разработка», несколько функциональных линий.
- Двое из нас (я и @stevejalim) работают над репозиторием. Эта проблема возникает у нас обоих.
- Я использую исключительно командную строку для своих команд git; Стив использует сочетание командной строки и Git Tower.
- Это проект Django с каталогом
static
. Мы моглиgit rm
редактировать каталогstatic
в какой-то момент в прошлом или поместить его в.gitignore
, но не недавно. И глава нашей ветки разработки не имеетstatic
в.gitignore
и отслеживает файлы вstatic
. - Это случается так редко, что мы не уверены, что это - то, что мы делаем, или прерывистая проблема, ошибка с Git или поврежденное дерево.
- Это может произойти только при объединении другой ветки обратно в
develop
. Но ветви всегда разветвляются отdevelop
и обратно кdevelop
. Но мы не уверены. Мы используем git-flow, но проблема возникает и при использовании команд, отличных от git-flow.
В качестве примеров, когда это может произойти:
1) У Стива была ветка разработки, которая была чистой (без изменений для фиксации или стадии) и стабильной. Он вырезал новый выпуск с
git flow release start|finish
, и в процессе (возможно, обратное слияние от мастера к разработке) все дерево /static/ было удалено.2) Стив исправил удаление, отменив изменения (чтобы, по сути, восстановить файл). Но затем Стив просто переключился с мастера обратно на разработку, и каталог /static/ снова был заблокирован (это было с Git Tower).
3) Иногда простое слияние из функциональной ветки для разработки, так как промежуточное слияние может вызвать его. Хотя чаще всего это происходит при нарезке нового релиза.
Может ли это быть связано с тем, как мы восстанавливаем загрузку каталога /static/? Каков наилучший способ массового восстановления удаленных вещей? Ни отмена локальных изменений, ни полная перезагрузка HEAD, похоже, не лечат ситуацию. Может ли нам помочь rebase?
ОБНОВЛЕНИЕ Мы только что снова столкнулись с этим просто с git add .
- без изменения ветвей, без слияния. Это вообще помогает в диагностике?
Вот содержимое .git/config Стива:
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
ignorecase = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = [email protected]: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/_*
ok
жаль, что вы не можете сослаться на репозиторий с проблемой. Я бы просмотрелfind .git/ -print0 | xargs -0 grep -w static
иgit log -- static/
, особенно убедившись, что каталог никогда не бывает технически пустым. Пустые каталоги не отслеживаются git. Кроме того, я бы подумал, что редкие проверки или подмодули играют с вами злые шутки. - person sehe   schedule 06.02.2012git filter-branch
удаление вещей, которые вы не хотите выставлять напоказ. Это серьезно помогло бы вам получить ответ, если бы вы могли упаковать его в крошечный общий репозиторий. (см. progit.org/book/ch9-7.html#removing_objects) - person sehe   schedule 06.02.2012develop
и всегда интегрируются обратно. И статический каталог никогда не удаляется нами намеренно. - person Joe   schedule 06.02.2012