Проблемът: понякога, но не всеки път, 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
и в процеса (вероятно обратното сливане от master към development), цялото /статично/ дърво беше изтрито.2) Стив поправи изтриването, като отхвърли промените (за да възстанови по същество файла). Но след това Стив просто превключи от master обратно към development и директорията /static/ беше затворена отново (това беше с Git Tower)
3) Понякога просто сливане от клон на функция, за да се развие като междинно сливане, може да го задейства. Изглежда обаче, че се случва най-често при рязане на нова версия
Възможно ли е да е свързано с това как поправяме затварянето на /static/ dir? Кой е най-добрият начин за групово възстановяване на изтритите неща? Нито отхвърлянето на локалните промени, нито хардуерното нулиране до HEAD изглежда лекува нещата. Може ли повторното базиране да ни помогне?
АКТУАЛИЗАЦИЯ Току-що изпитахме това отново просто с git add .
- без промяна на клонове, без сливане. Това помага ли изобщо за диагнозата?
Ето съдържанието на .git/config на Steve:
[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