2017-01-31 18 views
0

У меня есть головоломка у меня в руках: несколько ранее зафиксированных файлов исчезли за ночь, но нет ни одной фиксации, которая показывает, что они были удалены. Как это могло случиться?Файлы исчезли из хранилища, но в истории фиксации нет удаления

ситуация выглядит следующим образом:

  • У меня есть личное хранилище Git на BitBucket, с одной ветви.
  • В моей команде 3 человека, и все используют SourceTree как их git-интерфейс.
  • Вчера я нажал фиксацию - и после нее хранилище было в порядке.
  • С тех пор все 3 другие члены команды толкнул несколько фиксаций:
    • один был местный слияния,
    • два были онлайн README.md правок,
    • один был на сайте ((т.е. через-а-страницы.) т.е. через веб-страницу) удаление одного несвязанного файла,
    • , а остальные - несколько коммитов с 1 или 2 файлами.
  • Утром я вытащил хранилище, только чтобы найти несколько различных файлов, которые были совершены разными людьми в разное время ушли из хранилища:
    • они ушли из локальной копии ,
    • они ушли из Source страницы на сайте Bitbucket проекта,
    • они ушли из .zip, загруженный из Загрузки страницы.
  • Однако:
    • ни один из коммитов после шахты не удалить любой из этих файлов,
    • я могу пойти на более раннюю совершить что модифицированный один «исчезнувшие» файлы, перейдите к своей сводной странице, просмотреть его историю - и ни один из коммитов в нем не удалит файл.
  • Я дважды проверил, что никто не испортился с .gitignore, но с декабря прошлого года он был нетронутым.

Кроме того, чтобы еще больше запутать вопрос: несколько месяцев назад я добавил файлы A.R и test-A.R в одну фиксацию. Позднее я переименовал test-A.R в test.A.R. Теперь A.R все еще находится в хранилище, но ни test-A.R, ни test.A.R все еще там.

Итак, что может привести к удалению файлов из репозитория Git без любой из них действительно удаляет их?


PS. Конечно, я подал заявку на поддержку поддержки BitBucket, но я не уверен, что они быстро ответят.

ответ

2

Скорее всего, кто-то заставил толчок (т.е. git push -f ...), что означает, что в их местной истории заменяет ветку на пульте дистанционного управления. Не обязательно быть фиксацией, которая удаляет вещи, как вы предполагаете. Если разработчик никогда не синхронизировал свои изменения, чтобы увидеть все коммиты на сервере, а затем принудительно вытолкнул их устаревшую историю, вы можете потерять фиксации. Все это предполагает, что с помощью «частного» репозитория вы имеете в виду, что разработчики в вашей небольшой группе могут писать в репо.

Я бы отрегулировал разрешения репо, ветви или проекта, чтобы этого больше не повторилось. Или вы можете потребовать, чтобы все пользователи использовали запросы на загрузку, если вы в порядке, перейдя к подходу gitflow или потока объектов. Также убедитесь, что ваши разработчики получают информацию о том, как использовать Git.

Просто догадайтесь здесь, но, вероятно, если бы все внесли изменения, но несколько человек потеряли свои коммиты, тогда я предполагаю, что тот, кто не потерял никаких коммитов, является виновником.

+0

Оказалось, что один из коммитов действительно заставил файлы исчезнуть. Я буду исследовать дальше и либо принять ваш ответ (если они действительно «git push -f'), либо написать свой собственный (если проблема окажется чем-то другим). – Dragomok

+0

@ Dragomok: чтобы добавить к этому ответу, посмотрите, есть ли у вас копия этого репо в другом месте. Если бы сила разработчика была нажата, то все остальные разработчики имели бы хороший оригинал, и вы можете использовать это, чтобы воссоздать дерево, как и должно было быть. – halfer

+0

@halfer Мне удалось восстановить репо, последовательно используя «git reset --hard ...» до тех пор, пока файлы не появятся, скопируйте файлы за пределами репо, а затем вернитесь назад и снова верните их обратно. Для полноты: тот факт, что мне удалось это сделать, исключает, что толчок был вынужден, не так ли? (Ответственный за весь проклятие не знал, что они на самом деле сделали, так что я не собираюсь получить от них окончательное подтверждение ...) – Dragomok